【问题标题】:Passing multiples data to function with checkbox flutter使用复选框颤振传递多个数据以发挥作用
【发布时间】:2020-12-15 04:52:10
【问题描述】:

我有一个带有 4 个复选框数据的 Listview 的 showModalBottomSheet,我遇到了问题。

1:每当我按下每个复选框时,它都不会更新,然后如果我关闭 showModalBottomSheet 然后再次打开它会显示之前选择的数据,它不会实时更新。

从API获取数据没有问题

初始化数据

var ids;
 List<SearchMenuModel> menu_model = [];
  List<bool> inputs = new List<bool>();
  @override
  void initState() {
    // TODO: implement initState
    setState(() {
      for(int i=0;i<menu_model.length;i++){
        inputs.add(true);
      }
    });

void ItemChange(bool val,int index){
    setState(() {
      inputs[index] = val;
    });
  }

Showmodalbottomsheet 和 Listview 和复选框

     void displayBottomSheet(BuildContext context) {
    showModalBottomSheet(
        context: context,
        builder: (ctx) {
          return Container(
            height: MediaQuery
                .of(context)
                .size
                .height * 0.6,
            child: Column(
              children: [
                Container(
                  width: 300,
                  height: 250,
                  child: new ListView.builder(
                      itemCount: menu_model.length,
                      itemBuilder: (BuildContext context, int index){
                        return new Container(
                          padding: new EdgeInsets.all(10.0),
                          child: new Column(
                            children: <Widget>[
                              new CheckboxListTile(
                                  value: inputs[index],
                                  title: new Text(menu_model[index].english),
                                  controlAffinity: 
                                  ListTileControlAffinity.leading,
                                  onChanged:(bool val){
                                    ItemChange(val, index);
                                    setState(() {
                                      ids=menu_model[index].id;
                                      print(ids);
                                    });
                                  }
                              )
                            ],
                          ),
                        );

                      }
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(15),
                  child: GestureDetector(
                    onTap: (){
                      submit(ids);
                    },
                    child: Container(
                      height: 40,
                      width: 280,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(5),
                        color: Color.fromRGBO(34, 83, 148, 1),
                      ),
                      child: Center(
                        child: Text(
                          "APPLY",
                          style: TextStyle(
                              color: Colors.white,
                              fontSize: 18,
                              fontWeight: FontWeight.bold),
                        ),
                      ),
                    ),
                  ),
                )
              ],
            ),
          );
        });
  }

【问题讨论】:

    标签: flutter flutter-layout


    【解决方案1】:

    将您的容器包装在 StatefulBuilder 中,如下所示:

    StatefulBuilder(
    builder: (context, setState) {
          return Container()....
      
    })
    

    并在您希望底部工作表容器小部件更改的任何时候调用setState。

    Here 是一个使用 statefulbuilder 和 alertdialog 的简单示例的链接。

    【讨论】:

    • 您可以在 submit(ids) 之后使用空值重新初始化您的 List`。面临同样的问题,但我的问题与对话框有关,而不是底页。
    • 抱歉回复晚了,这解决了我的第一个问题..但是当我再次打开模式表时,我需要清除所选项目@Julian Otto
    • 但我没有使用任何 TextEditingController @Julian Otto
    猜你喜欢
    • 2021-03-02
    • 1970-01-01
    • 2020-09-21
    • 2019-01-05
    • 2020-09-27
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多