【flutter】Flutter更新showDialog中的内容(多选)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ivy_doudou/article/details/96828488

转自:https://blog.csdn.net/yumi0629/article/details/81939936


showDialog(
    context: context,
    builder: (context) {
        String label = 'test';
        return StatefulBuilder(
            builder: (context, state) {
                print('label = $label');
                return GestureDetector(
                    child: Text(label),
                    onTap: () {
                        label = 'test8';
                        print('onTap:label = $label');
                        // 注意不是调用老页面的setState,而是要调用builder中的setState。
                        //在这里为了区分,在构建builder的时候将setState方法命名为了state。
                        state(() {});  
                    },
                );
            },
         );
    });

例子:多选

//显示多选框
  _showDialog() async {
    boolList = List<bool>();
    await showDialog(
        context: context,
        builder: (context) {
          return StatefulBuilder(
              builder: (context,state){
                return CupertinoAlertDialog(
                  title: Text('请选择'),
                  actions: <Widget>[
                    CupertinoDialogAction(
                        isDestructiveAction: true,
                        onPressed: () {
                          Navigator.of(context).pop('取消');
                        },
                        child: new Text('取消')),
                    CupertinoDialogAction(
                        isDestructiveAction: true,
                        onPressed: () {
                          //保存数据
                          _jyfw.text = "";
                          for(int i=0;i<boolList.length;i++){
                            if(boolList[i]){
                              if(_jyfw.text==null||_jyfw.text.isEmpty){
                                _jyfw.text = _selctlist[i]['value'];
                              }else{
                                _jyfw.text = _jyfw.text + "," +_selctlist[i]['value'];
                              }

                            }
                          }
                          setState(() {});
                          Navigator.of(context).pop('确定');
                        },
                        child: new Text('确定')),
                  ],
                  content: SingleChildScrollView(
                    child: Material(
                      child: Column(
                        children: _getMulitiWidget(_selctlist,state)
                      ),
                    ),
                  ),
                );
              }
          );
        }
    );
  }
  List<Widget> _getMulitiWidget(List<Map> list,state){
    List<Widget> widgetList = List<Widget>();
    for(int i=0;i<list.length;i++){
      boolList.add(false);
      widgetList.add(Container(
        child: CheckboxListTile(
          title: Text(list[i]['name']),
          value: boolList[i],
          onChanged: (value){
            boolList[i] = value;
            state(() {});
          }
        ),
      ));
    };
    return widgetList;
  }

猜你喜欢

转载自blog.csdn.net/ivy_doudou/article/details/96828488