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

Flutter使用connectivity_wrapper报List<Widget?>非List<Widget>子类型错误如何解决

Flutter connectivity_wrapper: ^1.0.6 类型转换报错解决方案

List<Widget?> 和 List 的区别

  • List<Widget>:属于非空泛型列表,Dart空安全规则要求列表内所有元素必须为非空的Widget实例,不允许出现null值。
  • List<Widget?>:属于可空泛型列表,列表内的元素既可以是Widget实例,也可以为null值。
    两种类型在Dart类型体系中是完全独立的类型,没有继承关系,无法直接互相强转,强转就会触发类型不匹配报错。

报错根因

该报错是connectivity_wrapper: ^1.0.6版本自身的空安全兼容缺陷导致,库内部遍历子组件树的逻辑存在问题,会误将非空的Widget列表判定为可空的List<Widget?>类型,强制转换为非空List时触发类型校验失败。

修复方案

方案1:强制指定列表类型(最快生效)

在ListView的children属性末尾添加.cast<Widget>(),明确告知Dart该列表为非空Widget列表,修改后的代码如下:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: appBarCustom(
      onBackTap: onBackTab,
      color: Colors.black,
      title: Strings.appName,
      textStyle: TextStyles.appBarBold,
      actions: [
        C0(),
      ],
    ),
    body: ConnectivityWidgetWrapper(
      child: ListView(
        children: <Widget>[
          ListTile(
            title: Text("EX1"),
            onTap: () {

            },
          ),
          Divider(),
          ListTile(
            title: Text("EX@"),
            onTap: () {

            },
          ),
          Divider(),
        ].cast<Widget>(),
      ),
    ),
  );
}

方案2:升级依赖版本(根治问题)

升级connectivity_wrapper到更高的稳定版本,后续版本已经修复了该空安全类型转换的bug,直接修改pubspec.yaml中的依赖版本即可。

方案3:外层包裹容器绕开遍历逻辑

将ListView外层套一个Container组件,绕开库内部对列表子组件的遍历逻辑,也可以解决报错:

body: ConnectivityWidgetWrapper(
  child: Container(
    child: ListView(
      // 原有children代码保持不变
    ),
  ),
),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:05