Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在小部件之间传递数据_Flutter_Dart - Fatal编程技术网

Flutter 在小部件之间传递数据

Flutter 在小部件之间传递数据,flutter,dart,Flutter,Dart,当按下按钮时,如何从ChoiceChip小部件检索数据并将其传递给另一个小部件 class AddCashForm extends StatefulWidget { @override _AddCashFormState createState() => _AddCashFormState(); } class _AddCashFormState extends State<AddCashForm> { List<String> chipList =

当按下按钮时,如何从ChoiceChip小部件检索数据并将其传递给另一个小部件

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');
})

您想将数据传递到另一个页面,但不调用该页面?我可以帮你。在您的情况下,我提供回调方法最简单的方法是使用构造函数注入,正如您所说的。