Будущее 'int' в int диаграмму из базы данных - PullRequest
0 голосов
/ 13 июля 2020

В настоящее время я пытаюсь преобразовать Future 'int' в int, но, оглядываясь вокруг, мне трудно понять, как это разрешить. Есть ли способ преобразовать данные базы данных в int?

Метод базы данных

Future<int> queryGetPlastic() async {
    Database db = await instance.database;
    //return Sqflite.firstIntValue(await db.rawQuery('SELECT plastic from $table '));
    return Sqflite.firstIntValue(await db.rawQuery('SELECT cast(plastic AS INTEGER) from $table order by _id DESC limit 1'));
  }

  Future<int> queryGetPaper() async {
    Database db = await instance.database;
    //return Sqflite.firstIntValue(await db.rawQuery('SELECT plastic from $table '));
    return Sqflite.firstIntValue(await db.rawQuery('SELECT cast(metal AS INTEGER) from $table order by _id DESC limit 1'));
  }

  Future<int> queryGetMetal() async {
    Database db = await instance.database;
    //return Sqflite.firstIntValue(await db.rawQuery('SELECT plastic from $table '));
    return Sqflite.firstIntValue(await db.rawQuery('SELECT cast(paper AS INTEGER) from $table order by _id DESC limit 1'));
  }

Итак, в основном с помощью методов я попробовал

Данные диаграммы с его виджетом

//since it's future int

      var data = [
        Waste('Metal', dbHelper.queryGetMetal(), Colors.red),
        Waste('Paper', dbHelper.queryGetPaper(), Colors.yellow),
        Waste('Plastic', dbHelper.queryGetPlastic(), Colors.blue),
      ];

      var series = [
        charts.Series(
          domainFn: (Waste clickData, _) => clickData.type,
          measureFn: (Waste clickData, _) => clickData.count,
          colorFn: (Waste clickData, _) => clickData.color,
          id: 'Clicks',
          data: data,
        ),
      ];

      var chart = charts.BarChart(
        series,
        animate: true,
      );

      var chartWidget = Padding(
        padding: EdgeInsets.all(32.0),
        child: SizedBox(
          height: 200.0,
          child: chart,
        ),
      );

: Container(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  Text(''),
                  Text(''),
                  Text('Welcome!'),
                  //Text('$genwaste'),
                  chartWidget,
........................................

Я думал, что если бы я использовал asyn c, он преобразовал бы его в int, но он вернется в будущее int

 void _plastic() async {
      int plastic = await dbHelper.queryGetPlastic();
    }

    _metal() async {
      int plastic = await dbHelper.queryGetMetal();
      return plastic;
    }

    _paper() async {
      int plastic = await dbHelper.queryGetPaper();
      return plastic;
    }

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Используйте .then для преобразования Future <int> в int

void _plastic() async {
       int plastic;
       await dbHelper.queryGetPlastic().then((value) {
           plastic = value
          });
    }
    

то же самое для других

См. Flutter do c: https://api.flutter.dev/flutter/dart-async/Future-class.html

0 голосов
/ 13 июля 2020

Объект Future - это результат отложенного вычисления, чтобы получить ваше значение, вам нужно использовать ключевое слово await.

var data = [
   Waste('Metal', await dbHelper.queryGetMetal(), Colors.red),
   Waste('Paper', await dbHelper.queryGetPaper(), Colors.yellow),
   Waste('Plastic', await dbHelper.queryGetPlastic(), Colors.blue),
];
...