代码之家  ›  专栏  ›  技术社区  ›  Greg

为什么此Dart代码给出“操作数不能为空,因此条件始终为真。删除条件”?

  •  0
  • Greg  · 技术社区  · 3 年前

    import 'package:sqflite/sqflite.dart';
    
    class DatabaseHelper {
      static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
      static late Database _database;
    
      DatabaseHelper._privateConstructor();
    
      Future<Database> get database async {
        if (_database != null) return _database;  // HERE: "The operand can't be null, so the condition is always true. Remove the condition"
        _database = await _initDatabase();
        return _database;
      }
    
      Future<Database> _initDatabase() async {
        Database _db = await openDatabase('my_db.db');
        return _db;
      }
    
    }
    

    enter image description here

    2 回复  |  直到 3 年前
        1
  •  1
  •   enzo    3 年前

    因为检查一下 _database

    static late Database _database;
    

    Database 这是一个不可为null的类型,因此它不能为null。

    只是想说明一下,这是一个警告,而不是一个错误。


    _数据库 可为空的变量

    static Database? _database;
    

    database 吸气剂as

    Future<Database> get database async {
      final Database? instance = _database;
      if (instance != null) return instance;
      instance = await _initDatabase();
      _database = instance;
      return instance;
    }
    
        2
  •  1
  •   Canada2000    3 年前

    这是因为当你定义 _database ,您专门将其定义为不可核:

    static late Database _database;
    

    如果它是可为空的,则应添加“?”

    static late Database? _database;