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

Flutter空安全报错:'() => Null'非'orElse'所需'(() => Map<String, dynamic>)?'子类型如何解决

Flutter空安全报错解决方案

报错信息

type '() => Null' is not a subtype of type '(() => Map<String, dynamic>)?' of 'orElse'
含义:类型() => Null不是参数orElse所预期的(() => Map<String, dynamic>?类型的子类型

问题原因

报错是由于你使用的MultiSelectFormField第三方组件内部空安全类型适配不到位,或者你传入的dataSource存在空值风险,触发组件内部orElse逻辑时,返回的空函数不符合类型要求导致的。

解决方法

    1. 优先优化dataSource的传值逻辑,不要直接用!强制解包,提前做判空处理,保证传入的数组永远不为空,避免触发组件的orElse逻辑:
// 把原来的dataSource替换为这段代码即可
dataSource: snapshot.data?.listactiviticheckpoints?.map((value){
  return {'display': '$value','value': value};
}).toList() ?? [],
    1. 如果修改数据源后仍报错,需要修改MultiSelectFormField组件内部的代码,找到调用orElse的位置,把原来返回null的函数:
orElse: () => null

修改为返回空Map的函数即可:

orElse: () => <String, dynamic>{}
    1. 你也可以直接升级适配了空安全版本的MultiSelectFormField组件,官方新版本已经修复了这个类型不兼容问题。

修改后的完整代码示例

FutureBuilder<ActivityCheckPoints>(
  future: apiGetCheckPointsName(),
  builder: (context, snapshot) {
    if(snapshot.hasData)
    return Container(
      child: 
        MultiSelectFormField(
        chipBackGroundColor: Colors.blue,
        chipLabelStyle: TextStyle(fontWeight: FontWeight.bold),
        dialogTextStyle: TextStyle(fontWeight: FontWeight.bold),
        checkBoxActiveColor: Colors.blue,
        checkBoxCheckColor: Colors.white,
        dialogShapeBorder: RoundedRectangleBorder(
        borderRadius: BorderRadius.all(Radius.circular(12.0))),
        title: Text(_actpoints,
              style: TextStyle(fontSize: 16),
        ),
        // 只修改了这一行的dataSource逻辑
        dataSource: snapshot.data?.listactiviticheckpoints?.map((value){
              return {'display': '$value','value': value};
        }).toList() ?? [],
        textField: 'display',
        valueField: 'value',
        okButtonLabel: 'OK',
        cancelButtonLabel: 'CANCEL',
        hintWidget: Text(_actpointsdisplay,
        ),
       initialValue: _listActivityPointNames,
        onSaved: (value)  {
        if (value == null) return;
        setState(() { 
        _listActivityPointNames = value;
        });
  },
),
);
return Container();
  }
),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:54:02