无法从第二页中的 Firestore 检索数据

问题描述

我尝试从第二页中的 firebase 检索数据,但是当我导航到第二页时出现以下错误

getter 'docs' 被调用为 null。

但在第一页显示数据

代码如下:

第一页.dart

StreamBuilder<QuerySnapshot>(
        stream: _firebaseStore.collection("data").limit(5).snapshots();,builder: (context,snapshot) {
          if(snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator(strokeWidth: 3,),);
          } else {
            return ListView(
              shrinkWrap: true,physics: NeverScrollableScrollPhysics(),children: snapshot.data.docs.map((doc) =>
                  ListTile(...)
              ).toList(),);
          }
        }
    )

我使用自定义导航传递 firebase 查询,然后使用构造函数在第二页中接收它

Navigation.intentWithData(ListWisataScreen.routeName,_firebaseStore.collection("data").snapshots()),

secondpage.dart

class ListScreen extends StatefulWidget {
  static const routeName = "/list_all_data";

  final Stream querySnapshot;

  const ListScreen({Key key,this.querySnapshot}) : super(key: key);


  @override
  _ListScreenState createState() => _ListScreenState();
}

class _ListScreenState extends State<ListScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: SafeArea(
          child: Padding(
            padding: const EdgeInsets.only(top: 20,left: 15,right: 15),child: Column(
              children: [
                Row(
                  children: <Widget>[
                    IconButton(
                      icon: Icon(Icons.arrow_back_sharp),onpressed: () => Navigator.pop(context)
                    )
                  ],StreamBuilder<QuerySnapshot>(
                    stream: widget.querySnapshot,snapshot) {
                      if(snapshot.connectionState == ConnectionState.waiting) {
                        return Center(child: CircularProgressIndicator(strokeWidth: 3,);
                      } else {
                        return ListView(
                          shrinkWrap: true,children: snapshot.data.docs.map((doc) =>
                              ListTile(
                                contentPadding: EdgeInsets.symmetric(vertical: 4,horizontal: 0),leading: Container(
                                  height: MediaQuery.of(context).size.height * 0.2,width: MediaQuery.of(context).size.width * 0.2,child: ClipRRect(
                                      borderRadius: BorderRadius.all(Radius.circular(7)),child: Image.network(doc["image"],fit: BoxFit.fill)),title: Text(doc["name"],style: Theme.of(context).textTheme.bodyText1.copyWith(fontWeight: FontWeight.bold),subtitle: Row(
                                  children: [
                                    Icon(Icons.location_on,size: 15,color: pressableColor,SizedBox(width: 5,Text(doc["location"],style: Theme.of(context).textTheme.caption.copyWith(fontSize: 14),],)
                          ).toList(),);
                      }
                    }
                ),)
      ),);
  }
}

解决方法

尝试遵循以下代码。

Navigator.push(
      context,MaterialPageRoute(
         builder: (context) => Home('some text')),);

并使用构造函数从第二页接收它。

class DetailsInfo1 extends StatefulWidget {
  DetailsInfo1(this.text);
  String text;

 @override
 State<StatefulWidget> createState() => _DetailsInfo1State();
}

检查这个link