簡體   English   中英

Flutter 來自 Future Builder 中 snapshot.data 的樓層數據庫?

[英]Flutter Floor Database from snapshot.data in Future Builder?

我無法通過 Flutter 中的樓層將 snapshot.data 存儲到數據庫。 我編寫了實體、dao 和數據庫文件,構建了數據庫和數據庫。g.dart 成功完成,但是當我嘗試 insertUser function 時,它變成了以下錯誤; 我錯過了什么? 有什么可做的記錄未來的快照。數據在[指南]中沒有? 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 會自動生成文件。

記住:數據庫文件的名稱和生成的文件的名稱必須相同,除了 ADDING.g

例如

如果數據庫文件名為mydatabase.dart生成的文件名必須是mydatabase.g.dart

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM