我如何将QuerySnapshot数据从一个小部件传递到另一种小部件中?

时间:2020-05-05 18:18:52

标签: firebase flutter firebase-realtime-database dart

我想将querysnapshot数据从一个窗口小部件传递到另一个窗口小部件。我正在从Firebase获取数据,并且希望在小部件之间传递数据。如何将数据从一个屏幕传递到另一屏幕?

这是我的代码的样子:

class Dashboard extends StatefulWidget {
  @override
  _DashboardState createState() => _DashboardState();
}
class _DashboardState extends State<Dashboard> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
        stream: Firestore.instance.collection('schedules').snapshots(),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            snapshotData  = snapshot.data;
            return Container(
                child: Column(
              children: <Widget>[
                Expanded(
                    child: ListView.builder(
                        itemCount: snapshot.data.documents.length,
                        itemBuilder: (context, index) {
                          if (snapshot.data.documents[index]['uid']
                              .contains(userData.uid)) {
                            return GestureDetector(
                              onTap: () {
                                Route route = MaterialPageRoute(
                                    builder: (context) => ViewSchedule(//here i want pass));
                                Navigator.push(context, route);
                              },
                              child: Container(
                                height: 180,
                                width: double.infinity,                            
                              ),
                            );
                          } else {
                            return Container();
                          }
                        })),
              ],
            ));
          } else {
            return Column();
          }
        });
  }
}

1 个答案:

答案 0 :(得分:1)

在ViewSchedule类中,添加一个构造函数

final QuerySnapshot querySnapshot;

ViewSchedule({@required this.querySnapshot})

然后在MaterialPageRoute中添加以下更改

MaterialPageRoute(
    builder: (context) => ViewSchedule(querySnapshot:snapshot.data));// pass querySnapshot here

现在,如果您的ViewSchedule小部件是无状态的,则可以直接在小部件中使用this.querySnapshot访问它,并使用

打印
print("Printing querysnapshot: ${this.querySnapshot}");

如果它是有状态的小部件,则可以在有状态的小部件中使用widget.querySnapshot访问它。

print("Printing querysnapshot: ${widget.querySnapshot}");