Flutter & Export/Import CSV

January 1, 2020 Flutter 1 minute, 43 secondes

Développement Flutter avec import/export de données au format CSV.

Ne pas oublier d'ajouter le composant downloads_path_provider pour gérer l'export dans le répertoire Donwload de votre téléphone.

  downloads_path_provider: ^0.1.0

Code pour l'export

Etant donné que certaines données contiennent potentiellement le caractère ',' dans mon application, mon séparateur CSV est un ';'.

Voici le code pour gérer un export CSV depuis des données récupérées dans une base de données SQLite. Chaque ligne du fichier CSV est gére par une boucle forEach. Le composant DownloadsPathProvider permet de gérer la sauvegarde du fichier dans le répertoire Download du téléphone.

  _exportTableBouteille() async {
    var dbClient = await db;
    try {
      messages = "Export commencé.";

      var resultbt = await dbClient.query('bouteille');
      String result = "";
      resultbt.forEach((line) {
        print(line);
        result +=
            "${line['id']};${line['appellation']};${line['cepage']};${line['chateau']};";
        result +=
            "${line['classification']};${line['color']};${line['emplacement']};${line['nb']};";
        result +=
            "${line['note']};${line['offeredby']};${line['region']};${line['year']};${line['garde']}";
        result += "\r\n";
      });
      DownloadsPathProvider.downloadsDirectory.then((mypath) async {
        var dpath = join(mypath.path, "bouteille.csv");
        File df = new File(dpath);
        await df.writeAsString(result);
        messages = "Export terminé.";
      });
    } on Exception catch (e) {
      print(e.toString());
      messages += 'ERROR = ' + e.toString() + " #### ";
    }
  }

Code pour importer un fichier CSV

Ce code permet de lire un fichier CSV depuis votre répertoire Assets et d'insérer les données dans une base SQLite.

  _restoreTableBouteille() async {
    var dbClient = await db;
    final myData = await rootBundle.loadString('assets/csv/bouteille.csv');
    final list = myData.split("\r\n");
    list.forEach((o) {
      print(o);
      List row = o.split(';'); // split by comma

      if (row[0].toString() != "id" && row[0].toString() != "" && row[1].toString() != null) {
        BottleModel x = new BottleModel();
        x.id = int.parse(row[0], radix: 10);
        x.appellation = row[1];
        x.cepage = row[2];
        x.chateau = row[3];
        x.classification = row[4];
        x.color = row[5];
        x.emplacement = row[6];
        x.nb = int.parse(row[7], radix: 10);
        x.note = int.parse(row[8], radix: 10);
        x.offeredby = row[9];
        x.region = row[10];
        x.year = int.parse(row[11], radix: 10);

        dbClient.rawQuery(
            "insert into bouteille (appellation, cepage, chateau, classification, color, emplacement, nb, note, offeredby, region, year) " +
                "values ('${parseData(x.appellation)}', '${parseData(x.cepage)}', '${parseData(x.chateau)}', '${x.classification}', '${x.color}', '${x.emplacement}', ${x.nb}" +
                ", ${x.note}, '${x.offeredby}', '${x.region}', ${x.year});");
      }
    });
  }

Composants existants

Le composant csv permet de convertir des données au format CSV et de les lire.

    csv: ^4.0.3

alt