Flutter - "Bad state: field does not exist within the DocumentSnapShotPlatform"

Jeff Barra

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:

enter image description here

M.ali

You don't init the controller But in init function you injections the controller into the page Try to set dataController = Get.put(DataController()); And set make the variable using late:

late DataController datacontroller

Or init the controller and injection it in the same first line as this

DataController dataController = Get.put(DataController());

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Flutter fails on `flutter` command

Segments in Flutter

Flutter FireStore

Is there a wakelock in flutter?

"with" keyword in Flutter

Signature in flutter

Flutter navigation

Flutter: Unhandled Exception: Bad state: field does not exist within the DocumentSnapshotPlatform

ScopedModel in Flutter

Is there a snapHelper in flutter?

StreamBuilder flutter

Stack with flutter

Flutter textformfield

DateTime in Flutter

Bad state: field does not exist within the DocumentSnapshotPlatform flutter error even though field exists

Error: Bad state : field does not exist within the DocumentSnapshotPlatform

Bad state: field does not exist within the DocumentSnapshotPlatform error

flutter : Text on image in flutter

flutter Bad state: field does not exist within the DocumentSnapshotPlatform

Problem with stream and firebase Bad state: field does not exist within the DocumentSnapshotPlatform

StateError (Bad state: field does not exist within the DocumentSnapshotPlatform). How can I get a doc from firestore?

How to fix Bad state: field does not exist within the DocumentSnapshotPlatform Firebase Flutter FutureBuilder

NoSuchMethodError Flutter

Flutter || Padding for floatingActionButton in flutter

Doxygen With Flutter

Flutter: Bad state: field does not exist within the DocumentSnapshotPlatform in streambuilder

I tried to display 'DateTime' on flutter UI get from firestore but show " Bad state: field does not exist within the DocumentSnapshotPlatform "

StateError (Bad state: field does not exist within the DocumentSnapshotPlatform) on flutter

Reflection in Flutter