dart Flutter无法访问数据,因为它可能为null

czq61nw1  于 2023-04-03  发布在  Flutter
关注(0)|答案(1)|浏览(144)

我如何定义我的函数nullable?我在Flutter上得到以下错误(InsertData是repository.dart中的函数):
lib/services/categoriesservices.dart:13:30:错误:无法访问“存储库?”上的属性“InsertData”,因为它可能为null。 'Repository'来自'package:sqflite 2/repositories/repositories.dart'('lib/repositories/repositories. dart')。请尝试使用?. 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());
  }
}

我错过了什么?我以为我已经用(?)初始化了存储库

kuuvgm7e

kuuvgm7e1#

你需要用?操作符访问你的可空对象的成员函数,变量。仅仅声明nullable不能满足编译器的要求。在访问insertData函数时,它可以是null。
它在访问函数之前执行空值检查。
尝试下面的代码片段与?运算符。

saveCategory(Categori category) async {
    return await _repository?.InsertData("categories", category.categoryMap());
  }

如果您在访问saveCategory(Categori category)函数时确定_repository对象不为空。您可以使用!运算符强制确保对象不为空(不推荐)。

return await _repository!.InsertData("categories", category.categoryMap());

你可能还想看看后期修饰语

关于可空函数

返回值
所有函数都返回一个值。如果没有指定返回值,则语句返回null;被隐式地附加到函数体。
因此,如果您知道函数的返回类型,请指定它。如果函数可能返回null,请在返回类型后使用“?”。

相关问题