小编Aug*_*ski的帖子

await 表达式只能在异步函数中使用

我试图在用户登录时从 Firestore 加载一些数据,并且需要等到数据加载后再继续。但是,我等待结果的努力没有奏效。

Future<bool> userListener() async {
  _auth.onAuthStateChanged.listen((firebaseUser) {
    bool isDone = false; 

    if (firebaseUser != null) {
      isDone = await loadUserData(firebaseUser);   // This line is killing me!!
      return isDone;
    } else {
      return false;
    }
  }, onError: (error) {
    print('error in UserListener: $error');
  });
}

Future<bool> loadUserData(FirebaseUser user) async {
  Firestore database = Firestore();
  DocumentReference data = database.collection('userData').document(user.uid);

  try {
    DocumentSnapshot myQuery = await data.get();
    theNumber = myQuery.data['theNumber'];
    return true;
  } on PlatformException catch (e) {
    print(e);
    return false; …
Run Code Online (Sandbox Code Playgroud)

asynchronous dart flutter google-cloud-firestore

5
推荐指数
1
解决办法
3622
查看次数

在 Flutter 中创建列表映射

将应用程序从 Swift 移植到 Flutter。在我的应用程序中,我有一个类,MyClass,并且正在处理大约 250 个实例的列表。在不同的时候,我需要根据特定属性对对象进行分组。

在 Swift 中,我能够像这样创建对象的分组列表:

var groupedList = Dictionary<String, Array<MyClass>>()
Run Code Online (Sandbox Code Playgroud)

然后我就可以遍历我的对象列表,并根据需要将项目分配给正确的数组。我认为在 Flutter 中制作列表地图可能会这样:

Map groupedList = Map<String, List<MyClass>>();
Run Code Online (Sandbox Code Playgroud)

然后我可以遍历项目,测试属性,为每个唯一值创建一个 Map 条目并将项目附加到正确的列表:

for (var item in listOfObjects) {
  if (!groupedList.containsKey(item.someproperty)) {
    List<MyClass> sublist = [];
    groupedList[item.someproperty] = sublist;
  }
  groupedList[item.someproperty].add(item);
}
Run Code Online (Sandbox Code Playgroud)

然而,我得到的是一个包含所有正确键的映射,但每个列表只包含一个 MyClass 实例,而不是一个实际的 MyClass 列表。

dictionary dart flutter

3
推荐指数
1
解决办法
1724
查看次数