Vit*_*iam 2 dart flutter sqflite
我正在使用 Sqflite 研究 flutter 并尝试制作一个小应用程序,但是当我运行代码时出现此错误,我几乎到处都在寻找它可能是什么。
\n这里是使用Sqflite包的代码:
\n Future<Database> getDatabase() async {\n final String path = join(await getDatabasesPath(), 'bytebank.db');\n return openDatabase(path, onCreate: (db, version) {\n db.execute('CREATE TABLE contacts'\n '(id INTEGER PRIMARY KEY, '\n 'name TEXT, '\n 'account_number INTEGER)');\n }, version: 1);\n }\n \n Future<int> save(Contact contact) async {\n final Database db = await getDatabase();\n final Map<String, dynamic> contactMap = Map();\n contactMap['name'] = contact.name;\n contactMap['account_number'] = contact.account;\n contactMap['id'] = contact.id;\n return db.insert('contacts', contactMap);\n }\n \n Future<List<Contact>> findAll() async {\n final Database db = await getDatabase();\n final List<Map<String, dynamic>> result = await db.query('contacts');\n final List<Contact> contacts = [];\n for (Map<String, dynamic> row in result) {\n final Contact contact = Contact(\n row['id'],\n row['name'],\n row['account_number'],\n );\n contacts.add(contact);\n }\n return contacts;\n }\nRun Code Online (Sandbox Code Playgroud)\n这是我使用此功能的唯一一个地方:
\nvoid main() {\n save(Contact('William', 2, 13456)).then((id) {\n findAll().then((contacts) => print(contacts));\n });\n runApp(ByteBankApp());\n}\nRun Code Online (Sandbox Code Playgroud)\n型号类别:
\nclass Contact {\n final String name;\n final int account;\n final int id;\n Contact( this.id,\n this.name,\n this.account,\n);\n\n @override\n String toString() {\n return 'Contact{name: $name, account: $account}';\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n错误回溯:
\nLaunching lib\\main.dart on sdk gphone x86 arm in debug mode...\nRunning Gradle task 'assembleDebug'...\n\xe2\x88\x9a Built build\\app\\outputs\\flutter-apk\\app-debug.apk.\nInstalling build\\app\\outputs\\flutter-apk\\app.apk...\nDebug service listening on ws://127.0.0.1:52296/07rtnvW9tlQ=/ws\nSyncing files to device sdk gphone x86 arm...\nE/flutter (28649): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value\nE/flutter (28649): #0 MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:142:86)\nE/flutter (28649): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:148:36)\nE/flutter (28649): #2 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:331:12)\nE/flutter (28649): #3 invokeMethod (package:sqflite/src/sqflite_impl.dart:17:13)\nE/flutter (28649): #4 SqfliteDatabaseFactoryImpl.invokeMethod (package:sqflite/src/factory_impl.dart:82:7)\nE/flutter (28649): #5 SqfliteDatabaseFactoryMixin.safeInvokeMethod.<anonymous closure> (package:sqflite_common/src/factory_mixin.dart:41:38)\nE/flutter (28649): #6 wrapDatabaseException (package:sqflite/src/exception_impl.dart:7:32)\nE/flutter (28649): #7 SqfliteDatabaseFactoryImpl.wrapDatabaseException (package:sqflite/src/factory_impl.dart:78:7)\nE/flutter (28649): #8 SqfliteDatabaseFactoryMixin.safeInvokeMethod (package:sqflite_common/src/factory_mixin.dart:41:7)\nE/flutter (28649): #9 SqfliteDatabaseFactoryMixin.getDatabasesPath (package:sqflite_common/src/factory_mixin.dart:153:26)\nE/flutter (28649): #10 getDatabasesPath (package:sqflite/sqflite.dart:161:54)\nE/flutter (28649): #11 getDatabase (package:bytebank/database/app_database.dart:6:34)\nE/flutter (28649): #12 save (package:bytebank/database/app_database.dart:16:29)\nE/flutter (28649): #13 main (package:bytebank/main.dart:7:3)\nE/flutter (28649): #14 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:142:25)\nE/flutter (28649): #15 _rootRun (dart:async/zone.dart:1354:13)\nE/flutter (28649): #16 _CustomZone.run (dart:async/zone.dart:1258:19)\nE/flutter (28649): #17 _runZoned (dart:async/zone.dart:1789:10)\nE/flutter (28649): #18 runZonedGuarded (dart:async/zone.dart:1777:12)\nE/flutter (28649): #19 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:138:5)\nE/flutter (28649): #20 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:283:19)\nE/flutter (28649): #21 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)\nE/flutter (28649): \nRun Code Online (Sandbox Code Playgroud)\n
我不确定是否有帮助,但在异步“主”方法中初始化数据库时我遇到了类似的问题。添加以下内容:
WidgetsFlutterBinding.ensureInitialized();
Run Code Online (Sandbox Code Playgroud)
在初始化数据库的代码之前的方法内部解决了问题。