'_Type'不是'Widget'类型问题的子类型

时间:2019-03-01 11:32:08

标签: flutter widget

在NoContentPage中,我将红屏显示为'_Type'不是'Widget'类型的子类型,我写下了完整的组件代码并将其放置到StatefulWidget中。这段代码有什么问题。我认为这是扑朔迷离中非常普遍的例外。

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,
                                ),
                              ]));
                        }),
          )

5 个答案:

答案 0 :(得分:2)

您的错误是您返回的是类型,而不是给定类型的实例:

return Foo;

vs

return Foo();

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用以下代码时,我遇到了一个非常类似的错误信息“”问题:


    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],
    );

我认为也许在制作地图时,地图功能的结果类型已更改,因此列表声明的内部dart实现失败。强制强制转换类型起作用。

答案 3 :(得分:0)

NoContentPage应该是小部件的Instance

所以而不是

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

应该是

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

为便于理解,示例:

错误:

return Foo;

右:

return Foo();

答案 4 :(得分:-1)

你应该用=>()这个符号调用一个函数 喜欢

//calling a function
main(){
    myFunction();
    widgetFunction();
}

//a function in a class or anywhere in dart file
myFunction(){
    print("hello function);
}

//a widget function
Widget widgetFunction(){
    Container();
}