我有一个按钮,当按下该按钮时,将打开一个模式底部的页面。该工作表具有一个表单小部件,该部件需要几个文本字段和一个图像(来自画廊/相机)。对于此图像输入,我创建了另一个有状态的小部件,该小部件在上一个视图(模式表)中称为。现在,通过用户接收的图像文件被设置在子状态小部件中的变量中。我的问题是,如何在父窗口小部件中访问此变量(子窗口小部件中的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()
],
),
)
],
),
),
),
),
)
);
}```
如果您不使用状态管理解决方案,则必须使用回调。
在父级中创建一个变量。创建一个使用值的方法,并将其分配给刚创建的变量。]>
创建最终函数并将其添加到您孩子的构造函数中。现在,当您在父级中实例化子级小部件时,它将接受您刚刚创建的方法。
适当时在您的孩子中运行该功能。
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);
},
),
);
}
}