![](/img/trans.png)
[英]type 'List<Map<String, dynamic>>' is not a subtype of type 'Map<dynamic, dynamic>'
[英]Flutter/Firestore returns type List<Review> is not a subtype of type 'Map<String, dynamic>' when retrieving snapshots from Stream
我正在嘗試使用 firestore 實時數據庫檢索一個集合及其子集合並在 ListView 中顯示結果但是我得到type List<Review> is not a subtype of type 'Map<String, dynamic>'
我無法得到周圍。
問題我應該更改什么才能正確返回所需的結果?
這是reviews_service.dart
:
class ReviewsService {
var currentUser = FirebaseAuth.instance.currentUser;
var firestoreInstance = FirebaseFirestore.instance;
Stream<List<T>> reviewsCollectionStream<T>({
@required String path,
@required T builder(Map<String, dynamic> data),
}) {
final reference = firestoreInstance.collection(path);
final snapshots = reference.snapshots();
return snapshots.map((snapshot) =>
snapshot.docs.map((snapshot) => builder(snapshot.data())).toList());
}
這些是我的 model 類review.dart
和client.dart
class Review {
final String reviewTitle;
final String reviewContent;
final Client owner;
Review(
{this.reviewTitle,
this.reviewContent,
this.owner});
factory Review.fromMap(Map<String, dynamic> map) {
if (map == null) return null;
return Review(
reviewTitle: map['revieewTitle'],
reviewContent: map['reviewContent'],
owner: Client.fromMap(map['owner']),
);
}
}
class Client {
final String clientUID;
final String clientEmail;
final String clientName;
Client({this.clientUID, this.clientEmail, this.clientName});
factory Client.fromMap(Map<String, dynamic> map) {
if (map == null) return null;
return EndUser(
clientUID: map['clientId'],
clientEmail: map['clientEmail'],
clientDisplayName: map['clientName'],
);
}
}
這是我檢索數據並將它們顯示在reviews_page.dart
中的地方:
class _ReviewsPageState extends State<ReviewsPage> {
final reviews = _mReviewService.reviewssCollectionStream(path: "reviews", builder: (data) => Review.fromMap(data));
@override
Widget build(BuildContext context) {
return Expanded(
child: Container(
child: StreamBuilder<Object>(
stream: reviews,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
controller: _scrollController,
itemBuilder: (BuildContext context, int index) {
Review rev = new Review(
reviewTitle: (snapshot.data as Map)["reviewTitle"][index].toString(),
reviewContent: (snapshot.data as Map)["reviewContent"][index].toString(),
owner: (snapshot.data as Map)["reviewOwner"][index]);
return Review(review: rev,);
},
);
} else {return Center(child: Text('there are no reviews'));}
}),
),
);
}
}
更新我開始工作檢索運行正常我現在唯一的問題是Client
端子集合為空! Stream<List<T>> reviewsCollectionStream<T>({...})
有什么問題嗎?
這就是我所做的:在reviews_page.dart
和itemBuilder
:
代替
Review rev = new Review(
reviewTitle: (snapshot.data as Map)["reviewTitle"][index].toString(),
reviewContent: (snapshot.data as Map)["reviewContent"][index].toString(),
owner: (snapshot.data as Map)["reviewOwner"][index]);
我將其恢復as List
:
//only one line that's all what it takes
Review rev = (snapshot.data as List)[index];
但我仍然無法檢索clients
的子集合
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.