如何将Future数据转换为双精度列表?

时间:2019-08-21 23:27:58

标签: sqlite flutter dart

我正在尝试读取记录以创建仪表板,但问题是我不知道如何从数据库中读取数据,请有人帮助我,这是代码< / p>

 Future dataline() async {

        final dao1 = Provider.of<CommandeDao>(context);

        List<GeneratorCommandeResult> liste = await dao1.GeneratorCommande();
        return liste;
  }

  Material mychart1Items(String title, String priceVal,String subtitle) {
    Future liste  = dataline() ;


    return Material(
      color: Colors.white,
      elevation: 14.0,
      borderRadius: BorderRadius.circular(24.0),
      shadowColor: Color(0x802196F3),
      child: Center(
        child: Padding(
          padding: EdgeInsets.all(8.0),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[

                  Padding(
                    padding: EdgeInsets.all(1.0),
                    child: new Sparkline(
                      data: liste,
                      lineColor: Color(0xffff6101),
                      pointsMode: PointsMode.all,
                      pointSize: 8.0,
                    ),
                  ),

                ],
              ),
            ],
          ),
        ),
      ),
    );
  }

2 个答案:

答案 0 :(得分:0)

您应该将FutureBuilder小部件与dataline函数之类的异步操作配合使用。

示例

FutureBuilder<double>(
          future: liste,

          builder: (BuildContext context, AsyncSnapshot<double> snapshot) {
            return snapshot.hasData?Padding(
                    padding: EdgeInsets.all(1.0),
                    child: new Sparkline(
                      data: snapshot.data,
                      lineColor: Color(0xffff6101),
                      pointsMode: PointsMode.all,
                      pointSize: 8.0,
                    ),
                  ):CircularProgressIndicator();
                  //the CircularProgressIndicator
                 //is used to indicate the data hasn't come yet
          },
        ),

在此列的children参数中添加此FutureBuilder。

注意:在sparkLine小部件中,data参数接收的是snapshot.data而不是您声明的liste。因为您的列表类型为Future类型,其中保存的数据类型为double,而快照具有实际数据,在这种情况下,该数据为double列表。 希望对您有帮助

答案 1 :(得分:0)

假定您有一个包含列idnameage的狗表,然后以List<Map<String, dynamic>>的形式从表中检索所有狗的行,将它们映射回Dog对象,如下所示:

// A method that retrieves all the dogs from the dogs table.
Future<List<Dog>> dogs() async {
  // Get a reference to the database.
  final Database db = await database;

  // Query the table for all The Dogs.
  final List<Map<String, dynamic>> maps = await db.query('dogs');

  // Convert the List<Map<String, dynamic> into a List<Dog>.
  return List.generate(maps.length, (i) {
    return Dog(
      id: maps[i]['id'],
      name: maps[i]['name'],
      age: maps[i]['age'],
    );
  });
}

注意:代码示例来自flutter文档。

可以类似地映射包含double值的列表。