来自 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
我无法通过 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