繁体   English   中英

使用 Sqflite 对 Flutter 上的空值使用 Null Check 运算符

[英]Null Check operator used on a null value on flutter with Sqflite

我正在使用 Sqflite 研究 flutter 并尝试制作一个小应用程序,但是当我运行代码时遇到了这个错误,我到处寻找它可能是什么。

这里使用Sqflite包的代码代码:

    Future<Database> getDatabase() async {
      final String path = join(await getDatabasesPath(), 'bytebank.db');
      return openDatabase(path, onCreate: (db, version) {
        db.execute('CREATE TABLE contacts'
            '(id INTEGER PRIMARY KEY, '
            'name TEXT, '
            'account_number INTEGER)');
      }, version: 1);
    }
    
    Future<int> save(Contact contact) async {
      final Database db = await getDatabase();
      final Map<String, dynamic> contactMap = Map();
      contactMap['name'] = contact.name;
      contactMap['account_number'] = contact.account;
      contactMap['id'] = contact.id;
      return db.insert('contacts', contactMap);
    }
    
    Future<List<Contact>> findAll() async {
      final Database db = await getDatabase();
      final List<Map<String, dynamic>> result = await db.query('contacts');
      final List<Contact> contacts = [];
      for (Map<String, dynamic> row in result) {
        final Contact contact = Contact(
          row['id'],
          row['name'],
          row['account_number'],
        );
        contacts.add(contact);
      }
      return contacts;
    }

这是我唯一使用此功能的地方:

void main() {
  save(Contact('William', 2, 13456)).then((id) {
  findAll().then((contacts) => print(contacts));
  });
  runApp(ByteBankApp());
}

型号分类:

class Contact {
  final String name;
  final int account;
  final int id;
  Contact( this.id,
    this.name,
    this.account,
);

  @override
  String toString() {
    return 'Contact{name: $name, account: $account}';
  }
}

错误回溯:

Launching lib\main.dart on sdk gphone x86 arm in debug mode...
Running Gradle task 'assembleDebug'...
√  Built build\app\outputs\flutter-apk\app-debug.apk.
Installing build\app\outputs\flutter-apk\app.apk...
Debug service listening on ws://127.0.0.1:52296/07rtnvW9tlQ=/ws
Syncing files to device sdk gphone x86 arm...
E/flutter (28649): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value
E/flutter (28649): #0      MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:142:86)
E/flutter (28649): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:148:36)
E/flutter (28649): #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:331:12)
E/flutter (28649): #3      invokeMethod (package:sqflite/src/sqflite_impl.dart:17:13)
E/flutter (28649): #4      SqfliteDatabaseFactoryImpl.invokeMethod (package:sqflite/src/factory_impl.dart:82:7)
E/flutter (28649): #5      SqfliteDatabaseFactoryMixin.safeInvokeMethod.<anonymous closure> (package:sqflite_common/src/factory_mixin.dart:41:38)
E/flutter (28649): #6      wrapDatabaseException (package:sqflite/src/exception_impl.dart:7:32)
E/flutter (28649): #7      SqfliteDatabaseFactoryImpl.wrapDatabaseException (package:sqflite/src/factory_impl.dart:78:7)
E/flutter (28649): #8      SqfliteDatabaseFactoryMixin.safeInvokeMethod (package:sqflite_common/src/factory_mixin.dart:41:7)
E/flutter (28649): #9      SqfliteDatabaseFactoryMixin.getDatabasesPath (package:sqflite_common/src/factory_mixin.dart:153:26)
E/flutter (28649): #10     getDatabasesPath (package:sqflite/sqflite.dart:161:54)
E/flutter (28649): #11     getDatabase (package:bytebank/database/app_database.dart:6:34)
E/flutter (28649): #12     save (package:bytebank/database/app_database.dart:16:29)
E/flutter (28649): #13     main (package:bytebank/main.dart:7:3)
E/flutter (28649): #14     _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:142:25)
E/flutter (28649): #15     _rootRun (dart:async/zone.dart:1354:13)
E/flutter (28649): #16     _CustomZone.run (dart:async/zone.dart:1258:19)
E/flutter (28649): #17     _runZoned (dart:async/zone.dart:1789:10)
E/flutter (28649): #18     runZonedGuarded (dart:async/zone.dart:1777:12)
E/flutter (28649): #19     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:138:5)
E/flutter (28649): #20     _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:283:19)
E/flutter (28649): #21     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
E/flutter (28649): 

我不确定是否会有所帮助,但是在以异步“main”方法初始化数据库时遇到了类似的问题。 添加以下内容:

WidgetsFlutterBinding.ensureInitialized();

在代码初始化数据库之前的方法内部解决了问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM