Skip to content

Instantly share code, notes, and snippets.

@ibtesam123
Created May 11, 2020 11:06
Show Gist options
  • Save ibtesam123/eba98360a0463d4cee4df2bd5ca2905b to your computer and use it in GitHub Desktop.
Save ibtesam123/eba98360a0463d4cee4df2bd5ca2905b to your computer and use it in GitHub Desktop.
Realtime Chat-II
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