【问题标题】:How to reset second drop down list if i change first drop down value?如果我更改第一个下拉值,如何重置第二个下拉列表?
【发布时间】:2021-11-09 07:14:17
【问题描述】:

我有两个下拉列表,第二个取决于第一个。

当我在选择第二个下拉值后更改第一个下拉值时,会引发如下错误。

如果我更改第一个下拉值,如何重置第二个下拉列表?

下拉按钮如下。

DropdownButtonFormField<Standard>(
                      validator: (value) {
                        if (value == null) {
                          return "Select Standard";
                        }
                      },
                      isExpanded: true,
                      hint: Text('Select Standard'),
                      value: selectedStandard,
                      items: _standards.map((Standard standard) {
                        return DropdownMenuItem<Standard>(
                          value: standard,
                          child: Text(standard.standardName),
                        );
                      }).toList(),
                     
                      onChanged: (val) {
                        setState(() {
                          selectedStandard = val;
                          standardId = val?.standardId;
                          onMediumChange(val);
                        });
                      }),
                  SizedBox(height: 20),

                  DropdownButtonFormField<Medium>(
                      validator: (value) {
                        if (value == null) {
                          return "Select Medium";
                        }
                      },
                      isExpanded: true,
                      hint: Text('Select Medium'),
                      value: selectedMedium,
                      items: _mediums.map((Medium medium) {
                        return DropdownMenuItem<Medium>(
                          value: medium,
                          child: Text(medium.mediumName),
                        );
                      }).toList(),
                     
                      onChanged: (val) {
                        setState(() {
                          selectedMedium = val;
                          mediumId = val?.mediumId;
                        });
                      }),

获取值代码如下。我使用的变量。

var _standards = <Standard>[];
  var _mediums = <Medium>[];
  Standard? selectedStandard;
  Medium? selectedMedium;

@override
  void initState() {
    super.initState();

    ApiManager().getStandards().then((standards) {
      setState(() {
        _standards = standards;
      });
    });
  }

  void onMediumChange(standard) {
    setState(() {
      selectedStandard = standard;
      _mediums = [];
    });
    String mediumUrl =
        "$baseUrl/medium/get_by_course_id?standard_id=${selectedStandard?.standardId}";
    ApiManager().getMediums(mediumUrl).then((List<Medium> value) => {
          setState(() {
            _mediums = value;
          })
        });
  }

【问题讨论】:

  • 我认为您只是在选择第一个下拉项时将 selectedMedium 设为空。如果您仍然想要更好的解释,请为此下拉列表添加一些示例数据,以便我可以基于它创建一个示例。

标签: flutter api


【解决方案1】:

据我了解,selectedMedium 存在问题

尝试更改 Make it selectedMedium null inside onMediumChange

 void onMediumChange(standard) {
setState(() {
  selectedMedium = null;
  selectedStandard = standard;
  _mediums = [];
});
String mediumUrl =
    "$baseUrl/medium/get_by_course_id?standard_id=${selectedStandard?.standardId}";
ApiManager().getMediums(mediumUrl).then((List<Medium> value) => {
      setState(() {
        _mediums = value;
      })
    });

}

【讨论】:

  • 声明我可以通过编辑问题放置的变量请检查。
  • 我没听懂你在说什么。根据您所说的假设,您可以将 onMediumChange(standard) 中的第一个 setState 编辑为 _mediums.clear()
  • 现在检查上面的解决方案,同时检查onMediumChange方法中是否设置了新值
【解决方案2】:

首先,检查 _mediums 中的值,因为根据此错误,您必须在此处具有不同的 selectedMedium 值!!!

【讨论】:

  • 你能举个例子或者写代码吗?
  • @DhavalChaudhari 该错误表示您将 null 传递给 DropdownMenuItem。这意味着当您在第一个下拉列表中更改项目时,您正在通过 _mediums = [] 为第二个下拉列表设置空列表。这导致错误。你可以通过传递 _mediums = [""] 试试看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 2014-11-16
  • 2021-08-19
  • 2018-01-17
相关资源
最近更新 更多