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

关于可空函数

Return values

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 类型之后。