首页 > 解决方案 > 为什么这个 Dart 有返回类变量的问题,但可以返回它的副本?

问题描述

为什么这个 Dart 有返回类变量的问题,但可以返回它的副本?错误消息:“'数据库类型的值?' 无法从函数“数据库”返回,因为它的返回类型为“未来”。”

请注意,这个问题的重点是为什么场景 1 没有出现问题。(即问题不是为什么场景 2 有问题,而是为什么场景 1 似乎没有问题)

import 'package:sqflite/sqflite.dart';

class DatabaseHelper {
  static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
  static Database? _database;

  DatabaseHelper._privateConstructor();

  Future<Database> get database async {
    
    // Scenario 1 - Works
    Database? testDb = _database;
    if (testDb != null) return testDb;

    // Scenario 2 - Does NOT work??
    if (_database != null) return _database;   // "A value of type 'Database?' can't be returned from the function 'database' because it has a return type of 'Future<Database>'."

    Database? instance = await _initDatabase();
    _database = instance;
    return instance;
  }


  Future<Database> _initDatabase() async {
    Database _db = await openDatabase('my_db.db');
    return _db;
  }

}

图片

在此处输入图像描述

标签: flutterdartsqflite

解决方案


我认为您遇到的问题是关于可空返回。Dart 不会在if语句之后验证可为空的类变量,但如果您在 之后插入空检查运算符return _database,您的代码应该可以工作。

前任。:

if (_database != null) return _database!;

推荐阅读