'String'类型不是'num'类型的子类型

时间:2020-11-08 07:22:41

标签: flutter dart

嗨,我最近正尝试使用synchfusion包来工作我的Barhcart,当我使用barchart时,我的子类型似乎不是num,在这里我不认为我已将列表声明为num,chartData编号除外

import 'dart:ffi';

import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';

class barchart_new extends StatefulWidget {
  @override
  _barchart_newState createState() => _barchart_newState();
}

class _barchart_newState extends State<barchart_new> {
  final List<SalesData> chartData = [
    SalesData('Driving', 35, 23),
    SalesData('Office work', 38, 49),
    SalesData('meeting', 34, 12),
    SalesData('onsite work', 52, 33),
    SalesData('seminar', 40, 30)
  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
            child: Container(
                child: SfCartesianChart(series: <ChartSeries>[
      BarSeries<SalesData, String>(
          dataSource: chartData,
          xValueMapper: (SalesData year, _) => year.year,
          yValueMapper: (SalesData sales, _) => sales.sales,
          borderRadius: BorderRadius.all(Radius.circular(15)))
    ]))));
  }
}

class SalesData {
  SalesData(this.year, this.sales, this.colors);
  final String year;
  final double sales;
  final double colors;
}

非常感谢有人可以帮助我纠正此问题。

2 个答案:

答案 0 :(得分:1)

对于收到此错误并且实际上想要 X 轴上的字符串值的其他任何人,您可以尝试将 primaryXAxis 指定为 CategoryAxis:

@override
  Widget build(BuildContext context) {
    // For horizontal bar charts, set the [vertical] flag to false.
    return new SfCartesianChart(
      series: _createSeriesFromData(),
      primaryXAxis: CategoryAxis(
        majorGridLines: MajorGridLines(width: 0),
      ),
      primaryYAxis: NumericAxis(
          majorGridLines: MajorGridLines(width: 0),
          numberFormat: NumberFormat.compact()),
    );
  }

答案 1 :(得分:0)

// import 'dart:ffi'; delete this line. you are probebly not using ffi.

import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';

class barchart_new extends StatefulWidget {
  @override
  _barchart_newState createState() => _barchart_newState();
}

class _barchart_newState extends State<barchart_new> {
  final List<SalesData> chartData = [
    SalesData('Driving', 35, 23),
    SalesData('Office work', 38, 49),
    SalesData('meeting', 34, 12),
    SalesData('onsite work', 52, 33),
    SalesData('seminar', 40, 30)
  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
            child: Container(
                child: SfCartesianChart(series: <ChartSeries>[
      BarSeries<SalesData, String>(
          dataSource: chartData,
          // your year is a string. convert it using the `int.tryParse` function
          xValueMapper: (SalesData year, _) => int.tryParse(year.year),
          yValueMapper: (SalesData sales, _) => sales.sales,
          borderRadius: BorderRadius.all(Radius.circular(15)))
    ]))));
  }
}

class SalesData {
  SalesData(this.year, this.sales, this.colors);
  final String year;
  final double sales;
  final double colors;
}