首页 > 解决方案 > 为什么我不能在charts_flutter中为饼图创建一个类字符串作为domainFn

问题描述

嗨,我正在尝试根据其示例制作 Piechart 但我改变了只有一件事,我改变了

final int year

final String year

但是对于domainFn我收到此错误:

{
  "resource": "/home/saeb/AndroidStudioProjects/charts/lib/main.dart",
  "owner": "dart",
  "code": "return_of_invalid_type_from_closure",
  "severity": 8,
  "message": "The return type 'String' isn't a 'int', as defined by anonymous closure.",
  "source": "dart",
  "startLineNumber": 36,
  "startColumn": 45,
  "endLineNumber": 36,
  "endColumn": 55,
  "tags": []
}

我的标签应该是字符串而不是 int,我该怎么做?

我的代码:

    import 'package:charts_flutter/flutter.dart' as charts;
import 'package:flutter/material.dart';

class PieOutsideLabelChart extends StatelessWidget {
  final List<charts.Series> seriesList;
  final bool animate;

  PieOutsideLabelChart(this.seriesList, {this.animate});

  factory PieOutsideLabelChart.withSampleData() {
    return new PieOutsideLabelChart(
      _createSampleData(),
      animate: false,
    );
  }
  @override
  Widget build(BuildContext context) {
    return new charts.PieChart(seriesList,
        animate: animate,
        defaultRenderer: new charts.ArcRendererConfig(arcRendererDecorators: [
          new charts.ArcLabelDecorator(
              labelPosition: charts.ArcLabelPosition.outside)
        ]));
  }

  static List<charts.Series<LinearSales, int>> _createSampleData() {
    final data = [
      new LinearSales('a long text', 100),
      new LinearSales('even longer text', 75),
      new LinearSales('i am long text', 25),
      new LinearSales('the longest text ever', 5),
    ];
    return [
      new charts.Series<LinearSales, int>(
        id: 'Sales',
        domainFn: (LinearSales sales, _) => sales.year,
        measureFn: (LinearSales sales, _) => sales.sales,
        data: data,
        labelAccessorFn: (LinearSales row, _) => '${row.year}: ${row.sales}',
      )
    ];
  }
}
class LinearSales {
  final String year;
  final int sales;

  LinearSales(this.year, this.sales);
}
main(List<String> args) {
  runApp(MaterialApp(
    title: 'charts',
    home: new Scaffold(
      appBar: new AppBar(title: new Text("نمودار فلان"),),
      body:new ListView(children: <Widget>[
          new Card
          (child: PieOutsideLabelChart(PieOutsideLabelChart._createSampleData()),)
        //   ]
        //  ),
      ]
    )
  )
   )
    );
}

标签: chartsflutter

解决方案


这是语法问题。我的坏:D

我应该将我的 charts.Series 更改为charts.Series<LinearSales, **String**>>fromcharts.Series<LinearSales, **int**>>

此代码有效:

        import 'package:charts_flutter/flutter.dart' as charts;
import 'package:flutter/material.dart';

class PieOutsideLabelChart extends StatelessWidget {
  final List<charts.Series> seriesList;
  final bool animate;

  PieOutsideLabelChart(this.seriesList, {this.animate});

  factory PieOutsideLabelChart.withSampleData() {
    return new PieOutsideLabelChart(
      _createSampleData(),
      animate: false,
    );
  }
  @override
  Widget build(BuildContext context) {
    return new charts.PieChart(seriesList,
        animate: animate,
        defaultRenderer: new charts.ArcRendererConfig(arcRendererDecorators: [
          new charts.ArcLabelDecorator(
              labelPosition: charts.ArcLabelPosition.outside)
        ]));
  }

  static List<charts.Series<LinearSales, String>> _createSampleData() {
    final data = [
      new LinearSales('a long text', 100),
      new LinearSales('even longer text', 75),
      new LinearSales('i am long text', 25),
      new LinearSales('the longest text ever', 5),
    ];
    return [
      new charts.Series<LinearSales, String>(
        id: 'Sales',
        domainFn: (LinearSales sales, _) => sales.year,
        measureFn: (LinearSales sales, _) => sales.sales,
        data: data,
        labelAccessorFn: (LinearSales row, _) => '${row.year}',
      )
    ];
  }
}
class LinearSales {
  final String year;
  final int sales;

  LinearSales(this.year, this.sales);
}
main(List<String> args) {
  runApp(MaterialApp(
    title: 'charts',
    home: new Scaffold(
      appBar: new AppBar(title: new Text("نمودار فلان"),),
      body: PieOutsideLabelChart(PieOutsideLabelChart._createSampleData()),)

  )
   );

}

推荐阅读