charts - 为什么我不能在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()),)
// ]
// ),
]
)
)
)
);
}
解决方案
这是语法问题。我的坏: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()),)
)
);
}
推荐阅读
- android - Android Studio:我可以使用 android 的 DeviceControlActivity.java 类还是它已经太旧了?我可以使用其他 BLE 类吗?
- httprequest - 如何获取非 Spring Boot 应用程序的 http_request 指标
- mysql - 如何使用产品包选择产品数量?
- javascript - 将 ng-model Angular 转换为 Javascript - jQuery
- javascript - 在猫鼬中按日期排序对象不起作用
- javascript - 图像滑块淡入动画
- angular - 如何在 Angular 材料表中的打字稿中使用索引值?
- java - Java - Dropwizard + Hibernate - 使用 namedQuery 时出现编译器错误
- python - 使用 Plotly 从点云生成表面网格
- git - 每当我在 Vim 中写入文件时,如何执行 git commit?