在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,
),
]));
}),
)
答案 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();
}