Issue
I am very new to Dart, and coding in general. I have produced this code after watching tutorials on YouTube. For the most part, I have been able to troubleshoot most of my problems on my own, yet I cannot figure out my most recent errors. I was successful to create record in firestorm but I am unable to update it because I am not able to get Doc ID.
Here is my code:-
import 'package:flutter/material.dart';
import 'package:lms_definer/controllers/profileController.dart';
import 'package:lms_definer/controllers/textController.dart';
import 'package:get/get.dart';
import 'package:lms_definer/model/profileModel.dart';
import 'package:lms_definer/constants/constants.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import '../helper/firestore_db.dart';
class EditProfile extends StatelessWidget {
const EditProfile({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
var _textController = ProfileEdit();
return Scaffold(
body: GetX<ProfileController>(
init: Get.put<ProfileController>(ProfileController()),
builder: (ProfileController profileController) {
return Container(
child: ListView.builder(
itemCount: profileController.profiles.length,
itemBuilder: (BuildContext context, int i) {
final _profileModel = profileController.profiles[i];
setTextEditControllerValue(_textController, _profileModel);
return SafeArea(
child: Container(
padding: EdgeInsets.all(20),
child: Form(
child: Column(
children: [
TextFormField(
decoration: const InputDecoration(
labelText: 'First Name',
border: OutlineInputBorder(
borderSide: BorderSide()),
),
controller: _textController.fNameController
),
SizedBox(
height: 10,
),
TextFormField(
decoration: const InputDecoration(
labelText: 'First Name',
border: OutlineInputBorder(
borderSide: BorderSide()),
),
controller: _textController.lNameController,
),
SizedBox(
height: 10,
),
TextFormField(
decoration: const InputDecoration(
labelText: 'Address',
border: OutlineInputBorder(
borderSide: BorderSide()),
),
controller: _textController.adressController,
),
SizedBox(
height: 10,
),
TextFormField(
decoration: const InputDecoration(
labelText: 'Phone Numbaer',
border: OutlineInputBorder(
borderSide: BorderSide()),
),
controller: _textController.phoneController,
),
SizedBox(
height: 10,
),
TextFormField(
decoration: const InputDecoration(
labelText: 'School Name',
border: OutlineInputBorder(
borderSide: BorderSide()),
),
controller: _textController.sclNameController,
),
SizedBox(
height: 10,
),
TextFormField(
decoration: const InputDecoration(
labelText: 'Student Class',
border: OutlineInputBorder(
borderSide: BorderSide()),
),
controller: _textController.stdClassController,
),
SizedBox(
height: 10,
),
ElevatedButton(onPressed: () async {
ProfileModel profileModel = profileModelVal(_textController);
//await FirestoreDb.updateProfile(profileModel, documentId);
}, child: Text('Update'))
],
),
),
),
);
}),
);
},
));
}
ProfileModel profileModelVal(ProfileEdit _textController) {
final profileModel = ProfileModel(
firstName:
_textController.fNameController.text.trim(),
lastName:
_textController.lNameController.text.trim(),
parentName: _textController
.fatherNameController.text
.trim(),
phoneNumber:
_textController.phoneController.text.trim(),
address:
_textController.adressController.text.trim(),
schoolName:
_textController.sclNameController.text.trim(),
stdClass: _textController.stdClassController.text
.trim());
return profileModel;
}
void setTextEditControllerValue(ProfileEdit _textController,
ProfileModel _profileModel) {
_textController.fNameController.value =
TextEditingValue(text: _profileModel.firstName);
_textController.lNameController.value =
TextEditingValue(text: _profileModel.lastName);
_textController.fatherNameController.value =
TextEditingValue(text: _profileModel.parentName);
_textController.adressController.value =
TextEditingValue(text: _profileModel.address);
_textController.phoneController.value =
TextEditingValue(text: _profileModel.phoneNumber);
_textController.sclNameController.value =
TextEditingValue(text: _profileModel.schoolName);
_textController.stdClassController.value =
TextEditingValue(text: _profileModel.stdClass);
}
void clearTextController(ProfileEdit _textController) {
_textController.fNameController.clear();
_textController.lNameController.clear();
_textController.fatherNameController.clear();
_textController.adressController.clear();
_textController.phoneController.clear();
_textController.sclNameController.clear();
_textController.stdClassController.clear();
}
}
MY Database file:-
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/cupertino.dart';
import 'package:lms_definer/constants/constants.dart';
import 'package:lms_definer/model/profileModel.dart';
class FirestoreDb {
static createProfile(ProfileModel profilemodel) async {
await firebaseFirestore.collection('users').doc(auth.currentUser!.uid)
.collection('profile')
.add({
'firstName': profilemodel.firstName,
'lastName': profilemodel.lastName,
'parentName': profilemodel.parentName,
'phoneNumber': profilemodel.phoneNumber,
'address': profilemodel.address,
'schoolName': profilemodel.schoolName,
'stdClass': profilemodel.stdClass,
'createdOn': Timestamp.now(),
'isDone': true
});
}
static Stream<List<ProfileModel>> profileStream() {
return firebaseFirestore
.collection('users')
.doc(auth.currentUser!.uid)
.collection('profile')
.snapshots()
.map((QuerySnapshot query) {
List<ProfileModel> profiles = [];
for (var profile in query.docs) {
final profileModel =
ProfileModel.fromDocmentSnapshot(documentSnapshot: profile);
profiles.add(profileModel);
}
return profiles;
});
}
static updateProfile(ProfileModel profilemodel, documentId ) {
firebaseFirestore
.collection('users')
.doc(auth.currentUser!.uid)
.collection('profile')
.doc(documentId)
.update(
{
'firstName': profilemodel.firstName,
'lastName': profilemodel.lastName,
'parentName': profilemodel.parentName,
'phoneNumber': profilemodel.phoneNumber,
'address': profilemodel.address,
'schoolName': profilemodel.schoolName,
'stdClass': profilemodel.stdClass,
'createdOn': Timestamp.now(),
}
);
}
static deleteProfile(String documentID) {
firebaseFirestore.collection('users').doc(auth.currentUser!.uid).collection(
'profile').doc(documentID).delete();
}}
I need doc Id to update the file. Please help. Thank you
Solution
static updateProfile(ProfileModel profilemodel, documentId ) {
firebaseFirestore
.collection('users')
.doc(auth.currentUser!.uid)
.collection('profile')
.get()
.then((QuerySnapshot querySnapshot) {
final docId = queryShapchot.docs.first.id;
firebaseFirestore
.collection('users')
.doc(auth.currentUser!.uid)
.collection('profile')
.doc(docId)
.update({
// Add data here
})
});
}
This should do the trick for you.
Answered By - Advait
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.