Flutter 无法访问数据,因为它可能为空
Flutter can't access data because it's potentially null
如何定义可为空的函数?我在 Flutter 上收到以下错误(InsertData 是 repository.dart 中的函数):
`lib/services/categoriesservices.dart:13:30: Error: Property
'InsertData' cannot be accessed on 'Repository?' because it is
potentially null.
'Repository' is from 'package:sqflite2/repositories/repository.dart'
('lib/repositories/repository.dart'). Try accessing using ?. instead.
return await _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());
}
}
我错过了什么?我以为我已经用 (?)
初始化了存储库
您需要使用 ?
访问可空对象的成员函数和变量
操作员。仅仅声明 nullable 不会满足编译器的要求。访问insertData
函数时可以为null。
它在访问函数之前执行空检查。
使用 ?
运算符尝试以下代码段。
saveCategory(Categori category) async {
return await _repository?.InsertData("categories", category.categoryMap());
}
如果您确定 _repository
对象在访问 saveCategory(Categori category)
函数时不为空。您可以使用 !
运算符强制确保对象不为空(不推荐)。
return await _repository!.InsertData("categories", category.categoryMap());
您可能还想看看 late modifier
关于可空函数
All functions return a value. If no return value is specified, the
statement return null; is implicitly appended to the function body.
因此,如果您知道函数的 return 类型,请指定它。如果函数可能 return 为 null,请使用 '?'在 return 类型之后。
如何定义可为空的函数?我在 Flutter 上收到以下错误(InsertData 是 repository.dart 中的函数):
`lib/services/categoriesservices.dart:13:30: Error: Property 'InsertData' cannot be accessed on 'Repository?' because it is potentially null.
'Repository' is from 'package:sqflite2/repositories/repository.dart' ('lib/repositories/repository.dart'). Try accessing using ?. instead. return await _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());
}
}
我错过了什么?我以为我已经用 (?)
初始化了存储库您需要使用 ?
访问可空对象的成员函数和变量
操作员。仅仅声明 nullable 不会满足编译器的要求。访问insertData
函数时可以为null。
它在访问函数之前执行空检查。
使用 ?
运算符尝试以下代码段。
saveCategory(Categori category) async {
return await _repository?.InsertData("categories", category.categoryMap());
}
如果您确定 _repository
对象在访问 saveCategory(Categori category)
函数时不为空。您可以使用 !
运算符强制确保对象不为空(不推荐)。
return await _repository!.InsertData("categories", category.categoryMap());
您可能还想看看 late modifier
关于可空函数
All functions return a value. If no return value is specified, the statement return null; is implicitly appended to the function body.
因此,如果您知道函数的 return 类型,请指定它。如果函数可能 return 为 null,请使用 '?'在 return 类型之后。