我想在我的Flatter应用程序中对两个不同的firebase集合字段值求和.这就是我编写两个函数的原因.我可以对一个集合字段值求和,但单个文本小部件中的两个集合字段值求和不起作用,或者我不知道如何执行此操作..

Scaffold(
  body: SafeArea(
      child: Container(
    child: StreamBuilder<double?>(
      stream: getFundData(),
      builder: (context, snapshort) {
        if (snapshort.connectionState == ConnectionState.waiting) {
          return Center(child: CircularProgressIndicator());
        }
        if (snapshort.hasData) {
          double data = snapshort.data!;
          return Center(child: Column(
            children: [
              Text("$data"),
              
            ],
          ));
        }

        return Text("data");
      },
    ),
  )),
);

功能代码

Stream<double> getFundData() async* {
  final result =
  await FirebaseFirestore.instance.collection('Use-of-fund').get();
  double totalFundAmount = 0;
  for (var doc in result.docs) {
    totalFundAmount += doc['Amount'];
  }
  yield totalFundAmount;
}

Stream<double> getUserBalanceData() async* {
  final result = await FirebaseFirestore.instance.collection('User-data').get();
  double userTotalAmount = 0;
  for (var doc in result.docs) {
    userTotalAmount += doc['Balance'];
  }
  yield userTotalAmount;
}

现在我想求和userTotalAmounttotalFundAmount

推荐答案

使用RxDart (Observable package).具体来说,getFundDatagetUserBalanceData都使用CombineLatestStream.就是在那里,当任一流发出时,对输出求和.

// ...

StreamBuilder<double>(
  stream: CombineLatestStream.combine2(
    getFundData(),
    getUserBalanceData(),
    (double a, double b) => a + b,
  ),
  builder: (context, snapshot) {

// ...

请记住,您必须在项目中安装rxdart软件包.在项目文件夹内的终端中运行以下命令:

flutter pub add rxdart

然后将其导入Dart文件的顶部

import 'package:rxdart/rxdart.dart';

Explanation

因此,问题是您希望能够对两个不同流的结果求和.主要是因为StreamBuilder一次只接收一个流

Flutter相关问答推荐

Flutter:sqflite DB

修复容器`Text`和容器表单之间的重叠

如何在WidgetRef引用外部的函数中使用Riverpod刷新数据

Android Studio将不会构建iOS模拟器应用程序,因为plist.info有问题

如何管理枚举类型的阻塞事件?

应为标识符,并应为查找)错误

如何在 Dart/Flutter 中克隆 Future

Select 文本时如何更改 Flutter 中的光标 colored颜色 ?

Flutter:在 pubspec.yaml 中找不到assets资源

在 Flutter 中解码 BLE 设备负载

我可以在列表图块下方添加其他小部件吗

ListView 后台可见

Flutter:如何从运行时创建的列表中访问单个子部件的值

Flutter blue plus 库,当try 从 esp32 驱动程序获取 PlatformException 时读取特性

转换函数上传文件上传Uint8List

MediaQuery 在不同手机上不一致

如何在向下滚动时隐藏顶部卡片并在向上滚动时出现?

避免长单词中断

Firebase Cloud Messaging (Flutter):订阅主题时出现错误消息

为什么没有足够的点击栏空间?