我有一个空列表,其中在选择项目时会在其中添加项目。但是我无法访问类型为Set
的其他文件中的列表,以避免重复。此外,列表具有两种类型的项目:图像和文本(在children
的{{1}}内部)。该列表位于另一个文件中,除此列表外,所有内容都可以访问。我不知道为什么会这样,有人可以帮忙吗?
我的代码:
Row
我要访问它的部分:
final Set saved = Set(); //This thing is not getting accessed
class FavoriteList extends StatefulWidget {
@override
_FavoriteListState createState() => _FavoriteListState();
}
class _FavoriteListState extends State<FavoriteList> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Add to Favorites!'),
centerTitle: true,
backgroundColor: Colors.red),
// backgroundColor: Colors.indigo,
body: SafeArea(
child: ListView.builder(
itemCount: 53,
itemBuilder: (context, index) {
return CheckboxListTile(
activeColor: Colors.red,
checkColor: Colors.white,
// value: _saved.contains(context), // changed
value: saved.contains(index),
onChanged: (val) {
setState(() {
// isChecked = val; // changed
// if(val == true){ // changed
// _saved.add(context); // changed
// } else{ // changed
// _saved.remove(context); // changed
// } // changed
if (val == true) {
saved.add(index);
} else {
saved.remove(index);
}
});
},
title: Row(
children: <Widget>[
Image.asset('lib/images/${images[index]}'),
SizedBox(
width: 10,
),
Text(nameOfSite[index]),
],
),
);
},
),
),
floatingActionButton: FloatingActionButton(
foregroundColor: Colors.red,
child: Icon(Icons.check),
onPressed: () {
Navigator.pop<Set>(context, saved);
},
),
);
}
}
答案 0 :(得分:0)
我认为从Set
小部件访问FavoriteList
并不是问题。
您已经创建了一种从下面的saved
获取FavoriteList
集的最新值的方法:
floatingActionButton: FloatingActionButton(
foregroundColor: Colors.red,
child: Icon(Icons.check),
onPressed: () {
Navigator.pop<Set>(context, saved);
},
)
因此,通过这种方式,您将在saved
小部件时获得FavoriteList
的最新值
弹出。
您可以使用以下方法捕获新值,在SecondPage
的代码中进行更改,
来自:
FloatingActionButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return FavoriteList();
},
),
);
},
child: Icon(Icons.add),
foregroundColor: Colors.blue,
),
收件人:
FloatingActionButton(
onPressed: () async {
Set newSet = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return FavoriteList();
},
),
);
print('newSet: $newSet');
},
child: Icon(Icons.add),
foregroundColor: Colors.blue,
),
newSet
值是FavoriteList
小部件的最新值。
可以用来更新SecondPage
中的UI。只需在SecondPage State
列表收藏夹= List();`中创建一个列表即可。使用此列表可以随意填充用户界面。
现在,当您抓到saved
中的FloatingActionButton
时,请执行以下操作:
setState((){
favoriteList = newSet.toList();
});
注意: 但是,我建议您,如果要提供对多个小部件中某些内容的访问,请确保将所有小部件顶部的小部件中的访问值保持在所有小部件之上。
如果您需要更多帮助,请在评论中告诉我。