the method join isn't defined flutter sqflite

Itoun picture Itoun · Apr 26, 2019 · Viewed 8.4k times · Source

Android studio is giving me 2 problems according to the following example: https://pub.dartlang.org/packages/sqflite

1) The method join isn't defined for the class uploadIntoDb

2) Undefined class DeepCollectionEquality

There is my so simple code :

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:sqflite/sqflite.dart';

class UploadPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState(){
    return new UploadPageState();
  }
}

class UploadPageState extends State<UploadPage>
    with SingleTickerProviderStateMixin {
  @override
  void initState(){
    super.initState();
  }

  @override
  Widget build(BuildContext context) {


    return null;
  }

  Future<void> uploadIntoDb(String valueToUpload) async{
    // Get a location using getDatabasesPath
    var databasesPath = await getDatabasesPath();
    String path = join(databasesPath, 'poa.db');//FIRST PROBLEM


// open the database
    Database database = await openDatabase(path, version: 1,
        onCreate: (Database db, int version) async {
          // When creating the db, create the table
          await db.execute(
              'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
        });

// Insert some records in a transaction
    await database.transaction((txn) async {
      int id1 = await txn.rawInsert(
          'INSERT INTO Test(name, value, num) VALUES("some name", 1234, 456.789)');
      print('inserted1: $id1');
      int id2 = await txn.rawInsert(
          'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
          ['another name', 12345678, 3.1416]);
      print('inserted2: $id2');
    });

// Update some record
    int count = await database.rawUpdate(
        'UPDATE Test SET name = ?, VALUE = ? WHERE name = ?',
        ['updated name', '9876', 'some name']);
    print('updated: $count');

// Get the records
    List<Map> list = await database.rawQuery('SELECT * FROM Test');
    List<Map> expectedList = [
      {'name': 'updated name', 'id': 1, 'value': 9876, 'num': 456.789},
      {'name': 'another name', 'id': 2, 'value': 12345678, 'num': 3.1416}
    ];
    print(list);
    print(expectedList);
    assert(const DeepCollectionEquality().equals(list, expectedList));//SECOND PROBLEM

// Count the records
    count = Sqflite
        .firstIntValue(await database.rawQuery('SELECT COUNT(*) FROM Test'));
    assert(count == 2);

// Delete a record
    count = await database
        .rawDelete('DELETE FROM Test WHERE name = ?', ['another name']);
    assert(count == 1);

// Close the database
    await database.close();
  }
}

PS: Yes I included the dependency: sqflite: ^1.1.0

Answer

MikeT picture MikeT · Apr 26, 2019

I believe that you need to import the path library/package library as join is one of the functions of this library that is for manipulation paths.

So it should simply be a matter of adding the respective import and the first problem should be resolved.

import 'package:path/path.dart';

The second is similar add

import 'package:collection/collection.dart';