flutter - 如何在此 PieChart 上使用流
问题描述
我最近开始学习 Flutter,并在 Flutter 中学习了响应式编程(Learning it 实际上)。这就是我想要的,我有一个将地图作为输入并绘制它的 PieChart。(假设地图 map = { "Food" : 5, "Transportation" : 2} 我想要做的是有一个按钮,当我点击时会将食物增加 1,然后 PieChart 会重新呈现。(最终按钮将允许用户添加他们自己的字符串和 int 但现在我为测试进行硬编码)我的想法是用 StreamBuilder 包装一个 PieChart,当我们向该流添加输入时,它将监视一个流并重建 PieChart。我只是不知道如何正确实现它,我也不知道我是否应该让流接受地图,或者某个名为 deposit 的类,它有一个字符串和一个双精度值。这里'
import 'package:flutter/material.dart';
import 'package:pie_chart/pie_chart.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Map<String, double> dataMap = {"Food": 5, "Transportation": 3};
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Testing"),
),
body: PieChart(dataMap: dataMap),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
dataMap["Food"] = dataMap["Food"] + 1;
},
),
),
);
}
}
解决方案
import 'package:flutter/material.dart';
import 'package:pie_chart/pie_chart.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Map<String, double> dataMap = {"Food": 5, "Transportation": 3};
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Testing"),
),
body: PieChart(dataMap: dataMap),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
setState(() => dataMap["Food"] += 1);
},
),
),
);
}
}
您需要做的就是使用 setState 告诉小部件状态已更改。 https://docs.flutter.io/flutter/widgets/State/setState.html
这种模式的灵感来自 Reactjs。注意:不要将计算繁重的操作放在setState
回调中
这是一个流的例子
https://github.com/flutter/plugins/blob/master/packages/sensors/example/lib/main.dart
我没有 Stream 功能,所以我无法编写代码。
推荐阅读
- reactjs - 如何使用 stripejs 和 reactjs 创建令牌?
- python - 通过在 API 链接中设置路径变量从 API 获取数据
- git - 适用于 Mac 的 Sourcetree 4.0.1 缺少用于交互式变基的 UI
- recursion - 使用递归求和
- kubernetes - Kubernetes 如何在 Pod 之间使用 round-robin(rr) 负载均衡策略
- angular - 使用 ngrx 和选择器等待资源加载到警卫中
- mysql - XAMPP:杀死 PID 11308 的问题 检查您是否具有适当的权限.... Apache 和 mysql 无法停止
- sdn - Opendaylight 是否还有 UI
- floating-point - DBL_EPSILON 和 DBL_MIN 有什么区别?
- r - 自动子集包含包含数据框的列表的大型列表中的数据