flutter - Flutter Moor:moor 没有意识到 `id` 列是主键,我不应该告诉它它应该有什么样的值?
问题描述
这是获取数据并插入数据库的方式:
onSubmitted: (inputName) {
final database = Provider.of<AppDatabase>(context);
final task = Task(
name: inputName,
dueDate: newTaskDate,
);
database.insertTask(task);
resetValuesAfterSubmit();
},
但如果我运行它,它会说:
E/flutter ( 6598): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: InvalidDataException: Sorry, Task(id: null, name: aaa, dueDate: null, completed: null) cannot be used for that because:
E/flutter ( 6598): • id: This column is not nullable and doesn't have a default value. Null fields thus can't be inserted.
E/flutter ( 6598): • completed: This column is not nullable and doesn't have a default value. Null fields thus can't be inserted.
E/flutter ( 6598):
E/flutter ( 6598): #0 VerificationContext.throwIfInvalid (package:moor/src/runtime/data_verification.dart:74:5)
E/flutter ( 6598): #1 InsertStatement._validateIntegrity (package:moor/src/runtime/query_builder/statements/insert.dart:210:51)
E/flutter ( 6598): #2 InsertStatement.createContext (package:moor/src/runtime/query_builder/statements/insert.dart:117:5)
E/flutter ( 6598): #3 InsertStatement.insert (package:moor/src/runtime/query_builder/statements/insert.dart:66:17)
E/flutter ( 6598): #4 AppDatabase.insertTask (package:moortest/data/moor_database.dart:50:47)
E/flutter ( 6598): #5 _NewTaskInputState._buildTextField.<anonymous closure> (package:moortest/ui/new_task_input_widget.dart:52:20)
E/flutter ( 6598): #6 EditableTextState._finalizeEditing (package:flutter/src/widgets/editable_text.dart:1921:27)
E/flutter ( 6598): #7 EditableTextState.performAction (package:flutter/src/widgets/editable_text.dart:1781:9)
E/flutter ( 6598): #8 TextInput._handleTextInputInvocation (package:flutter/src/services/text_input.dart:1354:37)
E/flutter ( 6598): #9 MethodChannel._handleAsMethodCall (package:flutter/src/services/platform_channel.dart:435:55)
E/flutter ( 6598): #10 MethodChannel.setMethodCallHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:382:34)
E/flutter ( 6598): #11 _DefaultBinaryMessenger.handlePlatformMessage (package:flutter/src/services/binding.dart:284:33)
E/flutter ( 6598): #12 _invoke3.<anonymous closure> (dart:ui/hooks.dart:223:15)
E/flutter ( 6598): #13 _rootRun (dart:async/zone.dart:1354:13)
E/flutter ( 6598): #14 _CustomZone.run (dart:async/zone.dart:1258:19)
E/flutter ( 6598): #15 _CustomZone.runGuarded (dart:async/zone.dart:1162:7)
E/flutter ( 6598): #16 _invoke3 (dart:ui/hooks.dart:222:10)
E/flutter ( 6598): #17 PlatformDispatcher._dispatchPlatformMessage (dart:ui/platform_dispatcher.dart:520:7)
E/flutter ( 6598): #18 _dispatchPlatformMessage (dart:ui/hooks.dart:90:31)
有什么意义,因为在视频中它可以正常工作......还完成应该有一个默认值:
BoolColumn get completed => boolean().withDefault(Constant(false))();
id 是主键:
IntColumn get id => integer().autoIncrement()();
就像我可以像这样添加completed
默认值:
onSubmitted: (inputName) {
final database = Provider.of<AppDatabase>(context);
final task = Task(
name: inputName,
dueDate: newTaskDate,
completed: false,
);
database.insertTask(task);
resetValuesAfterSubmit();
},
但它仍然抛出异常。如果我添加id
一个值,那么它会保存具有该 id 的对象,因为我总是需要检查数据库中哪个是最高的 id,这完全杀死了autoincrement()
数据库的一部分......
有什么想法有什么问题吗?
解决方案
推荐阅读
- c++ - 为什么 CLang++ 不优化循环而 G++ 优化?
- c# - 执行 sqlCE 查询时出现 C# 异常
- tfs - TFS 2018 构建控制台应用程序未包含在构建工件中
- python - set value in dataframe
- morris.js - Hide ykeys but show label on morris js
- r - 带有 gam s() 包装器的 ExtractVars 中的无效模型公式
- laravel - 如何更新 Laravel Eloquent 模型中的数据恢复?
- tfs - Reporting tab is not visible in TFS admin console
- tensorflow - Tensorflow 1.8, tf.keras gives different result in DCGAN from Keras
- wordpress - I have a random `t` at the top of my wordpress site, but it is not in any theme files