Search code examples
flutterdartandroid-studiosqflite

Why does aliasing a package cause Android Studio to not be able to find the same function that it could find when the package was unaliased?


I took this function from https://suragch.medium.com/simple-sqflite-database-example-in-flutter-e56a5aaa3f91.

This works:

  import 'package:sqflite/sqflite.dart';

  Future<int> localDBQueryRowCount({required sqf.Database db, required String table}) async {
    final results = await db.rawQuery('SELECT COUNT(*) FROM $table');
    return Sqflite.firstIntValue(results) ?? 0;
  }

This doesn't work:

  import 'package:sqflite/sqflite.dart' as sqf;

  Future<int> localDBQueryRowCount({required sqf.Database db, required String table}) async {
    final results = await db.rawQuery('SELECT COUNT(*) FROM $table');
    return sqf.firstIntValue(results) ?? 0; //ERROR HERE ON "firstIntValue": The function 'firstIntValue' isn't defined.
  }

Why does aliasing a package cause Android Studio to not be able to find the same function that it could find when the package was unaliased?


Solution

  • Dart doesn't have "real" aliases. as just add a prefix to the library.

    That's why sqf.firstIntValue(results) doesn't work. Instead, using sqf as a prefix, makes it work: sqf.Sqflite.firstIntValue(results).

    Reference: https://dart.dev/language/libraries#specifying-a-library-prefix