我想创建一个 ItemsDrawer Stateful Widget,ListTile 应该改变 Item 屏幕的内容,但它没有改变。另外,如何使用 List.builder 创建 ListTile 列表?
创建方法 itemDrawer() 有效,但现在我想将对象传递到抽屉中。
Drawer itemDrawer(BuildContext context) {
return Drawer(
child: ListView(
children: <Widget>[
ListTile(
title: InkWell(
onTap: () {
setState(() {
item = items[0];
Navigator.of(context).pop();
});
},
child: Text(
'item1',
style: TextStyle(fontSize: 20),
),
),
),
ListTile(
title: InkWell(
onTap: () {
setState(() {
item= items[1];
});
Navigator.of(context).pop();
},
child: Text(
'item2',
style: TextStyle(fontSize: 20),
),
),
),
],
),
);
}
items 是类 Item 的列表。
List<Item> items= [
item1Data,
item2Data,
item3Data,
item4Data,
item5Data,
];
我想创建的不是方法 itemDrawer(context):
class ItemsDrawer extends StatefulWidget {
final Item item;
ItemsDrawer({Key key, this.item}) : super(key: key);
@override
_ItemsDrawer State createState() => _ItemsDrawerState();
}
class _ItemsDrawerState extends State<ItemsDrawer> {
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
children: <Widget>[
Container(
decoration: BoxDecoration(),
),
ListTile(
title: InkWell(
onTap: () {
setState(() {
widget.item= items[0];
Navigator.of(context).pop();
});
},
child: Text(
'item1',
style: TextStyle(fontSize: 20),
),
),
),
.....
在 widget.item 上说:'item' 不能用作设置器,因为它是最终的
更新:显示内容的 ItemScreen:
class ItemScreen extends StatefulWidget {
@override
_ItemScreen State createState() => _ItemScreenState();
}
class _ItemScreentate extends State<ItemScreen> {
Item item;
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState();
@override
void initState() {
super.initState();
item = items[0];
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
backgroundColor: kcAppBackground,
appBar: AppBar(
//App Bar Title
title: modifiedAppBarTitleText(item.itemTitle),
.....
drawer: ItemDrawer(key: _scaffoldKey, item: item,),