anchor.diff:    }
   
     void _sendMessage({String text}) {
  -    ChatMessage message = new ChatMessage(
  -      text: text,
  -      animationController: new AnimationController(
  -        duration: new Duration(milliseconds: 700),
  -        vsync: this,
  -      ),
  -    );
  -    setState(() {
  -      _messages.insert(0, message);
  +    reference.push().set({
  +      'text': text,
  +      'senderName': googleSignIn.currentUser.displayName,
  +      'senderPhotoUrl': googleSignIn.currentUser.photoUrl
       });
  -    message.animationController.forward();
       analytics.logEvent(name: 'send_message');
  -  }
  -
  -  void dispose() {
  -    for (ChatMessage message in _messages)
  -      message.animationController.dispose();
  -    super.dispose();
     }
   
     Widget _buildTextComposer() {
  
positive.code:   State createState() => new ChatScreenState();
  }
  
  class ChatScreenState extends State<ChatScreen> with TickerProviderStateMixin {
    final List<ChatMessage> _messages = <ChatMessage>[];
    final TextEditingController _textController = new TextEditingController();
    bool _isComposing = false;
  
    Future<Null> _ensureLoggedIn() async {
      GoogleSignInAccount user = googleSignIn.currentUser;
  
negative.code:       body: new Container(
          child: new Column(
            children: <Widget>[
              new Flexible(
                child: new FirebaseAnimatedList(
                  query: reference,
                  sort: (a, b) => b.key.compareTo(a.key),
                  padding: new EdgeInsets.all(8.0),
                  reverse: true,
                  itemBuilder: (_, DataSnapshot snapshot, Animation<double> animation) {
                    return new ChatMessage(
                        snapshot: snapshot,
                        animation: animation
                    );
                  },
                ),
              ),
            new Divider(height: 1.0),
            new Container(
              decoration: new BoxDecoration(
  