Flutter中如何对API返回的列表值求和?求相关参考与示例
在Flutter中对API返回列表值求和的实现方法
先看你提供的API返回数据示例:
下面是具体的实现步骤和示例代码:
一、先把API数据解析成Dart对象列表
首先得把API返回的JSON数据转成Dart的对象列表,方便后续操作。假设你的数据结构里有amount字段需要求和,先定义数据模型:
class Transaction { final int id; final String description; final double amount; Transaction({required this.id, required this.description, required this.amount}); // 从JSON转成对象的方法 factory Transaction.fromJson(Map<String, dynamic> json) { return Transaction( id: json['id'], description: json['description'], amount: json['amount'].toDouble(), ); } }
然后写API请求和解析的代码:
import 'dart:convert'; import 'package:http/http.dart' as http; Future<List<Transaction>> fetchTransactions() async { final response = await http.get(Uri.parse('你的API接口地址')); if (response.statusCode == 200) { List<dynamic> jsonList = json.decode(response.body); return jsonList.map((json) => Transaction.fromJson(json)).toList(); } else { throw Exception('加载数据失败'); } }
二、两种求和的实现方式
方式一:用Dart内置的fold方法(高效推荐)
fold是集合类自带的累加方法,一行代码就能搞定:
double calculateTotal(List<Transaction> list) { return list.fold(0.0, (total, item) => total + item.amount); }
简单说:第一个参数是累加的初始值(这里从0开始),第二个参数是每次循环把当前总和和列表项的amount相加。
方式二:传统循环遍历
如果习惯写循环,也可以这么做:
double calculateTotal(List<Transaction> list) { double total = 0.0; for (var item in list) { total += item.amount; } return total; }
三、在UI里展示求和结果
用FutureBuilder配合异步请求,就能在界面上显示总金额了:
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('交易总额统计')), body: FutureBuilder<List<Transaction>>( future: fetchTransactions(), builder: (context, snapshot) { if (snapshot.hasData) { double total = calculateTotal(snapshot.data!); return Center( child: Text('总金额:\$${total.toStringAsFixed(2)}'), ); } else if (snapshot.hasError) { return Center(child: Text('出错了:${snapshot.error}')); } // 加载中的状态 return const Center(child: CircularProgressIndicator()); }, ), ); }
四、要注意的细节
- 如果API返回的金额是字符串类型,记得先转成数值:
double.parse(json['amount']) - 空列表不用额外处理,求和结果自然是0.0
- 一定要处理异步状态,别直接在build里调用异步方法,用
FutureBuilder或者状态管理工具(比如Riverpod、Provider)都可以
参考方向
- Dart官方的集合API文档:里面详细讲了
fold这类集合操作方法的用法 - Flutter官方的异步编程教程:学好异步处理是搞定API数据操作的基础
内容的提问来源于stack exchange,提问作者sharon
相关产品推荐
相关产品推荐

