Moja klasa edycji.

import 'package:finalyearproject/model/NewUser.dart';
import 'package:finalyearproject/service/database.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:uuid/uuid.dart';




class UpdateSupervisor extends StatefulWidget {

  final NewUser sv;

  UpdateSupervisor({Key key, this.sv}) : super(key: key);

  @override
  _UpdateSupervisorState createState() => _UpdateSupervisorState();
}


class _UpdateSupervisorState extends State<UpdateSupervisor> {
  final GlobalKey<FormState> _formKey = GlobalKey();
  TextEditingController _name;
  TextEditingController _email;
  TextEditingController _nophone;
  TextEditingController _uniqueID;


  var uuid = Uuid();

@override
void initState(){
     super.initState();
     _name = TextEditingController(text:  widget.sv.name);
     _email = TextEditingController(text:  widget.sv.email);
     _nophone = TextEditingController(text: widget.sv.nophone);
     _uniqueID= TextEditingController(text: widget.sv.uniqueID);
  }
    @override
    Widget build(BuildContext context) {
      return Scaffold(
          appBar: AppBar(
            title: Text('Edit Supervisor'),
            backgroundColor: Colors.redAccent,
          ),
          body: Form(
            key: _formKey,
            child: SingleChildScrollView(
              padding: const EdgeInsets.all(16.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.end,
                children: <Widget>[
                  SizedBox(height: 25.0),
                  TextFormField(
                    decoration: InputDecoration(
                        hintText: 'Name',
                        border: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(5))),
                    keyboardType: TextInputType.text,
                    controller: _name,
                  ),
                  SizedBox(height: 10.0),
                  TextFormField(
                    decoration: InputDecoration(
                        hintText: 'Email',
                        border: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(5))),
                    keyboardType: TextInputType.emailAddress,
                    controller: _email,

                  ),
                  SizedBox(height: 10.0),
                  TextFormField(
                    decoration: InputDecoration(
                        hintText: 'Number Phone',
                        border: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(5))),
                    keyboardType: TextInputType.number,
                    controller: _nophone,

                  ),
                  SizedBox(height: 10.0),
                  TextFormField(
                    decoration: InputDecoration(
                        hintText: 'Unique ID ',
                        border: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(5))),
                    keyboardType: TextInputType.number,
                    controller: _uniqueID,
                  ),
                  const SizedBox(height: 20.0),
                  RaisedButton(
                      color: Colors.redAccent,
                      textColor: Colors.black,
                      child: Text( "Update"),
                      onPressed: () async {
                        if (_formKey.currentState.validate()) {
                          DatabaseService().updateData(NewUser(name: _name.text, email: _email.text, nophone: _nophone.text, uniqueID: _uniqueID.text, id: uuid.v4()));
                        }
                      }
                  ),
                ],
              ),
            ),
          )
      );
    }
  }

Moja aktualizacja funkcji.

 // update data supervisor
    Future updateData(NewUser newUser) async {
     
        return supervisorCollection.document(newUser.id).updateData(
            newUser.toJson()).whenComplete(() {
          print("Update success!");
        });
    }

To jest moja firebaza konsoli

Kolekcja nadzorcy

Oto mój błąd

Niemalowy wyjątek: PlatformeException (Błąd wykonania Updatedata, Not_Found: Brak dokumentu do aktualizacji: Projekty / FinaliarProject-5C689 / Bazy danych / (domyślnie) / Dokumenty / Supervisor / 3DBAC00B-29AD-4357-A480-E38A21C90042, NULL)

Spróbowałem użyć SetData () dla mojej funkcji aktualizacji, ale dodanie nowych danych, a nie aktualizację istniejących danych. Więc ktoś może pomóc mi rozwiązać ten problem? czy jest coś, czego brakuje?

0
user13411295 19 październik 2020, 08:19

1 odpowiedź

Najlepsza odpowiedź

Uuid.v4 () wygeneruje identyfikator V4 (losowy) i próbujesz zaktualizować dokument za pomocą tego nowego losowo generowanego identyfikatora, który nie istnieje w kolekcji.

Naprawić to:

var id = widget.sv.id;

Użyj tego identyfikatora w nowym użytkowniku, aby wysłać funkcję aktualizacji:

DatabaseService().updateData(NewUser(name: _name.text, email: _email.text, nophone: _nophone.text, uniqueID: _uniqueID.text, id: id));
0
Asad Rehman 19 październik 2020, 05:51