Flutter运行报错OverflowBar's children存在null值如何解决?
错误原因
你遇到的OverflowBar's children must not contain any null values, but a null value was found at index 1报错,核心问题出在AlertDialog的actions数组配置上:
AlertDialog内部使用OverflowBar组件渲染操作按钮列表,该组件要求所有子元素必须为非空的Widget类型- 你的代码中使用三目运算符判断
c != null时渲染「删除」按钮,否则返回null,这个null会被直接添加到actions数组中,因此触发空值校验报错。
修复方案
推荐使用Dart自带的集合条件插入语法(collection if)实现按需添加按钮,条件不满足时不会向数组插入任何元素,从根源避免空值出现。同时注意FlatButton已在新版Flutter中废弃,推荐替换为TextButton,修改后的代码如下:
final rep = await showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: const Text("Entrez votre constat : "), content: TextField( keyboardType: TextInputType.multiline, maxLines: 5, controller: _constate, ), actions: <Widget>[ TextButton( child: const Text("Enregistrer"), onPressed: () { Navigator.pop(context, _constate.text); }, ), // 条件满足时才插入删除按钮 if (c != null) TextButton( child: const Text("Supprimer"), onPressed: () { _deleteConstat(c, q); Navigator.pop(context, null); }, ), TextButton( child: const Text("Anuller"), onPressed: () { Navigator.pop(context, null); }, ), ], elevation: 23, ); });
如果你的项目使用的Dart版本低于2.3,不支持集合条件语法,可以使用备用方案:将三目运算符的null返回值替换为const SizedBox.shrink(),这是一个无尺寸的空组件,不会影响界面显示,也不会触发空值校验,对应代码修改为:
c!=null?FlatButton( child: Text("Supprimer"), onPressed: () { _deleteConstat(c, q); Navigator.pop(context, null); }, ):const SizedBox.shrink(),
内容的提问来源于stack exchange,提问作者Youssef Bouazati
相关产品推荐
相关产品推荐

