flutter - 为什么这个 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;
}
}
图片
解决方案
我认为您遇到的问题是关于可空返回。Dart 不会在if
语句之后验证可为空的类变量,但如果您在 之后插入空检查运算符return _database
,您的代码应该可以工作。
前任。:
if (_database != null) return _database!;
推荐阅读
- hyperledger-fabric - 如何更新现有组织的加密材料(频道更新)
- python - Django views.py:添加到收藏夹页面
- javascript - 如何在使用 vue js 提交时将表单数据保存在 .yml 文件中?
- php - 我想我从 ReflectionProperty 中发现了一个带有 setValue 的错误
- cmake - CMake 的 -S 和 -H 选项有什么区别?
- c# - Asp.Net Core 允许 CORS 中的 IP 范围
- javascript - UL 标签中的展开和折叠
- angular - 使用带有 MSAL for Angular 的社交身份提供程序向我的 AD-B2C 注册用户
- pyspark - 如何在不使用 withcolumn 的情况下向数据框添加列
- java - 从我的 Centos 7 服务器发送邮件不起作用