我正在开发一个书本应用程序,我需要显示每个用户的收藏夹列表,我可以将所有收藏夹保存在Firestore中的数组中,但是我不知道如何将它们收藏到我的网格中。我使用StreamBuilder来检索所有书籍,但现在我不知道是否需要存储它们以显示它们以及如何显示。我试图将所有收藏夹ID检索到字符串列表,然后将它们加载到GridView中,但列表为空。
这是我的Firestore的方式:
class _FavoriteScreenState extends State<FavoriteScreen> {
UserModel model = UserModel();
FirebaseUser firebaseUser;
FirebaseAuth _auth = FirebaseAuth.instance;
List<String> favorites;
Future<List<String>> getFavorites() async{
firebaseUser = await _auth.currentUser();
DocumentSnapshot querySnapshot = await Firestore.instance.collection("users")
.document(firebaseUser.uid).get();
if(querySnapshot.exists && querySnapshot.data.containsKey("favorites") &&
querySnapshot.data["favorites"] is List){
return List<String>.from(querySnapshot.data["favorites"]);
}
return [];
}
@override
Widget build(BuildContext context) {
Widget _buildGridItem(context, index){
return Column(
children: <Widget>[
Material(
elevation: 7.0,
shadowColor: Colors.blueAccent.shade700,
child: InkWell(
onTap: (){
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => DetailScreen(document)
));
},
child: Hero(
tag: index['title'],
child: Image.network(
index["cover"],
fit: BoxFit.fill,
height: 132,
width: 100,
),
),
),
),
Container(
width: 100,
margin: EdgeInsets.only(top: 10, bottom: 5),
child: Text(index["title"],
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis,
maxLines: 2,
style: TextStyle(
fontSize: 10,
fontWeight: FontWeight.w900,
),
),
),
],
);
}
return Scaffold(
body: favorites != null ? Stack(
children: <Widget>[
GridView.builder(
padding: EdgeInsets.fromLTRB(16, 16, 16, 16),
primary: false,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height),
//crossAxisSpacing: 3,
//mainAxisSpacing: 3
),
itemBuilder: (context, index){
return _buildGridItem(context, favorites[index]);
},
)
],
)
:
Center(child: CircularProgressIndicator())
);
}
@override
void initState() async {
// TODO: implement initState
super.initState();
favorites = await getFavorites();
}
}
答案 0 :(得分:0)
我不得不更换我的壁炉。
我创建了一个名为“ books”的新集合,其文档为“ userIDs”,并创建了包含书籍及其信息的子集合。
现在我可以轻松检索喜欢的书了。