flutter - 在父窗口小部件中访问子窗口小部件的变量(带有Dart的Flutter)

标签 flutter dart global-variables scoped-model

我有一个按钮,当按下该按钮时,将打开一个模态底页。该工作表具有一个表单窗口小部件,该窗口小部件需要几个文本字段和一个图像(来自库/相机)。对于此图像输入,我创建了另一个有状态的小部件,该小部件在上一个 View (模式表)中称为。
现在,通过用户接收的图像文件被设置在子状态小部件中的变量中。我的问题是,如何在父窗口小部件中访问此变量(子窗口小部件中的File对象)?

请引用以下代码:

底页:(请参阅调用子小部件的注释。)

        context: _scaffoldKey.currentContext,
        builder: (BuildContext context) {
          return Scaffold(
              backgroundColor: Colors.white,
              appBar: AppBar(
                elevation: 0.0,
                automaticallyImplyLeading: false,
                backgroundColor: Colors.white,
                title: Center(
                  child: _formTitleWidget(),
                ),
              ),
              body: Container(
              height: MediaQuery.of(context).size.height* 0.5,
              margin: EdgeInsets.all(MediaQuery
                  .of(context)
                  .copyWith()
                  .size
                  .width * 0.05),
              child: Form(
                key: _addChildFormKey,
                child: SingleChildScrollView(
                  child: Container(
                    height: MediaQuery.of(context).size.height* 0.4,
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        // Calling the child widget here - where 'image' variable is set
                        AddChildView(),
                        Container(
                          height: MediaQuery.of(context).size.height* 0.4,
                          width:  MediaQuery.of(context).size.width* 0.65,
                          child: Column(
                            children: [
                              _childNameInput(),
                              _childBirthDateInput(),
                              _childHeightInput(),
                              _childWeightInput(),
                              _addChildWithInfo()
                            ],
                          ),
                        )
                      ],
                    ),
                  ),
                ),
              ),
            )
          );
        }```

最佳答案

如果您不使用状态管理解决方案,则必须使用回调。

在父级中创建一个变量。
创建一个采用值的方法,并将其分配给刚创建的变量。

创建一个最终的Function并将其添加到您 child 的构造函数中。
现在,当您在父级中实例化子级小部件时,它将接受您刚刚创建的方法。

适当时在您的 child 中运行该功能。

class ParentWidget extends StatelessWidget {
  Image image;

  callBack(Image imageFromChild) {
    this.image = imageFromChild;
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

class ChildWidget extends StatelessWidget {
  final Function callBack;

  const ChildWidget({Key key, this.callBack}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      child: FlatButton(
        child: Text('Press'),
        onPressed: () {
          var image = uploadImageMethod();
          callBack(image);
        },
      ),
    );
  }
}

关于flutter - 在父窗口小部件中访问子窗口小部件的变量(带有Dart的Flutter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58159655/

相关文章:

Flutter:从不同的文件运行多个 UI 测试

Flutter 国际化 : How to access to nested data in json

flutter design 如何创建非常复杂的只有一只康纳啮齿动物

gradle - Protobuf Gradle 插件版本 0.8.6 及更高版本与项目 'flutter_blue' 使用版本 0.8.3

dart - 如何在关闭 JIT 的情况下以解释器模式运行 Dart VM?

postgresql - 如何在 Aqueduct 和 Postgres 中使用不同的表名

dart - 我如何连接两个字符串,其中一个字符串需要是 flutter 中 Widget 的静态变量

PHP 全局关键字解决方法

巴什脚本 : Reading from 1-line file into multiple global variables

javascript - 完整日历删除数据库中外部事件的编辑描述