

Flutter開発初心者です。

現在Sqfliteを使ってアプリにDatabaseを導入しようとしていて、以下のサイトを参考に構築しようとしています。

[FlutterのシンプルなSQFliteデータベースの例](https://ichi.pro/flutter-no-shinpuruna-sqflite-
de-tabe-su-no-rei-252244950400913)  
[Flutterでsqliteを使ったTodoアプリを作る](https://qiita.com/popy1017/items/7ada79b07281f4a8e544)

ですが、最近flutterがnull safetyを進めていて参考にしているサイト通りにコードを書いてもうまいように導入することができません。

問題となっているのは下記コード`DBProvider`の6行目の`Database _database`です。  
エラー文は`Non-nullable instance field '_database' must be
initialized.`となっていて初期化すればいいのはわかるのですが、どのようにコードを訂正したらいいのかがわかりません。  
よろしくお願いします。

pubspec.yaml

[code]

    environment:
      sdk: ">=2.12.0 <3.0.0"
    
    dependencies:
      flutter:
        sdk: flutter
      flutter_localizations:
        sdk: flutter
      intl: ^0.17.0
      cupertino_icons: ^1.0.2
      flutter_riverpod: ^0.14.0+3
      path_provider: ^2.0.2
      sqflite: ^2.0.0
    
[/code]

DBProvider

[code]

    class DBProvider {
    
      DBProvider._();
    
      static final DBProvider instance = DBProvider._();
      Database _database;
    
      Future<Database> get database async {
        if (_database != null) return _database;
        _database = await _initDatabase();
        return _database;
      }
    
      Future<Database> _initDatabase() async {
        Directory documentDirectory = await getApplicationDocumentsDirectory();
        String path = join(documentDirectory.path, _dbName);
        return await openDatabase(
          path,
          version: _dbVersion,
          onCreate: _onCreate,
        );
      }
    
      Future<void> _onCreate(Database db, int version) async {
        await db.execute('''
        CREATE TABLE $_tableName (
        $_Id INTEGER PRIMARY KEY,
        $_DateCreated TEXT NOT NULL,
        $_Note TEXT NOT NULL
        )''');
      }
    
      Future<int> insert(Memo memo) async {
        Database db = await instance.database;
        return await db.insert(_tableName, memo.toMap());
      }
      ....
    }
    
[/code]


CC BY-SA 4.0
2021-06-04T03:12:34.940
77325
2021-09-03T00:07:49.250
2021-09-03T00:07:49.250
3060
46656
question
flutter
Flutter Sqfliteのnull Safetyについて


`late` をつける

[code]

    late Database _database;
    
[/code]

<https://dart.dev/null-safety/understanding-null-safety#late-variables>

* * *

もしくは nullable にする

[code]

    Database? _database;
    
[/code]

この場合 `database` 関数も修正する必要があると思います。

[code]

    // 修正例
    Future<Database> get database async {
      if (_database != null) return _database!;
      _database = await _initDatabase();
      return _database!;
    }
    
[/code]


CC BY-SA 4.0
2021-09-02T22:35:30.697
82192
2021-09-02T22:35:30.697
32959
77325
answer