flutter 当defaultRender设置为非常基本的ArcRendererConfig()时,抖动GoogleChart饼图不呈现

hfwmuf9z  于 2022-12-14  发布在  Flutter
关注(0)|答案(4)|浏览(163)

图表按预期显示带有以下PieChart小工具。

class ABCPieChart extends StatefulWidget {
  @override
  _ABCPieChartState createState() => _ABCPieChartState();
}

class _TABCPieChartState extends State<ABCPieChart> {
  List<charts.Series<ChartEntity, String>> _entities = List();

  _initData() {
    var values = [
      ChartEntity("Food", 30, Colors.greenAccent),
      ChartEntity("Clothing", 30, Colors.cyan),
      ChartEntity("Fashion", 20, Colors.red),
      ChartEntity("Gadgets", 20, Colors.blue),
    ];

    _entities.add(charts.Series(
        data: values,
        domainFn: (ChartEntity entity, _) => entity.title,
        measureFn: (ChartEntity entity, _) => entity.percentage,
        colorFn: (ChartEntity entity, _) =>
            charts.ColorUtil.fromDartColor(entity.color),
        id: "random chart",
        labelAccessorFn: (ChartEntity entity, _) => "${entity.percentage}"));
  }

  @override
  void initState() {
    super.initState();
    _entities = List<charts.Series<ChartEntity, String>>();
    _initData();
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 400.0,
      width: 400,
      child: charts.PieChart(
        _entities,
        animate: true,
        animationDuration: Duration(milliseconds: 500),
      ),
    );
  }
}


但是,当我尝试将其自定义为甜甜圈形状时,即使添加了一个非常基本的defaultRenderer图表也不再呈现在屏幕上。

class ABCPieChart extends StatefulWidget {
  @override
  _ABCPieChartState createState() => _ABCPieChartState();
}

class _TABCPieChartState extends State<ABCPieChart> {
  List<charts.Series<ChartEntity, String>> _entities = List();

  _initData() {
    var values = [
      ChartEntity("Food", 30, Colors.greenAccent),
      ChartEntity("Clothing", 30, Colors.cyan),
      ChartEntity("Fashion", 20, Colors.red),
      ChartEntity("Gadgets", 20, Colors.blue),
    ];

    _entities.add(charts.Series(
        data: values,
        domainFn: (ChartEntity entity, _) => entity.title,
        measureFn: (ChartEntity entity, _) => entity.percentage,
        colorFn: (ChartEntity entity, _) =>
            charts.ColorUtil.fromDartColor(entity.color),
        id: "random chart",
        labelAccessorFn: (ChartEntity entity, _) => "${entity.percentage}"));
  }

  @override
  void initState() {
    super.initState();
    _entities = List<charts.Series<ChartEntity, String>>();
    _initData();
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 400.0,
      width: 400,
      child: charts.PieChart(
        _entities,
        animate: true,
        animationDuration: Duration(milliseconds: 500),
        defaultRenderer: charts.ArcRendererConfig(),

      ),
    );
  }
}

即使当我从谷歌示例here复制和粘贴代码,它不呈现.(既不是在hotreload,也不是在Hotrestart,也不是Coldrestart)

此问题仅适用于PieChart and ArcRendererConfig.BarChartBarRendererConfig配合使用时正常

我想这可能是安装问题,或者可能错过了一个非常小但至关重要的东西,有没有人知道可能出了什么问题?
我在Github here中交叉发布了这个问题,希望这个问题能被GitHub和SO中任何不相干的观众看到(我就是其中之一)。

flvlnr44

flvlnr441#

必须添加PieChart的类型参数。
更新:-说明
因此在OP的情况下,使用child: charts.PieChart<String>(代替child: charts.PieChart(
我们使用<String>作为类型参数,因为图表的系列是charts.Series<ChartEntity, String>
如果序列是charts.Series<ChartEntity, int>,则应使用<int>作为类型参数

wxclj1h5

wxclj1h52#

在我的例子中,问题是相同的,但通过在defaultRenderer中放置id解决了问题,例如:

customRendererId: 'novoId'
yptwkmov

yptwkmov3#

Here a solution possibly
我得到了(在我的情况下是一个条形图):

defaultRenderer: new charts.BarRendererConfig(
    fillPattern: charts.FillPatternType.solid,
    //customRendererId: "id",
    barRendererDecorator: charts.BarLabelDecorator(
        labelPosition: charts.BarLabelPosition.auto,
        labelAnchor: charts.BarLabelAnchor.middle),
    cornerStrategy: const charts.ConstCornerStrategy(10),
  ),
vltsax25

vltsax254#

只需删除defaultRenderer,它就可以工作了

相关问题