You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter DropdownButton断言错误求助:复制代码运行异常怎么解决

Flutter动态下拉框_AssertionError错误解决方法

错误原因

该断言错误的核心是:DropdownButton的value值未匹配到items列表中的任意一项,或者存在多个相同value的选项。你的代码里存在三个问题:

  1. 第一个下拉框初始值dropdownValue1 = 'Dropdown 1',但它的选项列表dropdownItems1是['Item 1', 'Item 2', 'Item 3'],无对应选项
  2. 第二个下拉框初始值dropdownValue2 = 'Dropdown 2',同样不在初始选项列表dropdownItems2中
  3. 切换第一个下拉框选项时,第二个下拉框的选中值未同步更新,可能导致旧value不在新的选项列表里

解决步骤

  1. 将每个下拉框的初始value设置为对应items列表的第一项
  2. 切换第一个下拉框选项时,同步把第二个下拉框的选中值更新为新选项列表的第一项

修正后的完整代码

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: DynamicDropdown(),
    );
  }
}

class DynamicDropdown extends StatefulWidget {
  @override
  _DynamicDropdownState createState() => _DynamicDropdownState();
}

class _DynamicDropdownState extends State<DynamicDropdown> {
  // 初始值设为对应列表的第一项
  String dropdownValue1 = 'Item 1';
  String dropdownValue2 = 'Item A';
  List<String> dropdownItems1 = ['Item 1', 'Item 2', 'Item 3'];
  List<String> dropdownItems2 = ['Item A', 'Item B', 'Item C'];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Dynamic Dropdown'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            DropdownButtonFormField(
              value: dropdownValue1,
              onChanged: (newValue) {
                setState(() {
                  dropdownValue1 = newValue!;
                  if (dropdownValue1 == 'Item 1') {
                    dropdownItems2 = ['Item A', 'Item B', 'Item C'];
                    // 同步更新第二个下拉框的选中值
                    dropdownValue2 = dropdownItems2.first;
                  } else if (dropdownValue1 == 'Item 2') {
                    dropdownItems2 = ['Item D', 'Item E', 'Item F'];
                    dropdownValue2 = dropdownItems2.first;
                  } else {
                    dropdownItems2 = ['Item G', 'Item H', 'Item I'];
                    dropdownValue2 = dropdownItems2.first;
                  }
                });
              },
              items: dropdownItems1.map((String value) {
                return DropdownMenuItem<String>(
                  value: value,
                  child: Text(value),
                );
              }).toList(),
            ),
            const SizedBox(height: 20),
            DropdownButton<String>(
              value: dropdownValue2,
              onChanged: (newValue) {
                setState(() {
                  dropdownValue2 = newValue!;
                });
              },
              items: dropdownItems2.map((String value) {
                return DropdownMenuItem<String>(
                  value: value,
                  child: Text(value),
                );
              }).toList(),
            ),
          ],
        ),
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者Meikisihka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:32:05