flutter - 为什么 setState 不使用差异输入重建小部件?

标签 flutter

我有这个代码。我想要的是当我按下按钮时,map[food] 递增 1,这是饼图显示的 map ,我希望饼图使用新数据重新呈现。忽略切换,我现在不使用它。

这个饼图来自一个包,如果你想查看它,这是我添加到依赖项中的内容:pie_chart: ^0.8.0this is it .

import 'package:flutter/material.dart';
import 'package:pie_chart/pie_chart.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blueGrey,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  bool toggle = true;
  Map<String, double> dataMap = new Map();

  @override
  void initState() {
    super.initState();
    dataMap.putIfAbsent("Food", () => 5);
    dataMap.putIfAbsent("Gas", () => 3);
    dataMap.putIfAbsent("Transportation", () => 2);
    dataMap.putIfAbsent("Games", () => 2);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Pie Chart"),
      ),
      body: Container(
        child: Center(
          child: toggle
              ? PieChart(
                  dataMap: dataMap,
                  legendFontColor: Colors.blueGrey[900],
                  legendFontSize: 14.0,
                  legendFontWeight: FontWeight.w500,
                  animationDuration: Duration(milliseconds: 800),
                  chartLegendSpacing: 32.0,
                  chartRadius: MediaQuery.of(context).size.width / 2.7,
                  showChartValuesInPercentage: true,
                  showChartValues: true,
                  chartValuesColor: Colors.blueGrey[900].withOpacity(0.9),
                )
              : Text("Press FAB to show chart"),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: add,
        child: Icon(Icons.insert_chart),
      ),
    );
  }

  void togglePieChart() {
    setState(() {
      toggle = !toggle;
    });
  }

  void add(){
    setState(() {
      dataMap["Food"]++;
      debugPrint(dataMap["Food"].toString());
    });
  }
}

最佳答案

问题出在包本身。它仅在 initState() 方法中进行百分比计算,该方法仅在创建 PieChart 实例时调用。 您可以自己编辑包代码,并在 _PieChartState 类的 build 方法中添加这两行:

initLegends();
initValues();

关于flutter - 为什么 setState 不使用差异输入重建小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55552749/

相关文章:

flutter - 在 Flutter 中,我如何更改一些小部件并看到它以动画形式显示为新大小?

xcode - 如何在 Mac 上打开 Android Studio 制作的 Flutter 工程?

flutter - 如何为 Flutter 中的 Snack Bar 编写一个简单的测试?

sqlite - Flutter FutureBuilder未使用sqlite的数据进行构建

generics - 在 Dart 中,子类如何扩展父类(super class),让子类的泛型类型扩展父类(super class)的类型?

ios - Flutter 意外退出,Error reading dependency

android - 如何将播放器置于顶部位置

flutter - currentuser 如何在 flutter 中通过 fcm 向另一个用户发送请求通知?

android - Flutter android版本卡在启动画面上

ios - 如何在 Flutter 中禁用 InAppWebView 的缩放?