Flutter can't access data because it's potentially null

491

You need to access the member functions, variables of your nullable object with ? operator. Just declaring nullable will not satisfy the compiler. It can be null while accessing insertData function.

It performs a null check before accessing the function.

Try the below snippet with ? operator.

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

If you are certain that _repository object is not null while accessing the saveCategory(Categori category) function. You can use ! operator for force assurance that the object is not null (Not recommended).

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

You might also wanna look at late modifier

About nullable function

Return values

All functions return a value. If no return value is specified, the statement return null; is implicitly appended to the function body.

Therefore, if you know the return type of your function, specify it. If the function may return null, use '?' after the return type.

Share:
491
Muhammad Bayu Kurniawan
Author by

Muhammad Bayu Kurniawan

Updated on January 01, 2023

Comments

  • Muhammad Bayu Kurniawan
    Muhammad Bayu Kurniawan over 1 year

    How can I define my function nullable? I get the following error on Flutter (InsertData is the function in 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 seen below:

    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);
      }
    }
    

    The function is initialized as seen below:

    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());
      }
    }
    

    What am I missing ? I thought I already initiliazed the Repository with (?)