我正在try 使用我的Cloud FiRestore数据库中的数据,但我收到了这个错误,我不知道为什么会出现这个错误,也不知道如何修复它.就我而言,错误所涉及的两种数据类型是相同的.

以下是错误: The argument type 'Future<List<Exercise>>' can't be assigned to the parameter type 'Future<List<Exercise>>?'个 以下是出现错误的代码片段.错误出在这一部分:FirestoreService().getExercises()

child: FutureBuilder<List<Exercise>>(
   future: FirestoreService().getExercises(),
   builder: (context, snapshot)

完整代码: exercise_list.dart

class ExerciseList extends StatelessWidget {
  const ExerciseList({super.key});

  @override
  Widget build(BuildContext context) {
    return Expanded(
      child: DecoratedBox(
        decoration: const BoxDecoration(
          color: Colors.white,
        ),
        child: Padding(
          padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 30),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Expanded(
                child: FutureBuilder<List<Exercise>>(
                  future: FirestoreService().getExercises(),
                  builder: (context, snapshot) {
                    if (snapshot.hasError) {
                      return const Text('Something went wrong');
                    }

                    if (snapshot.connectionState == ConnectionState.waiting) {
                      return const Center(
                        child: CircularProgressIndicator(),
                      );
                    }

                    return ListView.builder(
                      itemCount: snapshot.data!.length,
                      itemBuilder: (context, index) => ExerciseItem(
                        exercise: snapshot.data![index],
                      ),
                    );
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

firestore.dart

/// Reads all documents from the exercises collection
  Future<List<Exercise>> getExercises() async {
    var ref = _db.collection('exercises');
    var snapshot = await ref.get();
    var data = snapshot.docs.map((s) => s.data());
    var exercises = data.map((d) => Exercise.fromJson(d));
    return exercises.toList();
  }

如有任何帮助,我们将不胜感激

推荐答案

默认情况下,FutureBuilder返回一个可以为空的值,但传递给FutureBuilder的方法返回的是不可为空的变量,因此请将getExercises()更改为:

Future<List<Exercise>>? getExercises() async {
    var ref = _db.collection('exercises');
    var snapshot = await ref.get();
    var data = snapshot.docs.map((s) => s.data());
    var exercises = data.map((d) => Exercise.fromJson(d));
    return exercises.toList();
  }

Flutter相关问答推荐

如何在容器中移动图标按钮?

Android元数据为1.9.0,预期版本为1.7.1,如何解决flutter应用程序构建失败问题?

在Flutter 中将参数从一个类传递到另一个类

如何处理Flutter Riverpod异步通知器中的状态和数据库

Flutter守护进程无法启动

如何在Dart中允许正则表达式中有一个空格,但允许其他字符为1或更多?

谷歌 map 在 flutter 应用程序中显示错误的当前位置

ScaffoldMessenger 在等待键下方不起作用

Dart 和 flutter 错误无法在您的 PATH 中找到 git

Flutter - Stripe:类型List 不是类型Map 的子类型? method_channel_stripe.dart 中的错误:263

Flutter 动保存新的变量值

Flutter 分析发现 Gitlab CI/CD 管道中的问题,但它在本地没有

Flutter/Dart - 从外部类更新状态

flutter 创建一个带有 2 个图标的按钮

Flutter 如何使用 ClipPath 编辑容器的顶部?

Getx Flutter 在更新值时抛出空错误

如何在 Flutter 中的页面加载上的 Listview 上应用自动滚动

Flutter - 检测手指何时进入容器

解密 Modulr 安全令牌

如何使用我拥有的 .jks 文件签署我的应用程序