londonappbrewery / Flash-Chat-Flutter-Complete

The completed code for the Flash Chat Project - The Complete Flutter Development Bootcamp
https://www.appbrewery.co/
92 stars 133 forks source link

Breaking Changes & Deprecations #10

Open gaetanosestito opened 4 years ago

gaetanosestito commented 4 years ago

Hey all, Firebase's API for flutter has changed the way developers integrate Flutter applications with Firebase. So exist a migration guide to help with updating existing and new projects for Flash chat. Please check it out: Migration Guide

About me, I had to do a call to Firebase.initializeApp(); in order to run successuful.

mohitnakum commented 4 years ago

also change before:FirebaseUser loggedInUser; after:User loggedInUser; because FierbaseUser Deprecated and currentUser now synchronize so not needed async. Accessing the current user via currentUser() is now synchronous via the currentUser getter. https://firebase.flutter.dev/docs/migration/

dryusha commented 4 years ago

Yeah.. I change my main() function into main.dart file like dat


.... void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(FlashChat()); } ....


and second changes its import firebase auth and deprecated FirebaseUser change to auth.User example for chat screen.


import 'package:firebase_auth/firebase_auth.dart' as auth; ... auth.User loggedInUser;

@override void initState() { super.initState();

getCurrentUser();

}

void getCurrentUser() { try { final user = _auth.currentUser; if (user != null) { loggedInUser = user; print(loggedInUser.email); } } catch (e) { print(e); } } ...


Lesson N18-19. Also Firestore is deprecated need to used FirebaseFirestore, final _fireStore = FirebaseFirestore.instance; if u are using streams, snapshot.documents is deprecated too and need to call snapshot.docs with responses data func.


void getMessages() async { await for (var snapshot in _fireStore.collection('messages').snapshots()) { for (var message in snapshot.docs) { print(message.data()); } } }


digitpk commented 3 years ago

Also, guide the latest code regarding stream builder (L#21. Turning Streams into Widgets Using the StreamBuilder) as I didn't get the expected results.

mine code is: StreamBuilder( stream: _firestore.collection('messages').snapshots(), builder: (context, snapshot) { if (snapshot.hasData) { final messages = snapshot.data.docs; List messageWidgets = []; for (var message in messages) {

// i get the error here on the parenthesis final messageText = message.data(); final messageSender = message.data();

                final messageWidget =
                    Text('$messageText from $messageSender');
                messageWidgets.add(messageWidget);
              }
            }
          },
        ),
digitpk commented 3 years ago

I got this error fix by using adding this:

// i get the error fix here by adding fields after the parenthesis final messageText = message.data()['field 1']; final messageSender = message.data()['field 2'];

FredWolfe commented 3 years ago

@digitpk

this is how I fixed the buildstream error

StreamBuilder( stream: _fireStore.collection('messages').snapshots(), builder: (context, snapshot) { if (snapshot.hasData) {} final messages = snapshot.data.docs; List messageWidgets = []; for (var message in messages) { final messageText = message.data()['text']; final messageSender = message.data()['sender'];

              final messageWidget =
                  Text('$messageText from $messageSender');
              messageWidgets.add(messageWidget);
            }
            return Column(
              children: messageWidgets,
            );
          },
        ),
steph9600 commented 3 years ago

final messageText = message.data()['text']; final messageSender = message.data()['sender'];

isn't working for me. i get an error: The operator '[]' isn't defined for the type 'Object'. (undefined_operator at [flash_chat] lib\screens\chat_screen.dart:114)

Wondering if anybody has encountered this/has a fix

LoneWolfPJT commented 3 years ago

final messageText = message['text']; final messageSender = message['sender'];

you can fix it

steph9600 commented 3 years ago

worked like a charm. thanks!

dyardy commented 2 years ago

This was final StreamBuilder returned from _firestore.collection('messages').snapshots(); Hope this helps someone.

StreamBuilder(
    stream: _firestore.collection('messages').snapshots(),
    builder: (BuildContext context,
        AsyncSnapshot<QuerySnapshot> snapshot) {
      if (snapshot.hasData) {
        final messages = snapshot.data?.docs;
        List<Text> messageWidgets = [];
        for (var message in messages!) {
          final messageText = message['text'];
          final messageSender = message['sender'];
          final messageWidget =
              Text('$messageText from $messageSender');

          messageWidgets.add(messageWidget);
        }
        return Column(
          children: messageWidgets,
        );
      }
      return Text('no data');
      // return Text('${snapshot.data}');
    }),
Yougraj commented 2 years ago

This was final StreamBuilder returned from _firestore.collection('messages').snapshots(); Hope this helps someone.

StreamBuilder(
    stream: _firestore.collection('messages').snapshots(),
    builder: (BuildContext context,
        AsyncSnapshot<QuerySnapshot> snapshot) {
      if (snapshot.hasData) {
        final messages = snapshot.data?.docs;
        List<Text> messageWidgets = [];
        for (var message in messages!) {
          final messageText = message['text'];
          final messageSender = message['sender'];
          final messageWidget =
              Text('$messageText from $messageSender');

          messageWidgets.add(messageWidget);
        }
        return Column(
          children: messageWidgets,
        );
      }
      return Text('no data');
      // return Text('${snapshot.data}');
    }),

thank you

ravi238873 commented 2 years ago

This was final StreamBuilder returned from _firestore.collection('messages').snapshots(); Hope this helps someone.

StreamBuilder(
    stream: _firestore.collection('messages').snapshots(),
    builder: (BuildContext context,
        AsyncSnapshot<QuerySnapshot> snapshot) {
      if (snapshot.hasData) {
        final messages = snapshot.data?.docs;
        List<Text> messageWidgets = [];
        for (var message in messages!) {
          final messageText = message['text'];
          final messageSender = message['sender'];
          final messageWidget =
              Text('$messageText from $messageSender');

          messageWidgets.add(messageWidget);
        }
        return Column(
          children: messageWidgets,
        );
      }
      return Text('no data');
      // return Text('${snapshot.data}');
    }),

This works and consider this as final solution.

FredWolfe commented 1 year ago

This was final StreamBuilder returned from _firestore.collection('messages').snapshots(); Hope this helps someone.

StreamBuilder(
    stream: _firestore.collection('messages').snapshots(),
    builder: (BuildContext context,
        AsyncSnapshot<QuerySnapshot> snapshot) {
      if (snapshot.hasData) {
        final messages = snapshot.data?.docs;
        List<Text> messageWidgets = [];
        for (var message in messages!) {
          final messageText = message['text'];
          final messageSender = message['sender'];
          final messageWidget =
              Text('$messageText from $messageSender');

          messageWidgets.add(messageWidget);
        }
        return Column(
          children: messageWidgets,
        );
      }
      return Text('no data');
      // return Text('${snapshot.data}');
    }),

thanks so much