断言失败:4774行pos 14:'_dependents.isEmpty':不正确

时间:2020-02-05 11:54:45

标签: flutter dart

我是Flutter的新手,我正在使用聊天应用程序,每当我选择一个用户时,我都应该能够以私密方式与他交谈,这就是我在做的事情,无论何时我单击某个试图移动的人到此聊天屏幕,然后出现此错误(请参见标题)。

但是当我按下“后退”按钮并再试一次时,它可以正常工作并显示应有的聊天内容,这确实让我感到困惑,而且如果有人知道它的来源,那将会很棒。

这是我的聊天室。飞镖

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:social/responsive/size_config.dart';

var _firestore = Firestore.instance;
FirebaseUser loggedInUser;
String groupChatId;

class Chat extends StatelessWidget {

  static const String id = 'chat_screen';
  final String peerEmail;

  Chat({Key key, @required this.peerEmail}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(
            'CHAT',
            style: TextStyle(fontWeight: FontWeight.bold),
          ),
          centerTitle: true,
        ),
        body: ChatScreen(peerEmail: peerEmail));
  }
}

class ChatScreen extends StatefulWidget {
  final String peerEmail;

  ChatScreen({this.peerEmail});

  @override
  _ChatScreenState createState() => _ChatScreenState(peerEmail: peerEmail);
}

class _ChatScreenState extends State<ChatScreen> {
  final _auth = FirebaseAuth.instance;
  final messageTextController = TextEditingController();
  String peerEmail;
  String messageText;

  _ChatScreenState({this.peerEmail});

  @override
  void initState() {
    super.initState();
    getCurrentUser();
    String email = loggedInUser.email;
    getGroupId(email);
  }

  void getGroupId(String email) {
    if (peerEmail.hashCode <= email.hashCode) {
      setState(() {
        groupChatId = '$peerEmail-$email';
      });
    } else {
      setState(() {
        groupChatId = '$email-$peerEmail';
      });
    }
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SafeArea(
            child: Column(
      children: <Widget>[
        MessageStream(),
        Container(
          decoration: BoxDecoration(color: Colors.red,borderRadius: BorderRadius.circular(10)),
          child: Row(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Expanded(
                child: TextField(
                  controller: messageTextController,
                  onChanged: (value) {
                    //Do something with the user input.
                    messageText = value;
                  },

                ),
              ),
              FlatButton(
                onPressed: () {
                  //Implement send functionality.
                  messageTextController.clear();
                  print(messageText);
                  print(loggedInUser.email);
                  _firestore.collection('messages')
                      .document(groupChatId)
                      .collection(groupChatId).add({
                    'content': messageText,
                    'emailFrom': loggedInUser.email,
                    'emailTo': peerEmail,
                  });
                },
                child: Text(
                  'Send',

                ),
              ),
            ],
          ),
        ),
      ],
    )));
  }
}

class MessageStream extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
      stream: _firestore
          .collection('messages')
          .document(groupChatId)
          .collection(groupChatId)
          .snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return Center(
            child: CircularProgressIndicator(
              valueColor: AlwaysStoppedAnimation<Color>(Colors.black),
            ),
          );
        } else {
          final messages = snapshot.data.documents;
          List<MessageDisplay> messageList = [];
          for (var msg in messages) {
            final message = msg.data['content'];
            final emailTo = msg.data['emailTo'];
            final emailFrom = msg.data['emailFrom'];
            final messageDisplay = MessageDisplay(
              message: message,
              emailFrom: emailFrom,
              emailTo: emailTo,
            );
            messageList.add(messageDisplay);
          }
          return Expanded(
            child: ListView(
              padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0),
              children: messageList != null ? messageList:CircularProgressIndicator(),
            ),
          );
        } //
      },
    );
  }
}

class MessageDisplay extends StatelessWidget {
  MessageDisplay({this.message, this.emailFrom, this.emailTo});

  final String message;
  final String emailFrom;
  final String emailTo;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(SizeConfig.safeBlockVertical * 3),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          message != null
              ? Text(
                  message,
                  style: TextStyle(
                    fontSize: SizeConfig.safeBlockVertical * 15,
                    color: Colors.black54,
                  ),
                )
              : CircularProgressIndicator(),
          emailFrom != null
              ? Text(
                  emailFrom,
                )
              : CircularProgressIndicator(),
        ],
      ),
    );
  }
}

感谢阅读。

0 个答案:

没有答案