![](/img/trans.png)
[英]Flutter NoSuchMethodError was thrown building FutureBuilder<DocumentSnapshot>
[英]FutureBuilder is not building asynchronous in Flutter
我有這個 FutureBuilder,未來會從 firestore 請求布爾值。 但是當我更新值時(hasAccountSetup 變為 true),在我快速重新加載應用程序之前什么都不會發生。
我不知道在這種情況下我是否不應該使用 FutureBuilder,但我的目標是讓應用程序在我將 firebase 數據庫中的 hasAccountSetup 更新為 true 后立即返回 HomePage()。
Future<bool> _getCurrentUserData() async {
final DocumentSnapshot userDoc = await FirebaseFirestore.instance
.collection('Users')
.doc(Auth().currentUser!.uid)
.get();
return userDoc.get('HasSetupAccount');
}
class _WidgetTreeState extends State<WidgetTree> {
@override
//construtor da class?
Widget build(BuildContext context) {
return StreamBuilder(
stream: Auth().authStateChanges,
builder: (context, snapshot) {
if (snapshot.hasData) {
return FutureBuilder(
future: _getCurrentUserData(),
builder: ((context, AsyncSnapshot<bool> hasAccountSetup) {
if (hasAccountSetup.data == true) {
return MyHomePage();
} else {
return AccountSetup();
}
}));
} else {
return LoginPage();
}
},
);
}
您正在使用StreamBuilder
但 stream 不是stream
它是future
。
看看這個streamBuilder
的例子:如果文檔中發生任何變化,您可以在這里直接監聽而無需reload
。 根據您的要求進行調整。
class _UserInformationState extends State<UserInformation> {
final _usersStream = FirebaseFirestore.instance
.collection('Users') // 👈 Change the collection name according to your need
.doc(Auth().currentUser!.uid) // 👈 change the document id according to your need
.snapshots();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: StreamBuilder<DocumentSnapshot<Map<String, dynamic>>>(
stream: _usersStream,
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return const Text('Something went wrong');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return const Text("Loading");
}
Map<String, dynamic> data =
snapshot.data!.data()! as Map<String, dynamic>;
return Text(data['fullName']);
},
),
),
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.