web-dev-qa-db-ja.com

メソッドjoinが定義されていないflutter sqflite

Androidスタジオでは、次の例に従って2つの問題が発生します。 https://pub.dartlang.org/packages/sqflite

1)メソッドjoinがクラスuploadIntoDbに定義されていません

2)未定義のクラスDeepCollectionEquality

私のとてもシンプルなコードがあります:

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:はい、依存関係を含めました:sqflite: ^1.1.0

10
Itoun

インポートパスライブラリ/パッケージライブラリasjoinは、このライブラリの操作パス用の関数の1つです。

したがって、それは単にそれぞれのインポートを追加するだけの問題であり、最初の問題は解決されるべきです。

import 'package:path/path.Dart';

2番目は同様の追加です

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