Flutter 在小部件之间传递数据
当按下按钮时,如何从ChoiceChip小部件检索数据并将其传递给另一个小部件Flutter 在小部件之间传递数据,flutter,dart,Flutter,Dart,当按下按钮时,如何从ChoiceChip小部件检索数据并将其传递给另一个小部件 class AddCashForm extends StatefulWidget { @override _AddCashFormState createState() => _AddCashFormState(); } class _AddCashFormState extends State<AddCashForm> { List<String> chipList =
class AddCashForm extends StatefulWidget {
@override
_AddCashFormState createState() => _AddCashFormState();
}
class _AddCashFormState extends State<AddCashForm> {
List<String> chipList = [
"weekly",
"bi-weekly",
"monthly",
"once",
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new COHAppBar().getAppBar(),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
children: <Widget>[
ChoiceChipWidget(chipList),
],
),
RaisedButton(
child: Text("Update Cash Flow"),
onPressed: () {
setState(() {});
},
),
//Text('${widget.selectedChoice ?? "File is empty"}'), Data goes here
],
),
);
}
}
这是我的选择
class ChoiceChipWidget extends StatefulWidget {
final List<String> reportList;
ChoiceChipWidget(this.reportList);
@override
_ChoiceChipWidgetState createState() => new _ChoiceChipWidgetState();
}
class _ChoiceChipWidgetState extends State<ChoiceChipWidget> {
String selectedChoice = "";
_buildChoiceList() {
List<Widget> choices = List();
widget.reportList.forEach((item) {
choices.add(Container(
child: ChoiceChip(
label: Text(item),
selected: selectedChoice == item,
onSelected: (selected) {
setState(() {
selectedChoice = item;
});
},
),
));
});
return choices;
}
@override
Widget build(BuildContext context) {
return Wrap(
children: _buildChoiceList(),
);
}
}
class ChoiceChipWidget扩展了StatefulWidget{
最终清单报告清单;
ChoiceChipWidget(this.reportList);
@凌驾
_ChoiceChipWidgetState createState()=>新建;
}
类_ChoiceChipWidgetState扩展状态{
字符串selectedChoice=“”;
_建筑选择家(){
列表选项=列表();
widget.reportList.forEach((项){
选择。添加(容器)(
孩子:选择权(
标签:文本(项目),
已选择:selectedChoice==项目,
当选:(已选){
设置状态(){
selectedChoice=项目;
});
},
),
));
});
返回选择;
}
@凌驾
小部件构建(构建上下文){
回程包装(
子项:_buildChoiceList(),
);
}
}
我想在按下按钮时将其传递到这个小部件中
class AddCashForm extends StatefulWidget {
@override
_AddCashFormState createState() => _AddCashFormState();
}
class _AddCashFormState extends State<AddCashForm> {
List<String> chipList = [
"weekly",
"bi-weekly",
"monthly",
"once",
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new COHAppBar().getAppBar(),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
children: <Widget>[
ChoiceChipWidget(chipList),
],
),
RaisedButton(
child: Text("Update Cash Flow"),
onPressed: () {
setState(() {});
},
),
//Text('${widget.selectedChoice ?? "File is empty"}'), Data goes here
],
),
);
}
}
类AddCashForm扩展StatefulWidget{
@凌驾
_AddCashFormState createState()=>\u AddCashFormState();
}
类_AddCashFormState扩展状态{
列表芯片列表=[
“每周”,
“双周”,
“每月”,
“一次”,
];
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:new COHAppBar().getAppBar(),
正文:专栏(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
划船(
儿童:[
ChoiceChipWidget(芯片列表),
],
),
升起的按钮(
子项:文本(“更新现金流”),
已按下:(){
setState((){});
},
),
//文本(“${widget.selectedChoice???”文件为空“}”),数据位于此处
],
),
);
}
}
。。。。。
我是否需要添加构造函数,以便在按下按钮时传递数据?我如何在这些小部件之间传递数据您可以在按下事件的RaisedButton中添加以下行:-
final Route route = MaterialPageRoute(builder: (context) => ChoiceChipWidget(true));
Navigator.push(mContext, route);
您可以使用如下回调函数:
class ChoiceChipWidget extends StatefulWidget {
final List<String> reportList;
final Function(String item) onItemSelected;
ChoiceChipWidget(this.reportList, this.onItemSelected);
@override
_ChoiceChipWidgetState createState() => new _ChoiceChipWidgetState();
}
onSelected: (selected) {
setState(() {
selectedChoice = item;
widget.onChoiceSelected(item);
});
}
然后,在创建小部件时,可以执行以下操作:
ChoiceChipWidget(chipList, (item) {
print('Item selected: $item');
})
您想将数据传递到另一个页面,但不调用该页面?我可以帮你。在您的情况下,我提供回调方法最简单的方法是使用构造函数注入,正如您所说的。