与无状态类相比,我注意到在调用有状态类时有所不同。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Material App Title',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: "Title"
),
body: ListView(
children: [
Container(
height: 300.0,
child: ItemListState()._buildItemsList(),
)
],
)),
);
}
}
在上面的示例中,如果类是有状态的(ItemListState()
),我需要调用ItemListState().buildItemsList()
(该方法返回我构建的ListView。)
如果该类是无状态的,我可以调用ItemListState()
(build方法返回相同的ListView)
为什么可以使用从无状态类的构建中返回的内容,而不使用有状态的类?我怀疑是因为该框架无法确定何时调用build或类似的东西。
尝试使用有状态类的构建函数返回我的listView The argument type 'ItemListState' can't be assigned to the parameter type 'Widget'
答案 0 :(得分:2)
调用Stateful
或Stateless
小部件时没有区别,两个类都具有build
方法,因此在两种情况下都必须使用有状态或无状态的构造函数,而不是构造函数State
类中的一个。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Material App Title',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: "Title"
),
body: ListView(
children: [
Container(
height: 300.0,
child: ItemList(),
)
],
)),
);
}
}
如果您使用的是Stateful
class ItemList extends StatefulWidget {
@override
ItemListState createState() => ItemListState();
}
class ItemListState extends State<ItemList> {
_buildItemsList(){
return Container();
}
@override
Widget build(BuildContext context) {
return _buildItemsList();
}
}
如果您使用的是Stateless
class ItemList extends StatelessWidget {
_buildItemsList(){
return Container();
}
@override
Widget build(BuildContext context) {
return _buildItemsList();
}
}