这是获取数据并插入数据库的方式:
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()
部分数据库...
知道有什么问题吗?