【问题标题】:Null Check operator used on a null value on flutter with SqfliteNull Check 运算符在使用 Sqflite 颤振时用于空值
【发布时间】:2021-07-04 17:54:49
【问题描述】:

我正在使用 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): 

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow!你能发布错误回溯吗?
  • 你去。伙计

标签: flutter dart sqflite


【解决方案1】:

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

WidgetsFlutterBinding.ensureInitialized();

在初始化数据库的代码解决问题之前的方法里面。

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2021-07-08
    • 2022-07-20
    • 2021-11-17
    • 1970-01-01
    • 2022-08-02
    • 2021-09-25
    • 2022-09-30
    • 1970-01-01
    相关资源
    最近更新 更多