flutter - Flutter 无法访问数据,因为它可能为 null
问题描述
如何定义我的函数可以为空?我在 Flutter 上收到以下错误(InsertData 是 repository.dart 中的函数):
`lib/services/categoriesservices.dart:13:30:错误:无法在“存储库”上访问属性“InsertData”?因为它可能为空。
“存储库”来自“package:sqflite2/repositories/repository.dart”(“lib/repositories/repository.dart”)。尝试使用 ? 访问。反而。返回等待_repository.InsertData.call(`
repository.dart如下所示:
import 'package:sqflite/sqflite.dart';
import 'package:sqflite2/repositories/databaseconnection.dart';
class Repository {
DataBaseConnection? _dataBaseConnection;
Repository() {
//initialize database connection
_dataBaseConnection = DataBaseConnection();
}
static Database? _database;
Future<Database?> get database async {
if (_database != null) {
return _database;
}
_database = await _dataBaseConnection.setDatabase();
return database;
}
//create function inserting data to database
InsertData(table, data) async {
var connection = await database;
return await connection.insert(table, data);
}
}
函数初始化如下:
import 'package:sqflite2/models/category.dart';
import 'package:sqflite2/repositories/repository.dart';
class CategoryService {
Repository? _repository;
CategoryService() {
_repository = Repository();
}
saveCategory(Categori category) async {
return await _repository.InsertData("categories", category.categoryMap());
}
}
我错过了什么?我以为我已经用(?)初始化了存储库
解决方案
您需要使用?
运算符访问可空对象的成员函数和变量。仅仅声明可为空不会满足编译器的要求。insertData
访问函数时可以为空。
它在访问函数之前执行空值检查。
使用运算符尝试以下代码段?
。
saveCategory(Categori category) async {
return await _repository?.InsertData("categories", category.categoryMap());
}
如果您确定该_repository
对象在访问该saveCategory(Categori category)
函数时不为空。您可以使用!
运算符强制确保对象不为空(不推荐)。
return await _repository!.InsertData("categories", category.categoryMap());
您可能还想查看后期修饰符
关于可空函数
所有函数都返回一个值。如果没有指定返回值,则语句返回null;隐式附加到函数体。
因此,如果您知道函数的返回类型,请指定它。如果函数可能返回 null,请使用 '?' 返回类型之后。
推荐阅读
- django - django pytest 案例失败,而邮递员没有
- graphql - 使用 gatsby-source-contentful 使用 Gatsbyjs 和 Contentful 渲染富文本
- amazon-web-services - 如何有条件地使用 Terraform 中的现有资源?
- avr - AVR I/O:数字与模拟输入编程
- angular - Angular 8 -> 10 升级 - 目标 es5 不转译 @angular 模块
- asp.net - 视觉工作室 2019;IIS **快递**;asp.net 4.8(非核心);视窗认证;允许特定服务器本地组访问页面
- playwright - 剧作家 SelectOption 没有选择一个值
- docker - minikube中docker守护进程的IP和TCP端口
- arrays - JSON 验证错误期望 'EOF'、'}'、','、']',得到 ':'
- c++ - Qt6拆分QString