web-dev-qa-db-fra.com

la méthode join n'est pas définie flutter sqflite

Le studio Android me pose 2 problèmes selon l'exemple suivant: https://pub.dartlang.org/packages/sqflite

1) La méthode join n'est pas définie pour la classe uploadIntoDb

2) Classe non définie DeepCollectionEquality

Il y a mon code si simple:

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: Oui j'ai inclus la dépendance: sqflite: ^1.1.0

10
Itoun

Je crois que vous devez importer le bibliothèque/package de chemin bibliothèque comme join est l'une des fonctions de cette bibliothèque qui est pour les chemins de manipulation.

Il devrait donc simplement s'agir d'ajouter l'importation respective et le premier problème devrait être résolu.

import 'package:path/path.Dart';

Le second est similaire

import 'package:collection/collection.Dart';
19
MikeT