【问题标题】:'_Type' is not a subtype of type 'Widget'“_Type”不是“Widget”类型的子类型
【发布时间】:2019-07-23 10:27:15
【问题描述】:

我把红屏'_Type' is not a subtype of type 'Widget' 异常在NoContentPage我写下了完整的组件代码并调用了StatefulWidget。这段代码有什么问题。我认为这是 Flutter 中非常常见的异常。

class NoContentPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return (new Container(
      width: 320.0,
      child: new Column(
        children: <Widget>[
          Center(
              child: Text(AppLocalizations.of(context).messageNoContent,
                  style: TextStyle(
                    color: Colors.black,
                    fontSize: 20.0,
                    fontWeight: FontWeight.w300,
                    letterSpacing: 0.3,
                  )))
        ],
      ),
    ));
  }
}

body: Container(
            child: videos == null
                ? Center(child: CircularProgressIndicator())
                : videos.length == 0
                    ? NoContentPage
                    : ListView.builder(
                        itemCount: videos.length,
                        itemBuilder: (context, index) {
                          return GestureDetector(
                              onTap: () {
                                playYoutubeVideo(videos[index][Video.videoUrl]);
                              },
                              child: Column(children: [
                                new YoutubeCard(
                                  video: videos[index],
                                ),
                                new Divider(
                                  height: 0.0,
                                  color: Colors.grey,
                                ),
                              ]));
                        }),
          )

【问题讨论】:

    标签: flutter widget


    【解决方案1】:

    NoContentPage 应该是一个小部件的Instance

    所以而不是

    videos.length == 0 ? NoContentPage : ListView.builder()
    

    应该是

    videos.length == 0 ? NoContentPage() : ListView.builder()
    

    为了便于理解示例:

    错误:

    return Foo;
    

    右:

    return Foo();
    

    【讨论】:

      【解决方案2】:

      在使用以下代码时,我遇到了与错误信息非常相似的问题:

      
          List<Widget> items = ['1', '2', '3', '4']
              .map(
                (f) {
                  return Text(f);
                },
              )
              .toList();
          items.last = Stack(
            children: <Widget>[items.last],
          );
      

      将此代码更改为以下作品:

      
          List<Widget> items = ['1', '2', '3', '4']
              .map(
                (f) {
                  return Text(f);
                },
              )
              .cast<Widget>()
              .toList();
          items.last = Stack(
            children: <Widget>[items.last],
          );
      

      我想也许在做地图时,地图函数的结果类型发生了变化,因此 list assert 的内部 dart 实现失败。强制转换类型起作用。

      【讨论】:

        【解决方案3】:

        此外,当您跨屏幕移动并使用网络数据显示在您的应用程序中,使用三元运算符作为数据和进度指示器时,此错误非常常见,那么指示器必须称为小部件LinearProgressIndicator() 而不是@ 987654322@.

        【讨论】:

          【解决方案4】:

          你的错误是你返回了类型而不是给定类型的实例:

          return Foo;
          

          return Foo();
          

          【讨论】:

          • 在您的具体情况下,这是NoContentPage 的问题。
          • 我和飞镖打了三个多小时??。谢谢你
          • 他们什么时候会发明一种错误信息是“你忘了括号”的语言
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-09
          • 1970-01-01
          • 2020-04-07
          • 2021-06-04
          相关资源
          最近更新 更多