I am running into an issue where the data for the user isn't populating on the profile screen. I am getting the following error message:
Bad state: field does not exist within the DocumentSnapshotPlatform...
Looking at the errors, it looks like myDocument is returning as null.
Here is the code:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../model/registered_events.dart';
import '../controllers/data_controller.dart';
import '../utils/app_colors.dart';
import '../widgets/widgets.dart';
class ProfilePage extends StatefulWidget {
@override
_ProfilePageState createState() => _ProfilePageState();
}
class _ProfilePageState extends State<ProfilePage> {
// Text Editing Controllers
TextEditingController locationController = TextEditingController();
TextEditingController descriptionController = TextEditingController();
TextEditingController firstNameController = TextEditingController();
TextEditingController lastNameController = TextEditingController();
List<RegisteredEvents> registeredEvents = [
RegisteredEvents(
color: Color(0xffADD8E6),
date: 'Feb 28',
range: '10-11',
name: 'Brunch',
img1: 'lib/assets/images/test_user_1.png',
img2: 'lib/assets/images/test_user_2.png',
img3: 'lib/assets/images/test_user_3.png',
img4: 'lib/assets/images/test_user_4.png',
img5: 'lib/assets/images/test_user_5.png',
img6: 'lib/assets/images/test_user_6.png',
like: const Icon(Icons.favorite_border_outlined),
count: '',
message: const Icon(Icons.message_rounded),
rate: '',
share: const Icon(Icons.send_rounded)),
];
// Editable Text for Profile Info
bool isNotEditable = true;
// Data Controller
late DataController? dataController;
int? followers = 0, following = 0;
String? image = '';
// Init State
@override
initState() {
super.initState();
// init data controller
dataController = Get.put(DataController());
print('DataController: $dataController');
print('MyDocument: ${dataController?.myDocument}');
// init text controllers - getting first and last names from database
firstNameController.text = dataController!.myDocument?.get('first') ?? "";
lastNameController.text = dataController!.myDocument?.get('last') ?? "";
try {
descriptionController.text = dataController!.myDocument!.get('desc');
} catch (e) {
descriptionController.text = '';
}
try {
image = dataController!.myDocument!.get('image');
} catch (e) {
image = '';
}
try {
locationController.text = dataController!.myDocument!.get('location');
} catch (e) {
locationController.text = '';
}
try {
followers = dataController!.myDocument!.get('followers').length;
} catch (e) {
followers = 0;
}
try {
following = dataController!.myDocument!.get('following').length;
} catch (e) {
following = 0;
}
}
@override
Widget build(BuildContext context) {
var screenheight = MediaQuery.of(context).size.height;
var screenwidth = MediaQuery.of(context).size.width;
return Scaffold(
// AppBar
appBar: AppBar(
backgroundColor: Theme.of(context).primaryColor,
elevation: 0,
title: const Text('Profile',
style: TextStyle(fontWeight: FontWeight.bold)),
leading: IconButton(
onPressed: () {},
icon: const Icon(Icons.menu_rounded, size: 30),
),
actions: [
Padding(
padding: const EdgeInsets.only(right: 10.0),
child: IconButton(
onPressed: () {},
icon: const Icon(Icons.sms_rounded, size: 30),
),
)
],
),
// Body
body: SafeArea(
child: SingleChildScrollView(
child: Stack(
children: [
Align(
alignment: Alignment.topRight,
child: Container(
width: 100,
margin: EdgeInsets.only(
left: Get.width * 0.75, top: 20, right: 20),
alignment: Alignment.topRight,
child: const Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
),
),
),
Align(
child: Container(
margin:
const EdgeInsets.symmetric(vertical: 90, horizontal: 20),
width: Get.width,
height: isNotEditable ? 240 : 310,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.15),
spreadRadius: 2,
blurRadius: 3,
offset:
const Offset(0, 0), // changes position of shadow
),
],
),
),
),
Align(
alignment: Alignment.center,
child: Column(
children: [
InkWell(
onTap: () {},
child: Container(
width: 120,
height: 120,
margin: const EdgeInsets.only(top: 35),
padding: const EdgeInsets.all(2),
decoration: BoxDecoration(
color: AppColors.blue,
borderRadius: BorderRadius.circular(70),
gradient: const LinearGradient(
colors: [
Color(0xff7DDCFB),
Color(0xffBC67F2),
Color(0xffACF6AF),
Color(0xffF95549),
],
),
),
child: Column(
children: [
Container(
padding: const EdgeInsets.all(2),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(70),
),
child: image!.isEmpty
? const CircleAvatar(
radius: 56,
backgroundColor: Colors.white,
backgroundImage: AssetImage(
'lib/assets/images/avatar.png',
))
: CircleAvatar(
radius: 56,
backgroundColor: Colors.white,
backgroundImage: NetworkImage(
image!,
)),
),
],
),
),
),
const SizedBox(
height: 15,
),
isNotEditable
? Text(
"${firstNameController.text} ${lastNameController.text}",
style: TextStyle(
fontSize: 18,
color: AppColors.black,
fontWeight: FontWeight.w700,
),
)
: Container(
width: Get.width * 0.6,
child: Row(
children: [
Expanded(
child: TextField(
controller: firstNameController,
textAlign: TextAlign.center,
decoration: const InputDecoration(
hintText: 'First Name',
),
),
),
const SizedBox(
width: 10,
),
Expanded(
child: TextField(
controller: lastNameController,
textAlign: TextAlign.center,
decoration: const InputDecoration(
hintText: 'Last Name',
),
),
),
],
),
),
isNotEditable
? Text(
locationController.text,
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
color: Color(0xff918F8F),
),
)
: Container(
width: Get.width * 0.6,
child: TextField(
controller: locationController,
textAlign: TextAlign.center,
decoration: const InputDecoration(
hintText: 'Location',
),
),
),
const SizedBox(
height: 15,
),
isNotEditable
? Container(
width: 270,
child: Text(
descriptionController.text,
textAlign: TextAlign.center,
style: const TextStyle(
letterSpacing: -0.3,
fontSize: 12,
fontWeight: FontWeight.w300,
),
),
)
: Container(
width: Get.width * 0.6,
child: TextField(
controller: descriptionController,
textAlign: TextAlign.center,
decoration: const InputDecoration(
hintText: 'Description',
),
),
),
const SizedBox(
height: 15,
),
Here is the DataController code:
import 'dart:io';
import 'dart:typed_data';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:path/path.dart' as Path;
class DataController extends GetxController {
FirebaseAuth auth = FirebaseAuth.instance;
// Doc Snapshot File
DocumentSnapshot? myDocument;
// Variables
var allUsers = <DocumentSnapshot>[].obs;
var filteredUsers = <DocumentSnapshot>[].obs;
var allEvents = <DocumentSnapshot>[].obs;
var filteredEvents = <DocumentSnapshot>[].obs;
var joinedEvents = <DocumentSnapshot>[].obs;
var isEventsLoading = false.obs;
var isMessageSending = false.obs;
// Send Message to Firebase
sendMessageToFirebase(
{Map<String, dynamic>? data, String? lastMessage, String? grouid}) async {
isMessageSending(true);
await FirebaseFirestore.instance
.collection('chats')
.doc(grouid)
.collection('chatroom')
.add(data!);
await FirebaseFirestore.instance.collection('chats').doc(grouid).set({
'lastMessage': lastMessage,
'groupId': grouid,
'group': grouid!.split('-'),
}, SetOptions(merge: true));
isMessageSending(false);
}
// Create Notification
createNotification(String recUid) {
FirebaseFirestore.instance
.collection('notifications')
.doc(recUid)
.collection('myNotifications')
.add({
'message': "Send you a message.",
'image': myDocument!.get('image'),
'name': myDocument!.get('first') + " " + myDocument!.get('last'),
'time': DateTime.now()
});
}
// Get My Document
getMyDocument() {
FirebaseFirestore.instance
.collection('users')
.doc(auth.currentUser!.uid)
.snapshots()
.listen((event) {
myDocument = event;
});
}
// Upload Image to Firebase
Future<String> uploadImageToFirebase(File file) async {
String fileUrl = '';
String fileName = Path.basename(file.path);
var reference = FirebaseStorage.instance.ref().child('myfiles/$fileName');
UploadTask uploadTask = reference.putFile(file);
TaskSnapshot taskSnapshot = await uploadTask.whenComplete(() => null);
await taskSnapshot.ref.getDownloadURL().then((value) {
fileUrl = value;
});
print("Url $fileUrl");
return fileUrl;
}
// Upload Thumbnail to Firebase
Future<String> uploadThumbnailToFirebase(Uint8List file) async {
String fileUrl = '';
String fileName = DateTime.now().millisecondsSinceEpoch.toString();
var reference =
FirebaseStorage.instance.ref().child('myfiles/$fileName.jpg');
UploadTask uploadTask = reference.putData(file);
TaskSnapshot taskSnapshot = await uploadTask.whenComplete(() => null);
await taskSnapshot.ref.getDownloadURL().then((value) {
fileUrl = value;
});
print("Thumbnail $fileUrl");
return fileUrl;
}
// Create Event
Future<bool> createEvent(Map<String, dynamic> eventData) async {
bool isCompleted = false;
await FirebaseFirestore.instance
.collection('events')
.add(eventData)
.then((value) {
isCompleted = true;
Get.snackbar('Woot Woot!', 'Event has been created!',
colorText: Colors.white,
backgroundColor: Colors.green,
duration: Duration(milliseconds: 1000));
}).catchError((e) {
isCompleted = false;
});
return isCompleted;
}
// Init State
@override
void onInit() {
// TODO: implement onInit
super.onInit();
getMyDocument();
getUsers();
getEvents();
}
// isUsersLoading
var isUsersLoading = false.obs;
// Get Users
getUsers() {
isUsersLoading(true);
FirebaseFirestore.instance.collection('users').snapshots().listen((event) {
allUsers.value = event.docs;
filteredUsers.value.assignAll(allUsers);
isUsersLoading(false);
});
}
// Get Events
getEvents() {
isEventsLoading(true);
FirebaseFirestore.instance.collection('events').snapshots().listen((event) {
allEvents.assignAll(event.docs);
filteredEvents.assignAll(event.docs);
joinedEvents.value = allEvents.where((e) {
List joinedIds = e.get('joined');
return joinedIds.contains(FirebaseAuth.instance.currentUser!.uid);
}).toList();
isEventsLoading(false);
});
}
}
STACK TRACING:
When the exception was thrown, this was the stack:
#0 DocumentSnapshotPlatform.get._findKeyValueInMap (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:87:7)
#1 DocumentSnapshotPlatform.get._findComponent (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:105:23)
#2 DocumentSnapshotPlatform.get (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:121:12)
#3 _JsonDocumentSnapshot.get (package:cloud_firestore/src/document_snapshot.dart:92:48)
#4 _ProfilePageState.initState (package:gathr_app/pages/profile_page.dart:60:60)
#5 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5219:55)
#6 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5062:5)
#7 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16)
#8 Element.updateChild (package:flutter/src/widgets/framework.dart:3702:20)
#9 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#10 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#11 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5)
#12 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#13 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#14 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#15 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5)
#16 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#17 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#18 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#19 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#20 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#21 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#22 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#23 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#24 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#25 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:6093:32)
#26 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6595:17)
#27 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#28 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#29 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#30 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#31 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#32 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#33 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#34 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#35 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#36 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#37 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#38 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#39 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#40 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#41 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#42 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#43 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#44 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#45 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#46 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#47 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#48 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#49 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#50 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#51 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14)
#52 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#53 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#54 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#55 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#56 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#57 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14)
#58 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#59 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#60 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#61 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#62 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#63 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#64 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#65 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#66 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#67 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#68 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#69 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#70 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#71 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#72 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#73 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#74 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#75 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#76 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#77 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#78 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#79 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#80 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#81 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#82 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#83 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#84 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#85 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#86 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#87 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#88 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#89 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#90 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#91 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#92 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#93 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#94 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#95 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#96 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#97 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#98 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2780:19)
#99 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:903:21)
#100 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:358:5)
#101 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1284:15)
#102 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1214:9)
#103 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1072:5)
#104 _invoke (dart:ui/hooks.dart:142:13)
#105 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:359:5)
#106 _drawFrame (dart:ui/hooks.dart:112:31)
════════════════════════════════════════════════════════════════════════════════════════════════════
Performing hot restart...
Restarted application in 390ms.
flutter: DataController: Instance of 'DataController'
flutter: MyDocument: null
DB Screenshot: