【发布时间】:2020-05-08 06:23:22
【问题描述】:
这是我的流生成器的代码。
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),
),
),
],
);
}
)
这是我拥有所有数据库查询的类。我似乎已成功从 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。我尝试收到错误消息。消息说“'type 'List' 不是 type 'List' 的子类型”。
【问题讨论】:
-
你知道确切的错误是什么吗?您可以使用 if (snapshot.hasError) print(snapshot.error.toString); 快速检查它;
-
从来没想过。我只是假设它返回null。错误说“类型 'List
' 不是类型 'List ' 的子类型” 我的数据模型中有字符串和字符串数组。 Streambuilders不能处理数组吗? -
您需要在此处将动态转换为所需类型。在您的 _ratesDataFromSnapshot 内将动态列表转换为字符串列表尝试使用 snapshot.data['field-name'].cast
().toList() -
修复了它,并且可以按照我的意愿工作。谢谢。您能否发布答案以便我接受?
标签: firebase flutter stream-builder