【问题标题】:Flutter type 'Future<List<dynamic>>' is not a subtype of type 'List<dynamic>' in type castFlutter 类型“Future<List<dynamic>>”不是类型转换中“List<dynamic>”类型的子类型
【发布时间】:2021-10-20 07:12:32
【问题描述】:

我收到了这个错误:

类型“Future”不是类型转换中“List”类型的子类型

无法从未来投射列表

最终名单 caMois = List.from(BddAMKGraphCA().getDataGraphCA('2021') as List).toList();

我使用包mysql1而不是PHP json来绑定数据:有效,我可以看到结果

我该如何解决这个错误?

import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';
import 'bdd_graph_annee.dart';
    
class SimpleBarChart extends StatelessWidget {
final String anneeCA;
    
SimpleBarChart({Key? key, required this.anneeCA}) : super(key: key);
    
final List<CaMoisData> caMois =
List<CaMoisData>.from(BddAMKGraphCA().getDataGraphCA('2021') as List).toList();
    
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(title: const Text('CA PAR MOIS')),
body: Center(
child: Container(
child: SfCartesianChart(
title: ChartTitle(text: 'CA DE 2021'),
//legend: Legend(isVisible: true),
series: <ChartSeries>[
BarSeries<CaMoisData, String>(
animationDuration: 1500,
dataSource: caMois,
xValueMapper: (CaMoisData monCa, _) => monCa.mois,
yValueMapper: (CaMoisData monCa, _) => monCa.ca,
dataLabelSettings: DataLabelSettings(isVisible: true)),
],
primaryXAxis: CategoryAxis(),
primaryYAxis: NumericAxis(
edgeLabelPlacement: EdgeLabelPlacement.shift,
//title: AxisTitle(text: 'CA DE 2021'),
)))));
}
}
    
import 'constant/bdd_constant.dart';
import 'package:mysql1/mysql1.dart';
    
// la classe de données
class CaMoisData {
final String mois;
final double ca;
CaMoisData(this.mois, this.ca); //, this.y2);
}
    
class BddAMKGraphCA {
Future<List<dynamic>> getDataGraphCA(String anneeCA) async {
final conn = await MySqlConnection.connect(ConnectionSettings(
host: ConstantBdd.host,
port: ConstantBdd.port,
user: ConstantBdd.user,
password: ConstantBdd.password,
db: ConstantBdd.db,
));
    
var sql = "SELECT ";
sql += "'Janv',replace(replace(format(ifnull(sum(case when DATE_FORMAT(cmd_date,'%m/%Y')='01/" +anneeCA +"' then cmd_ttc else 0 end),'0'), 2), ',',' '),'.',',') as 'tot_01',";
sql += "'Févr',replace(replace(format(ifnull(sum(case when DATE_FORMAT(cmd_date,'%m/%Y')='02/" +anneeCA +"' then cmd_ttc else 0 end),'0'), 2), ',',' '),'.',',') as 'tot_02',";
sql += "'Mars',replace(replace(format(ifnull(sum(case when DATE_FORMAT(cmd_date,'%m/%Y')='03/" +anneeCA +"' then cmd_ttc else 0 end),'0'), 2), ',',' '),'.',',') as 'tot_03',";
sql += "'Avril',replace(replace(format(ifnull(sum(case when DATE_FORMAT(cmd_date,'%m/%Y')='04/" +anneeCA +"' then cmd_ttc else 0 end),'0'), 2), ',',' '),'.',',') as 'tot_04',";
sql += "'Mai',replace(replace(format(ifnull(sum(case when DATE_FORMAT(cmd_date,'%m/%Y')='05/" +anneeCA +"' then cmd_ttc else 0 end),'0'), 2), ',',' '),'.',',') as 'tot_05',";
sql += "FROM cmde ";
sql += "WHERE cmd_date between '" +anneeCA +"-01-01' and '" +anneeCA +"-12-31' order by cmd_date desc";
var results = await conn.query(sql);
await conn.close();
//print(results.toList());
return results.toList();
}
}

【问题讨论】:

    标签: mysql list flutter


    【解决方案1】:

    那是因为getDataGraphCA()返回了一个Future,意味着该值不会立即返回,你必须:

    1. 等待 (await keyword) 然后setState() 更新用户界面,
    2. build 方法中使用FutureBuilder

    【讨论】:

      【解决方案2】:

      您需要在 Future 调用之前添加 await 关键字:

      final List<CaMoisData> caMois =
      List<CaMoisData>.from(BddAMKGraphCA().getDataGraphCA('2021') as List).toList();
      

      改成

      final List<CaMoisData> caMois = await
      List<CaMoisData>.from(BddAMKGraphCA().getDataGraphCA('2021') as List).toList();
      

      【讨论】:

        【解决方案3】:

        我收到这条消息等待

        【讨论】:

          【解决方案4】:

          我找到了解决方案: 1- 创建一个 FutureBuilder 小部件来绑定来自 Mysql 的结果

          2- 创建一个函数将数据绑定到列表

          final List<CaMoisData> caMois = [];
          
          @override
          Widget build(BuildContext context) {
          return Scaffold(
          appBar: AppBar(
          title: Text("CA PAR MOIS"),
          ),
          body: new Center(
          child: FutureBuilder(
          future: BddAMKGraphCA().getDataGraphCA('2021'),
          builder: (context, AsyncSnapshot<List<dynamic>> snapshot) {
          if (snapshot.hasData) {
          return ListView.builder(
          itemCount: snapshot.data!.length, // mettre le ! pour tester le null
          itemBuilder: (context, int currentIndex) {insertData(snapshot.data);
          return affGraphCA(context);
          });
          } else if (snapshot.hasError) {
          return Text('${snapshot.error}');
          }
          //return  a circular progress indicator.
          return new CircularProgressIndicator();
          })));
          }
          
          insertData(dataCA) {
          String moistemp; // = dataCA[0]['m01'].toString();
          double catemp; //= double.parse(dataCA[0]['tot_01'].toString());
          
          for (int i = 1; i < 13; i++) {
          moistemp = dataCA[0]['m' + i.toString().padLeft(2, '0')].toString();
          catemp = double.parse(
          dataCA[0]['tot_' + i.toString().padLeft(2, '0')].toString());
          caMois.add(CaMoisData(moistemp, catemp));
          }
          }
          
          Widget affGraphCA(BuildContext context) {
          return Container(
          child: SfCartesianChart(
          title: ChartTitle(text: 'CA DE 2021'),
          //legend: Legend(isVisible: true),
          series: <ChartSeries>[
          BarSeries<CaMoisData, String>(
          animationDuration: 1500,
          dataSource: caMois,
          xValueMapper: (CaMoisData monCa, _) => monCa.mois,
          yValueMapper: (CaMoisData monCa, _) => monCa.ca,
          dataLabelSettings: DataLabelSettings(isVisible: true)),
          ],
          primaryXAxis: CategoryAxis(),
          primaryYAxis: NumericAxis(
          edgeLabelPlacement: EdgeLabelPlacement.shift,
          //title: AxisTitle(text: 'CA DE 2021'),
          )));
          }
          

          【讨论】:

            猜你喜欢
            • 2019-12-31
            • 2020-09-20
            • 2021-12-02
            • 1970-01-01
            • 1970-01-01
            • 2021-08-13
            • 2020-10-21
            • 2020-09-10
            • 1970-01-01
            相关资源
            最近更新 更多