来自 Future Builder snapshot.data 的 Flutter Floor 数据库?

Flutter Floor Database from snapshot.data in Future Builder?

我无法通过 Flutter 中的 floor 将 snapshot.data 存储到数据库。我编写了实体、dao 和数据库文件,构建了数据库并且 database.g.dart 成功完成,但是当我尝试 insertUser 函数时它变成了以下错误; 我错过了什么? [指南]中没有的记录未来 snapshot.data 有什么可以做的吗?1

错误:

════════ Exception caught by gesture ═══════════════════════════════════════════════════════════════
The following NoSuchMethodError was thrown while handling a gesture:
The method 'insertUser' was called on null.
Receiver: null
Tried calling: insertUser(Instance of 'UserF')

我的实体:

import 'package:floor/floor.dart';

@entity
class UserF {
 @PrimaryKey(autoGenerate: true)
 final int id;

 final String user;
 final int overview;


 UserF({this.id,
     this.user,
     this.overview,


 @override
 int get hashCode => id.hashCode ^ user.hashCode ^ overview.hashCode  ;

 @override
 String toString() {
   return 'UserF{id: $id, user: $user, overview: $overview}';
 }
}

道:

import 'package:floor/floor.dart';
import 'entity.dart';

@dao
abstract class UserDao {
 @Query('SELECT * FROM UserF')
 Future<List<UserF>> findAllUsers();

 @Query('SELECT * FROM UserF WHERE id = :id')
 Stream<UserF> findUserById(int id);

 @insert
 Future<void> insertUser(UserF userF);

 @delete
 Future<int> deleteUser(UserF userF);

}

数据库:

import 'dart:async';
import 'package:floor/floor.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart' as sqflite;
import 'user_dao.dart';
import 'entity.dart';
part 'database.g.dart'; // the generated code will be there

@Database(version: 1, entities: [UserF])
abstract class AppDatabase extends FloorDatabase {
 UserDao get userDao;
}

我的 main.dart

上的相关部分
Future<void> main() async{
 WidgetsFlutterBinding.ensureInitialized();

 final AppDatabase = await $FloorAppDatabase
     .databaseBuilder('database.db')
     .build();

 runApp(MyApp());
}

....

floatingActionButton: FloatingActionButton(
                         onPressed: (){
                           final userf = UserF(user: snapshot.data.user, overview: snapshot.data.overview);
                           favoriteDao.insertUser(userf);
                         },
                         child: Icon(Icons.add),
....

如代码:

part 'database.g.dart';

正在创建错误,这意味着您必须生成该文件。

如果您还没有添加这些依赖项:

依赖关系:

floor: ^0.14.0
sqflite: ^1.3.0

开发依赖项:

floor_generator: ^0.14.0
build_runner: ^1.8.1

在终端 运行 中执行以下命令:

flutter packages pub run build_runner build

并等待一段时间。 Flutter 将生成命令。 Flutter 会自动生成文件。

记住:数据库的名称文件生成的文件的名称必须相同,除了添加。 g

例如

如果数据库文件名为mydatabase.dart 生成的文件名必须是 mydatabase.g.dart