Firebase 如何以列表的形式显示CloudFireStore中的数据,并将其传递到Flatter中的另一个文件
我想从CloudFireStore中获取数据,并将其发送到另一个文件中 我正在使用streambuilder进行数据检索,但中的列表未全局初始化Firebase 如何以列表的形式显示CloudFireStore中的数据,并将其传递到Flatter中的另一个文件,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我想从CloudFireStore中获取数据,并将其发送到另一个文件中 我正在使用streambuilder进行数据检索,但中的列表未全局初始化 class _DataState extends State<Data> { @override Widget build(BuildContext context) { return StreamBuilder( stream: Firestore.instance.collection('notific
class _DataState extends State<Data> {
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: Firestore.instance.collection('notification').snapshots(),
builder: (context, snapshot) {
if(!snapshot.hasData){
return new Container(
margin: const EdgeInsets.only(top: 25.0),
child: new Center(
child: new Text(
"loading Data Please wait...",
style: new TextStyle(
color: Colors.white
),
),
),
);
}
return ListView.builder(
shrinkWrap: true,
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) {
DocumentSnapshot ds = snapshot.data.documents[index];
List<Book> books = [
Book(ds['school_name'], ds['school_name'],'Rp 50.000', 'res/corel.jpg', 3.5, 123),
];
}
);
},
);
}
}
class\u数据状态扩展状态{
@凌驾
小部件构建(构建上下文){
返回流生成器(
流:Firestore.instance.collection('notification').snapshots(),
生成器:(上下文,快照){
如果(!snapshot.hasData){
退回新货柜(
边距:仅限常量边集(顶部:25.0),
孩子:新中心(
儿童:新文本(
“正在加载数据,请稍候…”,
样式:新文本样式(
颜色:颜色。白色
),
),
),
);
}
返回ListView.builder(
收缩膜:对,
itemCount:snapshot.data.documents.length,
itemBuilder:(构建上下文,int索引){
DocumentSnapshot ds=snapshot.data.documents[索引];
书目=[
书籍(ds['school_name',ds['school_name','Rp 50.000','res/corel.jpg',3.5123),
];
}
);
},
);
}
}
我想要接收数据的文件是
final grid = CustomScrollView(
primary: false,
slivers: <Widget>[
SliverPadding(
padding: EdgeInsets.all(16.0),
sliver: SliverGrid.count(
childAspectRatio: 2 / 3,
crossAxisCount: 3,
mainAxisSpacing: 20.0,
crossAxisSpacing: 20.0,
children: books.map((book) => createTile(book)).toList(),
),
)
],
);
final grid=CustomScrollView(
主要:错误,
条子:[
填缝料(
填充:所有边缘设置(16.0),
sliver:SliverGrid.count(
儿童比例:2/3,
交叉轴计数:3,
主轴间距:20.0,
交叉轴间距:20.0,
子项:books.map((book)=>createTile(book)).toList(),
),
)
],
);
问题是如何在另一个文件中使用books数组,因为它是局部变量。有没有其他方法可以这样做。我发现了一个类似的方法,您可以使用navigator将数据或对象传递给另一个类
在您的情况下,您可以像这样使用导航器:
class _DataState extends State<Data> {
........
List<Book> books = [
Book(ds['school_name'], ds['school_name'],'Rp 50.000', 'res/corel.jpg', 3.5, 123),];
// Navigate to second screen with data
Navigator.push(context, new MaterialPageRoute(builder: (context) => new
SecondScreenWithData(book: books)));
...
}
class\u数据状态扩展状态{
........
书目=[
书籍(ds['school_name',ds['school_name','Rp 50.000','res/corel.jpg',3.5123),];
//导航到包含数据的第二个屏幕
Navigator.push(上下文,newmaterialpageroute(builder:(上下文)=>new
第二屏带数据(书:书));
...
}
二等
class SecondScreenWithData extends StatelessWidget {
// Declare a field that holds the Books data
final List<book> book;
......
// In the constructor, require a Book
SecondScreenWithData({Key key, @required this.book}) : super(key: key);
......
// To display your books
children: <Widget>[
// Display passed data from first screen, you can run a for if you have more than a book
new Text("Book Data \nschool name: ${book[0][0]} \nprice: ${book[0][2]}")]
......
}
class SecondScreenWithData扩展无状态小部件{
//声明保存图书数据的字段
最终清单册;
......
//在构造函数中,需要一本书
SecondScreenWithData({Key-Key,@required this.book}):super(Key:Key);
......
//展示你的书
儿童:[
//显示从第一个屏幕传递的数据,如果您有多本书,则可以运行for
新文本(“书籍数据\n学校名称:${Book[0][0]}\n价格:${Book[0][2]}”)]
......
}
您可以找到一个教程,它可以帮助您传递和共享数据