gpt4 book ai didi

sorting - 尝试对作为列表流快照的列表进行排序时发生Flutter/Dart “Cannot modify an unmodifiable list”

转载 作者:行者123 更新时间:2023-12-03 04:26:36 31 4
gpt4 key购买 nike

这是导致问题的Streambuilder的builder方法内的代码:

List<User> users = snapshot.data;
users.sort((user1, user2) => (user1.distanceInKm ?? 1000).compareTo(user2.distanceInKm ?? 1000));

如果我将以下流用于Streambuilder,则上述排序有效:
static Stream<List<User>> getUsersStreamWithDistance(
{@required User loggedInUser}) {
try {
var userSnapshots = _fireStore.collection('users').snapshots().map(
(snap) => snap.documents
.map((doc) => User.fromMap(map: doc.data))
.where((user) => user.email != loggedInUser.email)
.map((user) {
user.updateDistanceToOtherUser(otherUser: loggedInUser);
return user;
}).toList());
return userSnapshots;
} catch (e) {
print(e);
return null;
}
}

但是,当我使用以下流时,不是我需要的流(ZipStream来自rxdart包):
static Stream<List<User>> getSpecifiedUsersStreamWithDistance(
{@required User loggedInUser, @required List<String> uids}) {
try {
List<Stream<User>> listOfStreams = [];
for (var uid in uids) {
Stream<User> streamToAdd = _fireStore
.collection('users')
.where('email', isEqualTo: uid)
.snapshots()
.map((snap) => snap.documents
.map((doc) => User.fromMap(map: doc.data))
.map((user) {
user.updateDistanceToOtherUser(otherUser: loggedInUser);
return user;
}).toList()[0]);
listOfStreams.add(streamToAdd);
}

Stream<List<User>> usersStream = ZipStream.list(listOfStreams);

return usersStream;
} catch (e) {
print(e);
return null;
}
}

最佳答案

这是因为ZipStream.list()创建了Stream列表的新List.unmodifiable()

List<User> users = List.from(snapshot.data); // to convert it editable list
users.sort((user1, user2) => (user1.distanceInKm ?? 1000).compareTo(user2.distanceInKm ?? 1000));

关于sorting - 尝试对作为列表流快照的列表进行排序时发生Flutter/Dart “Cannot modify an unmodifiable list”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59439109/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com