dart 如何从FutureBuilder访问返回数据?

rwqw0loc  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(60)

我从Firestore访问单个数据时遇到问题。由于从Firestore访问数据是一个未来,每当我试图从initState和setState调用它,它只是打印null,所以我决定使用FutureBuilder。那么现在,是否可以从FutureBuilder访问从page1.dartpage2.dart的另一个页面的返回数据?
page1.dart

class FetchSingleData extends StatelessWidget {
  // I want to access this one
  String? uniqueHandler;

  FetchSingleData({super.key, this.uniqueHandler});

  Future<QuerySnapshot> fetchUniqueHanlder() async {
    return await FirebaseFirestore.instance.collection('users').get().then((value) => uniqueHandler = value.docs.first['userUniqueHandle']);
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: fetchUniqueHanlder(),
        builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
           // I want to access this one
            return Text(uniqueHandler!);
          }
          return CircularProgressIndicator();
        });
  }
}

这是我的firebase firestore的片段/图像。

我只想从FutureBuilder(page1.dart)访问userUniqueHandler到MainScreen(page2.dart)

8yoxcaq7

8yoxcaq71#

snapshot本身包含以下数据:
试试这个:

Future<QuerySnapshot> fetchUniqueHanlder() async {
  return await FirebaseFirestore.instance.collection('users').get();
}

@override
Widget build(BuildContext context) {
  return FutureBuilder(
    future: fetchUniqueHanlder(),
    builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
      if (snapshot.connectionState != ConnectionState.done) {
        return CircularProgressIndicator();
      }
      if (snapshot.hasError || !snapshot.hasData) {
        return const Text("error");
      }

      final users = snapshot.data!;

      // your value
      uniqueHandler = users.docs.first['userUniqueHandle'];

      return Text(uniqueHandler!);
    },
  );
}

相关问题