[英]How do I pass a variable to a child widget?
I am passing a string value `final String userLogin;我正在传递一个字符串值`final String userLogin; from another file via Route.
通过 Route 从另一个文件。
class AutfPasswordWidget extends StatefulWidget {
final String userLogin;
AutfPasswordWidget({Key? key, required this.userLogin}) : super(key: key);
@override
State<AutfPasswordWidget> createState() => _AutfPasswordWidgetState();
}
final iconColor = const Color(0xFF2787F5);
class _AutfPasswordWidgetState extends State<AutfPasswordWidget> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
leading: BackButton(
color: Colors.grey
),
elevation: 0,
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min, // Иконка по центру несмотря на кнопку назад
children: [
Icon(Icons.telegram_sharp, color: iconColor),
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 2, vertical: 2)),
Text('ID', style: TextStyle(color: Colors.black, fontSize: 18)),
],
)),
body: Padding(
padding: const EdgeInsets.all(20),
child: ListView(
children: [
_MainInfoWidget(),
],
),
),
);
}
}
But I need to use the resulting value in another widget 'Use password for $userLogin'
, located under it.但我需要在位于它下方的另一个小部件
'Use password for $userLogin'
中使用结果值。
class _MainInfoWidget extends StatelessWidget {
const _MainInfoWidget({Key? key,}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(
Icons.telegram_sharp,
color: iconColor,
size: 64,
),
SizedBox(height: 20),
Text('Password',
style: AppAuthTitleStyle.LinkButton),
SizedBox(height: 20),
Text(
'Use password for $userLogin' ,
style: AppDescribeTittleStyle.LinkButton,
textAlign: TextAlign.center,
),
],
),
);
}
}
How do I pass the value to the desired widget ?如何将值传递给所需的小部件?
You can pass userLogin
to _mainInfoWidget()
by accesing the parent variable using widget.userLogin
:您可以通过使用
widget.userLogin
访问父变量将userLogin
传递给_mainInfoWidget()
:
_MainInfoWidget(userLogin: widget.userLogin),
Complete example:完整示例:
class AutfPasswordWidget extends StatefulWidget {
final String userLogin;
AutfPasswordWidget({Key? key, required this.userLogin}) : super(key: key);
@override
State<AutfPasswordWidget> createState() => _AutfPasswordWidgetState();
}
final iconColor = const Color(0xFF2787F5);
class _AutfPasswordWidgetState extends State<AutfPasswordWidget> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
leading: BackButton(color: Colors.grey),
elevation: 0,
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize:
MainAxisSize.min, // Иконка по центру несмотря на кнопку назад
children: [
Icon(Icons.telegram_sharp, color: iconColor),
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 2, vertical: 2)),
Text('ID', style: TextStyle(color: Colors.black, fontSize: 18)),
],
)),
body: Padding(
padding: const EdgeInsets.all(20),
child: ListView(
children: [
_MainInfoWidget(userLogin: widget.userLogin),
],
),
),
);
}
}
class _MainInfoWidget extends StatelessWidget {
final String? userLogin;
const _MainInfoWidget({
this.userLogin,
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(
Icons.telegram_sharp,
color: iconColor,
size: 64,
),
SizedBox(height: 20),
Text(
'Password',
),
SizedBox(height: 20),
Text(
'Use password for $userLogin',
// style: AppDescribeTittleStyle.LinkButton,
textAlign: TextAlign.center,
),
],
),
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.