问题描述
我尝试从第二页中的 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