我對顫振世界還很陌生,目前還停留在型別轉換上。我認為我做得對,但 flutter 認為我不是這就是為什么在編譯代碼時會拋出錯誤。這是我在做什么。
FutureBuilder(
future: newsHistoryService.newsHistoryByCategoryType(
newsType: dropdownValue),
builder: (context, snapshot) {
if (snapshot.hasData) {
List<NewsHistoryModel> data = snapshot.data as List<NewsHistoryModel>;
return data.isNotEmpty
? ListView.builder(
)
: emptyWidget();
}
return snapWidgetHelper(snapshot,
defaultErrorMessage: errorSomethingWentWrong);
},
).paddingAll(16)
newsHistoryService.newsHistoryByCategoryType 函式如下。
Future<List<NewsHistoryModel>> newsHistoryByCategoryType( {String? newsType}) async {
return await ref!
.where(NewsHistoryKeys.userId, isEqualTo: appStore.userId)
.where(NewsHistoryKeys.newType, isEqualTo: newsType)
.orderBy(CommonKeys.createdAt, descending: true)
.get()
.then((value) => value.docs
.map((e) =>
NewsHistoryModel.fromJson(e.data() as Map<String, dynamic>))
.toList());
}
顫振拋出如下錯誤。
Another exception was thrown: type 'List<NewsHistoryModel>' is not a subtype of type 'List<NewsHistoryModel>' in type cast.
負責此錯誤的行是
List<NewsHistoryModel> data = snapshot.data as List<NewsHistoryModel>;
我如何才能正確地將 firestore 物件分配給List<NewsHistoryModel>. 任何幫助將不勝感激。
uj5u.com熱心網友回復:
這里的問題是 Firebase 將串列存盤為動態串列。你可以嘗試做的是;
FutureBuilder(
future: newsHistoryService.newsHistoryByCategoryType(
newsType: dropdownValue),
builder: (context, snapshot) {
if (snapshot.hasData) {
List<NewsHistoryModel> data = snapshot.data.cast<List<NewsHistoryModel>>;
return data.isNotEmpty
? ListView.builder(
)
: emptyWidget();
}
return snapWidgetHelper(snapshot,
defaultErrorMessage: errorSomethingWentWrong);
},
).paddingAll(16)
或者,如果這不起作用,您可以嘗試修改 NewHistoryModel 的工廠方法并將 .cast 添加到必要的欄位。
uj5u.com熱心網友回復:
你可以試試
List<NewsHistoryModel> data = List<NewsHistoryModel>.from(snapshot.data);
或者也改變
value.docs
.map((e) =>
NewsHistoryModel.fromJson(e.data() as Map<String, dynamic>))
.toList());
到:
List<NewsHistoryModel>.from(value.docs
.map((e) =>
NewsHistoryModel.fromJson(Map<String, dynamic>.from(e.data())))
.toList()));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/350644.html
