Как агрегировать или суммировать входное значение для существующего поля в Flutter - PullRequest
0 голосов
/ 19 сентября 2019

Я хотел бы добавить значение bool, которое я ввожу в текстовое поле, к существующей сумме в поле, например, если bagWeight = 1, и я ввожу 5, bagWeight должен обновиться до 6.

При условии, что sharkSpecies одинаковы, SharkSpecies и bagWeight являются двумя полями

Я попытался использовать обновление, но при этом создается новый идентификатор документа, который мне не нужен, или новый экземпляр

CRUD.DART

import 'dart:async';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';

class crudMedthods {
  bool isLoggedIn() {
    if (FirebaseAuth.instance.currentUser() != null) {
      return true;
    } else {
      return false;
    }
  }

  Future<void> addData(Data) async {
    if (isLoggedIn()) {

      //carData is
      Firestore.instance.collection('testcrud').document('Kd7RLkMVtu06BDDrxw2j').updateData(Data).catchError((e) {
        print(e);
      });
    } else {
      print('You need to be logged in');
    }
  }
}'

DASHBOARD.DART


  import 'dart:async';

import 'package:flutter/material.dart';

import 'package:cloud_firestore/cloud_firestore.dart';

import 'services/crud.dart';

class DashboardPage extends StatefulWidget {
  @override
  _DashboardPageState createState() => _DashboardPageState();
}

class _DashboardPageState extends State<DashboardPage> {
  String sharkSpecies;
  double bagWeight;
  double count =0.0;

  crudMedthods crudObj = new crudMedthods();

  Future<bool> addDialog(BuildContext context) async {
    return showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text('Add Data', style: TextStyle(fontSize: 15.0)),
            content: Column(
              children: <Widget>[
                TextField(
                  decoration: InputDecoration(hintText: 'Enter the shark species'),
                  onChanged: (value) {
                    this.sharkSpecies = value;
                  },
                ),
                SizedBox(height: 5.0),
                TextField(
                  decoration: InputDecoration(hintText: 'Enter the bags weight'),
                  onChanged: (value) {


                    this.bagWeight= double.parse(value);

                  },
                  keyboardType: TextInputType.number,
                ),
              ],
            ),
            actions: <Widget>[
              FlatButton(
                child: Text('Add'),
                textColor: Colors.blue,
                onPressed: () {
                  Navigator.of(context).pop();
                  crudObj.addData({
                    'sharkSpecies': this.sharkSpecies,
                    'bagWeight': this.bagWeight
                  }).then((result) {
                    dialogTrigger(context);
                  }).catchError((e) {
                    print(e);
                  });
                },
              )
            ],
          );
        });
  }

  Future<bool> dialogTrigger(BuildContext context) async {
    return showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text('Job Done', style: TextStyle(fontSize: 15.0)),
            content: Text('Added'),
            actions: <Widget>[
              FlatButton(
                child: Text('Alright'),
                textColor: Colors.blue,
                onPressed: () {
                  Navigator.of(context).pop();
                },
              )
            ],
          );
        });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: AppBar(
          title: Text('Dashboard'),
          actions: <Widget>[
            IconButton(
              icon: Icon(Icons.add),
              onPressed: () {
                addDialog(context);
              },
            )
          ],
        ),
        body: Center());
  }
}

Я хотел бы обновить поле до значения, которое включает в себя первоначальную сумму плюс новую сумму, как описано в сводке:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...