Bonjour,
Je sais que je ne suis pas trop au bon endroit, mais je sais pas trop ou poster
(peut être créer un nouveau Forum dédié à ce langage ?)

Je débute en flutter, et j'ai du mal avec la base de donnée sqlite.

Jusqu’à présent tout allait bien, flutter est très facile a prendre en main, tu te demande comment ca marche du premier coup, mais oui, ca marche !
Mais la, je coince:

J'ai crée un modèle de base de donnée classique dans mon fichier database.dart
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import 'dart:async';
import 'dart:io' as io;
 
import 'package:path/path.dart';
import 'package:quick_rules/user_class.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
 
import 'expfull.dart';
 
class DatabaseHelper {
  static final _databaseName = "quickrules.db";
  static final _databaseVersion = 1;
 
  static final tableJeux = 'jeux';
  static final tableAideJeux = 'aide_jeux';
 
  static final columnId = '_id';
  static final columnName = 'name';
  static final columnFKJeu = 'fkjeux';
  static final columnImage = 'image';
  static final columnFavoris = 'favoris';
 
static final DatabaseHelper _instance = new DatabaseHelper.internal();
  factory DatabaseHelper() => _instance;
 
  static Database _db;
 
  Future<Database> get db async {
    if (_db != null) return _db;
    _db = await initDb();
    return _db;
  }
 
  DatabaseHelper.internal();
 
  initDb() async {
    io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, _databaseName);
    var theDb = await openDatabase(path, version: _databaseVersion, onCreate: _onCreate);
    return theDb;
  }
  // SQL code to create the database table
  Future _onCreate(Database db, int version) async {
    await createSkeleton(db);
    await remplirDatabase(db);
    return true;
  }
 
  Future createSkeleton(Database db) async {
    await db.execute('''
        CREATE TABLE $tableJeux($columnId INTEGER PRIMARY KEY, $columnName TEXT, $columnImage TEXT, $columnFavoris INTEGER, $columnStatus INTEGER, $columnExtension INTEGER)
    ''');
    await db.execute('''
        CREATE TABLE $tableAideJeux($columnId INTEGER PRIMARY KEY AUTOINCREMENT, $columnFKJeu INTEGER, $columnDoc TEXT, $columnOrder INTEGER)
    ''');
    ...
  Future insertAideJeux(int idjeu, String doc, int ordre) async {
    insertAideGenericDoc(idjeu, doc, ordre, tableAideJeux);
  }
  Future insertAideGenericDoc(int idjeu, String doc, int ordre, String tablename) async {
    var dbClient = await db;
    await dbClient.execute('''
        INSERT INTO $tablename($columnFKJeu,$columnDoc,$columnOrder) VALUES ($idjeu, '$doc', $ordre)
    ''');
  }
Mon but est de créer une structure de donnée, puis, de la remplir

Le remplissage est dans un autre fichier expfull.dart (je suis dba oracle, c'est pour ça le nom )

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import 'package:sqflite/sqflite.dart';
 
Future<void> remplirDatabase(Database db) async{
  await insertDiceForge(db);
  await insertDiceForgeRebellion(db);
 
  return null;
}
 
Future<void> insertDiceForge(db) async {
  db.insertJeu(1, 'Dice Forge',0);
  db.insertAideJeux(1, 'Une seul action par tour', 1);
  db.insertAideJeux(1, 'Pour 2 ambres rouges, **vous pouvez rejouer une action**', 2);
...

A un moment, j'avais plein d'erreur ou je pense que le squelette avait pas le temps de se créer avant d’insérer les données,
Maintenant, j'ai une erreur d'instance.

Je sais plus trop comment mettre les async, et await, et comment séparer les fichiers: 1 pour la structure et les fonctions, et 1*pour le remplissage massif des données.

Il y aura que du select, pas de mise a jour des données.
Auriez vous un exemple complet de gestion de bdd sqlite coupé en 2 ?
ou me dire ou je coince ?

Voici un extrait de ma log d'erreur:
I/flutter ( 4438): error NoSuchMethodError: Class 'SqfliteDatabaseBase' has no instance method 'insertJeu'.
I/flutter ( 4438): Receiver: Instance of 'SqfliteDatabaseBase'
I/flutter ( 4438): Tried calling: insertJeu(1, "Dice Forge", 0) during open, closing...
E/flutter ( 4438): [ERROR:flutter/shell/common/shell.cc(199)] Dart Error: Unhandled exception:
E/flutter ( 4438): NoSuchMethodError: Class 'SqfliteDatabaseBase' has no instance method 'insertJeu'.
E/flutter ( 4438): Receiver: Instance of 'SqfliteDatabaseBase'
E/flutter ( 4438): Tried calling: insertJeu(1, "Dice Forge", 0)
E/flutter ( 4438): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
E/flutter ( 4438): #1 insertDiceForge (package:quick_rules/database/expfull.dart:11:6)
E/flutter ( 4438): #2 remplirDatabase (package:quick_rules/database/expfull.dart:4:9)
E/flutter ( 4438): #3 DatabaseHelper._onCreate (package:quick_rules/database/database.dart:59:11)
E/flutter ( 4438): <asynchronous suspension>
E/flutter ( 4438): #4 SqfliteDatabaseMixin.doOpen.<anonymous closure> (package:sqflite/src/database_mixin.dart:684:29)
E/flutter ( 4438): <asynchronous suspension>
E/flutter ( 4438): #5 SqfliteDatabaseMixin._runTransaction (package:sqflite/src/database_mixin.dart:456:28)
E/flutter ( 4438): <asynchronous suspension>
E/flutter ( 4438): #6 SqfliteDatabaseMixin.transaction.<anonymous closure> (package:sqflite/src/database_mixin.dart:473:14)
E/flutter ( 4438): #7 SqfliteDatabaseMixin.txnSynchronized (package:sqflite/src/database_mixin.dart:292:26)
E/flutter ( 4438): #8 SqfliteDatabaseMixin.txnWriteSynchronized (package:sqflite/src/database_mixin.dart:325:7)
E/flutter ( 4438): #9 SqfliteDatabaseMixin.transaction (package:sqflite/src/database_mixin.dart:472:12)
E/flutter ( 4438): #10 SqfliteDatabaseMixin.doOpen (package:sqflite/src/database_mixin.dart:674:15)
E/flutter ( 4438): <asynchronous suspension>
E/flutter ( 4438): #11 SqfliteDatabaseOpenHelper.openDatabase (package:sqflite/src/database.dart:46:22)
E/flutter ( 4438): #12 SqfliteDatabaseFactoryMixin.openDatabase.<anonymous closure> (package:sqflite/src/factory_mixin.dart:103:43)
E/flutter ( 4438): <asynchronous suspension>
E/flutter ( 4438): #13 ReentrantLock.synchronized.<anonymous closure>.<anonymous closure> (package:synchronized/src/reentrant_lock.dart:35:24)
E/flutter ( 4438): #14 _rootRun (dart:async/zone.dart:1126:13)
E/flutter ( 4438): #15 _CustomZone.run (dart:async/zone.dart:1023:19)
E/flutter ( 4438): #16 _runZoned (dart:async/zone.dart:1518:10)
E/flutter ( 4438): #17 runZoned (dart:async/zone.dart:1465:12)
E/flutter ( 4438): #18 ReentrantLock.synchronized.<anonymous closure> (package:synchronized/src/reentrant_lock.dart:34:24)
E/flutter ( 4438): #19 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:32:26)
E/flutter ( 4438): <asynchronous suspension>
E/flutter ( 4438): #20 ReentrantLock.synchronized (package:synchronized/src/reentrant_lock.dart:30:17)
E/flutter ( 4438): #21 SqfliteDatabaseFactoryMixin.openDatabase (package:sqflite/src/factory_mixin.dart:69:17)
E/flutter ( 4438): #22 openDatabase (package:sqflite/sqflite.dart:154:26)
E/flutter ( 4438): #23 DatabaseHelper.initDb (package:quick_rules/database/database.dart:53:23)
E/flutter ( 4438): <asynchronous suspension>
E/flutter ( 4438): #24 DatabaseHelper.db (package:quick_rules/database/database.dart:44:17)
E/flutter ( 4438): #25 DatabaseHelper.getFaqDoc (package:quick_rules/database/database.dart:204:26)
E/flutter ( 4438): #26 DatabaseHelper.getFaqJeux (package:quick_rules/database/database.dart:168:12)
E/flutter ( 4438): #27 _MySecondPageState.buildFaq (package:quick_rules/secondPage.dart:235:24)
E/flutter ( 4438): #28 _MySecondPageState.build (package:quick_rules/secondPage.dart:32:11)
E/flutter ( 4438): #29 StatefulElement.build (package:flutter/src/widgets/framework.dart:4334:27)
E/flutter ( 4438): #30 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4223:15)
E/flutter ( 4438): #31 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
E/flutter ( 4438): #32 StatefulElement.update (package:flutter/src/widgets/framework.dart:4413:5)
E/flutter ( 4438): #33 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
E/flutter ( 4438): #34 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5452:14)
E/flutter ( 4438): #35 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
E/flutter ( 4438): #36 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
E/flutter ( 4438): #37 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
E/flutter ( 4438): #38 StatelessElement.update (package:flutter/src/widgets/framework.dart:4298:5)
E/flutter ( 4438): #39 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
E/flutter ( 4438): #40 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5452:14)
E/flutter ( 4438): #41 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
E/flutter ( 4438): #42 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:54