Как отобразить данные из firestore с подсчитанной суммой?

# #flutter #listview #google-cloud-firestore

Вопрос:

Я хочу составить бюджетный список для приложения и сохранить его в виде списка. Я делаю бюджет добавления и извлекаю данные с помощью firestore. Но я хочу, чтобы, если я добавлю бюджет для той же категории, сумма будет добавлена, но отобразится только 1 список названия категории. Для примера вы можете увидеть картинку ( я хочу показать только 1 категорию, но сумма равна 60 RM). Пожалуйста, помогите мне

ДОБАВИТЬ БЮДЖЕТНЫЙ КОД

 class Name extends StatelessWidget {
  Name({this.name});
  final String name;

  @override
  Widget build(BuildContext context) {
    final amount = TextEditingController();
    FirebaseFirestore firestore = FirebaseFirestore.instance;
    CollectionReference collect= firestore.collection("Budget");

    final FirebaseAuth _auth = FirebaseAuth.instance;
    final User user =_auth.currentUser;
    final uid = user.uid;

    return Container(
      margin: EdgeInsets.all(20.0),
      child: Center(
          child: Column(
            children: <Widget>[
              Padding(
                padding: EdgeInsets.all(20.0),
                child: Text(
                  name,
                  textAlign: TextAlign.center,
                  style: new TextStyle(
                      fontSize: 25.0,
                      color: primary,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              Padding(
                  padding: EdgeInsets.all(20.0),
                child: TextField(
                  controller: amount,
                  decoration: InputDecoration(
                    border: OutlineInputBorder(),
                    labelText: "Enter Budget",
                    enabledBorder: OutlineInputBorder(

                      borderSide: BorderSide(color: secondary),
                    ),
                    focusedBorder: OutlineInputBorder(
                      borderSide: BorderSide(color: secondary),
                    ),
                  ),
                ),
              ),
              Padding(
               padding: EdgeInsets.all(20.0),
              child: ElevatedButton(

                onPressed: () async {
                  final FirebaseAuth _auth = FirebaseAuth
                      .instance;
                  final User user = _auth.currentUser;
                  final uid = user.uid;

                  collect.add({
                    'name': this.name,
                    'amount': 'RM'   amount.text,
                  });
                  amount.text = "";
                },
                child: Text("Save".toUpperCase(), style: TextStyle (
                  fontSize: 14,
                )),
                style: ButtonStyle(
                  padding: MaterialStateProperty.all<EdgeInsets>(EdgeInsets.all(20.0)),
                  foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
                  backgroundColor: MaterialStateProperty.all<Color>(Colors.pink),
                  shape: MaterialStateProperty.all<RoundedRectangleBorder>(
                    RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(10.0),
                        side: BorderSide(color: secondary)
                    ),
                  ),
                ),

              ),
              )
            ],


          ),
      )
    );

  }
}
 

КОД ПРЕДСТАВЛЕНИЯ СПИСКА

   Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Budget List'),
        elevation: 0,
        brightness: Brightness.light,
        backgroundColor: primary,
        leading: IconButton(
          onPressed: (){
            Navigator.pop(context, MaterialPageRoute(builder: (context) => Transactions()));
          },
          icon: Icon(Icons.arrow_back_ios,
            size: 20,
            color: Colors.black,),
        ),
      ),
      body: StreamBuilder(
          stream: FirebaseFirestore.instance.collection('Budget').snapshots(),
          builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
            if (snapshot.hasData) {
              return ListView(
                children: snapshot.data.docs.map((document) {
                  return Center(
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Row(children: [
                          SizedBox(width: 10,),
                          Text(document.get('name'),style: TextStyle(fontSize: 16,
                              color: primary,
                              fontWeight: FontWeight.w600
                          ),),
                          SizedBox(width: 260,),
                          SizedBox(width: 10,),
                          Text(document.get('amount'),style: TextStyle(fontSize: 16,
                              color: primary,
                              fontWeight: FontWeight.w600
                          ),),
                        ],
                        ),
                        /*
                        SizedBox(height: 10,),
                        Row(children: [
                          SizedBox(width: 350,),
                          SizedBox(width: 10,),
                          Text(document.get('amount'),style: TextStyle(fontSize: 16,
                              color: primary,
                              fontWeight: FontWeight.w600
                          ),),
                        ],
                        ),

                         */
                        SizedBox(height: 8,),
                        Row(
                          mainAxisAlignment: MainAxisAlignment.end,
                          children: [
                            GestureDetector(
                              onTap: (){
                                FirebaseFirestore.instance.collection('Budget').doc(document.id).delete();
                                //_showDeleteDialog();
                                //_showDeleteDialog(document: document);
                              },
                              child: Row(
                                children: [
                                  Icon(Icons.delete_forever_outlined,
                                    color: Colors.red,
                                  ),
                                  SizedBox(width: 6,),
                                  Text('Delete', style: TextStyle(fontSize: 16,
                                      color: Colors.red,
                                      fontWeight: FontWeight.w600
                                  ), ),
                                ],
                              ),
                            )
                          ],
                        )
                      ],
                    ),
                  );
                }).toList(),
              );
            }
            return Center(
              child: CircularProgressIndicator(),
            );
          }
      ),
    );
  }
 

Like this, is it possible if the social life only show once but the value is calculated become RM 60?