You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何对API返回的列表值求和?求相关参考与示例

在Flutter中对API返回列表值求和的实现方法

先看你提供的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:50:31