Created
May 11, 2020 11:06
-
-
Save ibtesam123/eba98360a0463d4cee4df2bd5ca2905b to your computer and use it in GitHub Desktop.
Realtime Chat-II
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
import 'package:scoped_model/scoped_model.dart'; | |
import './User.dart'; | |
import './Message.dart'; | |
import './ChatModel.dart'; | |
class ChatPage extends StatefulWidget { | |
final User friend; | |
ChatPage(this.friend); | |
@override | |
_ChatPageState createState() => _ChatPageState(); | |
} | |
class _ChatPageState extends State<ChatPage> { | |
final TextEditingController textEditingController = TextEditingController(); | |
Widget buildSingleMessage(Message message) { | |
return Container( | |
alignment: message.senderID == widget.friend.chatID | |
? Alignment.centerLeft | |
: Alignment.centerRight, | |
padding: EdgeInsets.all(10.0), | |
margin: EdgeInsets.all(10.0), | |
child: Text(message.text), | |
); | |
} | |
Widget buildChatList() { | |
return ScopedModelDescendant<ChatModel>( | |
builder: (context, child, model) { | |
List<Message> messages = | |
model.getMessagesForChatID(widget.friend.chatID); | |
return Container( | |
height: MediaQuery.of(context).size.height * 0.75, | |
child: ListView.builder( | |
itemCount: messages.length, | |
itemBuilder: (BuildContext context, int index) { | |
return buildSingleMessage(messages[index]); | |
}, | |
), | |
); | |
}, | |
); | |
} | |
Widget buildChatArea() { | |
return ScopedModelDescendant<ChatModel>( | |
builder: (context, child, model) { | |
return Container( | |
child: Row( | |
children: <Widget>[ | |
Container( | |
width: MediaQuery.of(context).size.width * 0.8, | |
child: TextField( | |
controller: textEditingController, | |
), | |
), | |
SizedBox(width: 10.0), | |
FloatingActionButton( | |
onPressed: () { | |
model.sendMessage( | |
textEditingController.text, widget.friend.chatID); | |
textEditingController.text = ''; | |
}, | |
elevation: 0, | |
child: Icon(Icons.send), | |
), | |
], | |
), | |
); | |
}, | |
); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar: AppBar( | |
title: Text(widget.friend.name), | |
), | |
body: ListView( | |
children: <Widget>[ | |
buildChatList(), | |
buildChatArea(), | |
], | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment