gpt4 book ai didi

firebase - 如何从Firestore一次获取数据并在导航到其他屏幕后仍可重复使用?

转载 作者:行者123 更新时间:2023-12-03 03:36:09 25 4
gpt4 key购买 nike

我想从Firestore提取数据,并使用该数据在首页上的ListView在Flutter中构建卡。使用导航菜单在屏幕之间切换时,我打算重用一次在 session 中获取的数据,而不是每次返回首页时都从数据库获取数据。但是,这没有发生。每次我转到主页时,都会从数据库中获取数据。

        FutureBuilder(
future: databaseService(),
builder: (context, snapshot) {
if (snapshot.hasData) {
stringMap = snapshot.data;
}
return ListView.builder(
itemBuilder: (context, index) {
stringMap.forEach((index, value) => {
print("The stringMap is ${stringMap.keys.toList()}"),
});
return HomepageCards(
user: widget.user,
cardDetails: stringMap[stringMap.keys.toList()[index]],
);
},
itemCount: stringMap.length,
scrollDirection: Axis.vertical,
controller: _controller,
shrinkWrap: true,
);
},
)


databaseService() async {
return DatabaseService().streamHomePage(widget.user);
}

DatabaseService.dart
class DatabaseService {
final Firestore _db = Firestore.instance;
HomePage home = new HomePage();
Map homePageMap = new Map<String, Map<String, dynamic>>();

/// Query a subcollection
Future streamHomePage(FirebaseUser user) async {
// Initialise the model map
home.homeModel = <String, dynamic>{};
home.homeModel['driverDetails'] = new Map();

var ref = _db
.collection('homepage')
.document(user.uid)
.collection('h')
.document('28032020');
// TODO: Try to use cached data. Also try to find the pattern for switching between server and cache
await ref.get(source: Source.serverAndCache).then((ref) => {
ref.data.forEach((index, value) => {
home.homeModel = value,
homePageMap[index] = value,
}),
});
return homePageMap;
}
}

任何使数据一旦获取就可重用的线索将受到高度赞赏。

最佳答案

由于您只想获取一次,然后再从 session 中获取它,因此您只需检查 session 中是否包含数据即可。另一种方法是使用 shared_preferences ,例如:

  SharedPreferences prefs = await SharedPreferences.getInstance();

databaseService() async {
await prefs.setBool('retrieved', true);
return DatabaseService().streamHomePage(widget.user);
}

然后在执行 FutureBuilder之前,使用 getBool()检查是否检索到的值等于true,并从 session 中检索数据

关于firebase - 如何从Firestore一次获取数据并在导航到其他屏幕后仍可重复使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61045891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com