Навигация от и до кольцевой диаграммы становится пустой, используя charts_flutter во флаттере - PullRequest
0 голосов
/ 11 октября 2019

Я использую кольцевую диаграмму, используя пакет charts_flutter V0.8.1 . Но когда я перехожу к следующему экрану и возвращаюсь к предыдущей странице (Donut page), диаграмма становится пустой. Сценарий: Как только я вижу следующий экран, я нажимаю кнопку «Назад». К вашему сведению, я использую образец кода Donut. https://google.github.io/charts/flutter/example/pie_charts/donut

import 'package:charts_flutter/flutter.dart' as charts;
import 'package:flutter/material.dart';
void main() {
  runApp(MaterialApp(
      debugShowCheckedModeBanner: false,
      home:  new DonutPieChart()
      ));
}
class DonutPieChart extends StatefulWidget {
  @override
  _DonutPieChartState createState() => new _DonutPieChartState();
}

class _DonutPieChartState extends State<DonutPieChart> {
  List<charts.Series<Task, String>> _seriesPieData;

  @override
  void initState() {
    super.initState();
    _seriesPieData = List<charts.Series<Task, String>>();
    _generateData();
  }

  _generateData() {
    var piedata = [
      new Task('T01', 35, Color(0xff3366cc)),
      new Task('T02', 8, Color(0xff990099)),
      new Task('T03', 10, Color(0xff109618)),
    ];

    _seriesPieData.add(
      charts.Series(
        domainFn: (Task task, _) => task.task,
        measureFn: (Task task, _) => task.taskvalue,
        colorFn: (Task task, _) =>
            charts.ColorUtil.fromDartColor(task.colorval),
        id: 'Sample',
        data: piedata,
        labelAccessorFn: (Task row, _) => '${row.taskvalue}',
      ),
    );
  }

  @override
  Widget build(BuildContext _context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Donut chart'),
        ),
        body: GestureDetector(
          onTap: () {
            Navigator.of(_context).push(new MaterialPageRoute<bool>(
                builder: (BuildContext context) => NextScreen()));
          },
          child: Column(
            children: <Widget>[
              Expanded(
                child: Container(
                  alignment: Alignment.center,
                  height: 230,
                  width: 280,
                  child: charts.PieChart(_seriesPieData,
                      animate: true,
                      animationDuration: Duration(seconds: 1),
                      defaultInteractions: false,
                      behaviors: [
                        new charts.DatumLegend(
                          outsideJustification:
                              charts.OutsideJustification.endDrawArea,
                          horizontalFirst: false,
                          desiredMaxRows: 3,
                          cellPadding: new EdgeInsets.only(
                              left: 8, right: 4.0, bottom: 4.0),
                          entryTextStyle: charts.TextStyleSpec(
                              color: charts.Color.fromHex(code: "#000000"),
                              fontFamily: 'Georgia',
                              fontSize: 15),
                        )
                      ],
                      defaultRenderer: new charts.ArcRendererConfig(
                          arcWidth: 30,
                          strokeWidthPx: 0,
                          arcRendererDecorators: [
                            new charts.ArcLabelDecorator(
                                insideLabelStyleSpec: new charts.TextStyleSpec(
                                    fontSize: 16,
                                    color:
                                        charts.Color.fromHex(code: "#000000")),
                                labelPosition: charts.ArcLabelPosition.inside)
                          ])),
                ),
              ),
            ],
          ),
        ));
  }
}

class Task {
  String task;
  double taskvalue;
  Color colorval;
  Task(this.task, this.taskvalue, this.colorval);
}

class NextScreen extends StatefulWidget {
  @override
  _NextScreenState createState() => new _NextScreenState();
}

class _NextScreenState extends State<NextScreen> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(title: Text(' ')),
    );
  }
}

...