在 Flutter 中构建 Streams 时出现编译时错误

Posted

技术标签:

【中文标题】在 Flutter 中构建 Streams 时出现编译时错误【英文标题】:Getting compile time errors while building Streams in Flutter 【发布时间】:2021-10-29 04:46:38 【问题描述】:

我正在尝试将此列表作为流返回,但出现以下错误:

1. The body might complete normally, causing 'null' to be returned, but the return type is a potentially non-nullable type.

2. A value of type 'Future<QuerySnapshot<Map<String, dynamic>>>' can't be assigned to a variable of type 'QuerySnapshot<Object?>'.

3. A value of type 'List<dynamic>?' can't be returned from the method 'userBookmarkedCourses' because it has a return type of 'Stream<List<dynamic>?>'. 

下面列出的是导致这些错误的代码:

  Stream<List<dynamic>?> userBookmarkedCourses() 
    print("User Id within User Provider: $userId");
    QuerySnapshot userSnapshot;
    try 
      if (userId != null) 
        userSnapshot = FirebaseFirestore.instance.collection('users').where('userID', isEqualTo: userId).get();
        if (userSnapshot.docs.isNotEmpty) 
          return coursesBookmarkedList = userSnapshot.docs[0].get('coursesBookmarked');
        
        return coursesBookmarkedList = [];
      
     catch (error) 
      coursesBookmarkedList = [];
    
  

我也想知道如何在 MultiProviders 中声明它,我是否使用 Provider.of 来使用它

我是 Streams 的新手。这个错误的原因是什么?

【问题讨论】:

【参考方案1】:

1- 你必须在 catch 块中返回一些东西。因为方法 userBookmarkedCourses 有一个返回类型。

2- 您必须将 QuerySnapshot> 设置为 userSnapshot 的类型。此外,您必须将 await 放在 FirebaseFirestore.instance.collection('users').where('userID', isEqualTo: userId).get();

3- 方法的返回类型是Stream。但是,您返回的是 List?。将方法的返回类型更改为 List? 或返回一个变量,即 Stream

【讨论】:

以上是关于在 Flutter 中构建 Streams 时出现编译时错误的主要内容,如果未能解决你的问题,请参考以下文章

添加 firebase 后构建 Flutter apk 时出现 Gradle 错误

为啥我在为 Flutter 使用 codemagic 构建代码时出现“无法为 iOS 构建”?

为啥我在构建项目时出现 Flutter gradle 错误?

尝试构建和现有flutter应用程序时出现flutter web错误

在 Android Studio 中构建文件时出现颤振错误

尝试运行并构建到 iPhone 模拟器时出现 Flutter Xcode 致命错误