import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:provider/provider.dart';
import 'package:collection/collection.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
var _db = FirestoreService();
return MultiProvider(
providers: [
StreamProvider(create:(context)=>_db.getItems(),
catchError:(BuildContext context,e){
print("Error:$e");
return null;
},
updateShouldNotify:const ListEquality<Item>().equals),
],
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Catalog(),
),
);
}
}
class Item{
String name;
double price;
Item({this.name,this.price});
Item.fromJSON(Map<String,dynamic> json)
:name=json['name'],
price=json['price'];
factory Item.fromMap(Map data)
{
return Item(name: data['name'],price:data['price']);
}
}
class FirestoreService{
var _db = Firestore.instance;
Stream<List<Item>> getItems()
{
return _db.collection('akurdi')
.snapshots()
.map((snapshot)=>snapshot.documents
.map((document)=>Item.fromMap(document.data)).toList());
}
}
class Catalog extends StatelessWidget {
@override
Widget build(BuildContext context) {
var items = Provider.of<List<Item>>(context);
print(items.length);
return ListView.builder(
itemCount: items.length,
itemBuilder: (context,index){
return ListTile(
title: Text(items[index].name),
trailing: Text(items[index].price.toString())
);
},
);
}
}
Ошибки:
I / флаттер (12444): получатель 'длина' вызван на ноль.
I / флаттер (12444): Приемник: ноль
I / flutter (12444): пробный вызов: длина
Когда я отлаживаю код специально функцией getItems (), я вижу фактические значения из базы данных firestore, но когда я использую провайдера
var items = Provider.of> (context) для получения значений возвращает ноль.