snapshot.data returns 在 streambuilder 中为空,但在我 return 具有快照数据的数据模型之前显示正确的值
snapshot.data returns null in streambuilder but shows correct value just before I return data model with snapshot data
这是我的流生成器的代码。
StreamBuilder<RatesData>(
stream: DatabaseRatesService(fid: fid).ratesData,
builder: (context, snapshot) {
if (!snapshot.hasData) // Doesn't get off from this condition and keeps loading.
return LoadingLogin(); // A simple loading widget
RatesData ratesData = snapshot.data;
print(ratesData.fid);
return Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
height: 50,
child: Text(
ratesData.fid,
style: TextStyle(color: Colors.black),
),
),
],
);
}
)
这是 class 我有所有数据库查询的地方。我似乎已成功从 firebase 获取数据,但它没有显示在我的流生成器中。我怀疑数据没有被注入到我创建的数据模型中,但不知道如何注入。
class DatabaseRatesService{
final String fid;
DatabaseRatesService({this.fid});
DocumentReference get(){
return Firestore.instance.collection('rates').document(fid);}
RatesData _ratesDataFromSnapshot(DocumentSnapshot snapshot){
print(snapshot.data); // I put this here for testing purposes / it returns correct data here
return RatesData(
firstHourWeekday: snapshot.data['FirstHourWeekday'],
firstHourWeekend: snapshot.data['FirstHourWeekend'],
fid: fid,
ratesWeekday: snapshot.data['RatesWeekday'],
ratesWeekend: snapshot.data['RatesWeekend'],
);
}
Stream<RatesData> get ratesData {
DocumentReference ratesDocument = get();
return ratesDocument.snapshots()
.map(
_ratesDataFromSnapshot
);
}
}
更新:它没有返回 null。我尝试获取错误消息。消息说“'类型 'List' 不是类型 'List' 的子类型”。
存在格式问题,您缺少 if 语句周围的 {} 大括号
试试下面
if (!snapshot.hasData) // 不会脱离此条件并继续加载。
{return LoadingLogin();}
根据您的 ,您需要编辑方法 _ratesDataFromSnapshot 以处理非原始数据类型和空值(如果返回的数据不有您要阅读的字段)
snapshot.data['field'].cast<String>().toList() ?? List() // handle the null case as well with empty list
这是我的流生成器的代码。
StreamBuilder<RatesData>(
stream: DatabaseRatesService(fid: fid).ratesData,
builder: (context, snapshot) {
if (!snapshot.hasData) // Doesn't get off from this condition and keeps loading.
return LoadingLogin(); // A simple loading widget
RatesData ratesData = snapshot.data;
print(ratesData.fid);
return Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
height: 50,
child: Text(
ratesData.fid,
style: TextStyle(color: Colors.black),
),
),
],
);
}
)
这是 class 我有所有数据库查询的地方。我似乎已成功从 firebase 获取数据,但它没有显示在我的流生成器中。我怀疑数据没有被注入到我创建的数据模型中,但不知道如何注入。
class DatabaseRatesService{
final String fid;
DatabaseRatesService({this.fid});
DocumentReference get(){
return Firestore.instance.collection('rates').document(fid);}
RatesData _ratesDataFromSnapshot(DocumentSnapshot snapshot){
print(snapshot.data); // I put this here for testing purposes / it returns correct data here
return RatesData(
firstHourWeekday: snapshot.data['FirstHourWeekday'],
firstHourWeekend: snapshot.data['FirstHourWeekend'],
fid: fid,
ratesWeekday: snapshot.data['RatesWeekday'],
ratesWeekend: snapshot.data['RatesWeekend'],
);
}
Stream<RatesData> get ratesData {
DocumentReference ratesDocument = get();
return ratesDocument.snapshots()
.map(
_ratesDataFromSnapshot
);
}
}
更新:它没有返回 null。我尝试获取错误消息。消息说“'类型 'List' 不是类型 'List' 的子类型”。
存在格式问题,您缺少 if 语句周围的 {} 大括号 试试下面
if (!snapshot.hasData) // 不会脱离此条件并继续加载。 {return LoadingLogin();}
根据您的
snapshot.data['field'].cast<String>().toList() ?? List() // handle the null case as well with empty list