【问题标题】:Reset value of dropdown menu flutter重置下拉菜单颤动的值
【发布时间】:2020-07-08 12:13:32
【问题描述】:

我有两个下拉列表,下拉 1 列出工作类别下拉 2 包含基于类别的列表工作。当我选择下拉 1 时,相应的数据应显示在下拉 2 中。

一切正常,但问题是当我更改下拉列表1的值时,下拉列表2每次都会显示以前的数据以及下拉列表的选定数据,API没有任何问题

 Flexible(
              flex: 0,
              child: Padding(
                padding: EdgeInsets.only(left: 10, right: 10, top: 15),
                child: Container(
                  width: double.infinity,
                  height: 45,
                  decoration: BoxDecoration(
                      color: Colors.white,
                      borderRadius: BorderRadius.circular(5),
                      border: Border.all(color: Colors.blueGrey)),
                  child: DropdownButton(
                    isExpanded: true,
                    itemHeight: 50,
                    icon: Icon(Icons.arrow_drop_down),
                    iconSize: 40,
                    underline: SizedBox(),
                    hint: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Text(
                        "Job Category",
                        style: TextStyle(fontSize: 15, color: Colors.black54),
                      ),
                    ),
                    value: _selectedmenu,
                    onChanged: (newValue) {
                      setState(() {
                        _selectedmenu = newValue;
                        print(_selectedmenu);
                        GetWorkCategories();
                      });
                    },
                    items: home_model.map((menu) {
                      return DropdownMenuItem(
                        child: Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: new Text(menu.english),
                        ),
                        value: menu.id,
                      );
                    }).toList(),
                  ),
                ),
              ),
            ),
            Flexible(
              flex: 0,
              child: Padding(
                padding: EdgeInsets.only(left: 10, right: 10, top: 15),
                child: Container(
                  width: double.infinity,
                  height: 45,
                  decoration: BoxDecoration(
                      color: Colors.white,
                      borderRadius: BorderRadius.circular(5),
                      border: Border.all(color: Colors.blueGrey)),
                  child: DropdownButton(
                    isExpanded: true,
                    itemHeight: 50,
                    icon: Icon(Icons.arrow_drop_down),
                    iconSize: 40,
                    underline: SizedBox(),
                    hint: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Text(
                        AppLocalization.of(context)
                            .getTranslatedValues('job_text'),
                        style: TextStyle(fontSize: 15, color: Colors.black54),
                      ),
                    ),
                    value: _selectedjobcategory,
                    onChanged: (newValue) {
                      setState(() {
                        _selectedjobcategory = newValue;
                      });
                    },
                    items: job_category_model.map((jobs) {
                      return DropdownMenuItem(
                        child: Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Text(jobs.english),
                        ),
                        value: jobs.english,
                      );
                    }).toList(),
                  ),
                ),
              ),
            ),

下拉2功能

 Future<String> GetWorkCategories() async {
    
    Future auth_token = SharedPrefrence().getToken();
    auth_token.then((data) async {
      token = data;
      var response = await http.post(Urls.CATEGORIES,
          headers: {"Content-Type": "application/json", "Authorization": token},
          body: json.encode({"menuId": _selectedmenu}));
      print("response menu " + response.body.toString());

      Map<String, dynamic> value = json.decode(response.body);
      var message = value['status'];
      try {
        if (response.statusCode == 200) {
          try {
            if (message == true) {
              var menu_list = value['doc'];
              job_category_model.clear();
              for (int i = 0; i < menu_list.length; i++) {
                var data = menu_list[i];
                job_category_model.add(CategoryModel.fromJson(data));
              }
              setState(() {

                print("UI Updated");
              });
            } else {
              final snackBar = SnackBar(content: Text(message));
              _scaffoldKey.currentState.showSnackBar(snackBar);
            }
          } catch (e) {
            e.toString();
          }
        } else {
          final snackBar = SnackBar(content: Text(message));
          _scaffoldKey.currentState.showSnackBar(snackBar);
        }
      } catch (e) {
        e.toString();
      }
    });
  }

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    Morbius 验证您的API code 并确保在GetWorkCategories(); 中添加新数据行之前重置_selectedjobcategory = null; 并清除job_category_model.clear(); 的先前数据。

    for 循环之前:

    ...
    var menu_list = value['doc'];
    _selectedjobcategory = null;
    job_category_model.clear();
    for (int i = 0; i < menu_list.length; i++) {
       var data = menu_list[i];
       job_category_model.add(CategoryModel.fromJson(data));
    }
    ...
    

    【讨论】:

    • 怎么做...?可以指导我这个@Hakiza
    • API 正在工作我正在获取数据,但是如何清除下拉列表 2 中的先前数据...?可以指导我这个@Hakiza
    • 这个对象列表:job_category_model.clear() 如果不工作给GetWorkCategories();寻找问题的源代码!!
    • 这不起作用,当我调用 GetWorkCategories() 时如何清除数据;功能@Hakiza
    • @Morbius 为了清楚起见,我编辑了回复,如果对您有帮助,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2019-05-25
    • 2022-01-16
    • 1970-01-01
    • 2015-01-03
    • 2021-08-28
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多