异步映射不反映方法主体中的更改

时间:2019-09-21 08:56:06

标签: flutter dart

此代码返回的列表为空。假定formatUser是一个异步方法,该方法将用户从远程格式化为合适的格式。为什么我们映射另一个列表时filterUsers列表没有变化?

Future<List<User>> fetchUsers() async{
final list<User> usersFromRemote = await getUserFromRemote();

final List<User> filterUsers = [];

usersFromRemote.map((user) async {
   if(user.name != 'jim')
{
     filterUsers.add(await formatUser(user));
}
});

return filterUsers;

}

2 个答案:

答案 0 :(得分:1)

您错误地使用了map。您需要为自己的用例使用filter(aka where)和map

Future<List<User>> fetchUsers() async {
  final List<User> usersFromRemote = await getUserFromRemote();

  final List<User> filterUsers = await Future.wait(
    usersFromRemote.where((u) => u.name != 'jim').map(
      (user) async {
        return formatUser(user);
      },
    ),
  );
  return filterUsers;
}

或者您可以使用forEach,但它的功能不是很好。

答案 1 :(得分:0)

使用forEach()代替map()。根据{{​​3}},除非对map()返回的可迭代对象进行迭代,否则将不调用转换函数。