简体   繁体   English

如何将变量传递给子小部件?

[英]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.

相关问题 如何将整数从子小部件传递给父小部件? - How do I pass an integer from a child widget to the parent widget? Flutter - 如何从子小部件调用父小部件函数,同时还使用变量保持状态? - Flutter - How do I call a Parent widget function from child widget while also maintaining the state with a variable? 如何将数据从子小部件传递到父小部件 - How can i pass data from a child widget to a parent widget 如何将数据传递给 Flutter 中的小部件? - How do I pass data to a widget in Flutter? 如何将另一个范围中的变量用于子小部件? - How can i use a variable from another ambit into a child Widget? 如何通过引用状态小部件传递数据? 我想在有状态的小部件内更改变量并更新原始变量 - How to pass data by reference to stateful widget? I want to change a variable inside a stateful widget and update original variable 如何将动画值传递给子窗口小部件 - How to pass animation value to a child widget 如何在颤振中将上下文传递给子小部件 - How to pass context to a child widget in flutter 如何允许手势通过堆栈中的小部件? - How do I allow gestures to pass through a widget in a stack? 如何有条件地将参数传递给 Flutter/Dart 中的 Widget? - How do I conditionally pass argument to Widget in Flutter/Dart?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM