Skip to content

Commit 9916194

Browse files
committed
msglist: Start on rendering messages
1 parent b22ef67 commit 9916194

File tree

1 file changed

+54
-2
lines changed

1 file changed

+54
-2
lines changed

lib/main.dart

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class MessageList extends StatefulWidget {
139139

140140
class _MessageListState extends State<MessageList> {
141141
final List<Message> messages = []; // TODO move state up to store
142-
bool fetched = false;
142+
bool fetched = false; // TODO this will get more complex
143143

144144
@override
145145
void didChangeDependencies() {
@@ -160,6 +160,58 @@ class _MessageListState extends State<MessageList> {
160160
@override
161161
Widget build(BuildContext context) {
162162
if (!fetched) return const Center(child: CircularProgressIndicator());
163-
return Center(child: Text("Got ${messages.length} messages"));
163+
return ListView.separated(
164+
itemCount: messages.length,
165+
separatorBuilder: (context, i) => const SizedBox(height: 16),
166+
itemBuilder: (context, i) => MessageItem(message: messages[i]));
167+
}
168+
}
169+
170+
class MessageItem extends StatelessWidget {
171+
const MessageItem({super.key, required this.message});
172+
173+
final Message message;
174+
175+
@override
176+
Widget build(BuildContext context) {
177+
return Padding(
178+
padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 8),
179+
child: Column(children: [
180+
// TODO recipient headings
181+
SenderHeading(message: message),
182+
MessageContent(message: message),
183+
]));
184+
}
185+
}
186+
187+
class SenderHeading extends StatelessWidget {
188+
const SenderHeading({super.key, required this.message});
189+
190+
final Message message;
191+
192+
@override
193+
Widget build(BuildContext context) {
194+
return SizedBox(
195+
height: 48,
196+
child: Row(children: [
197+
// TODO avatar
198+
Expanded(
199+
child: Text(message.sender_full_name,
200+
style: const TextStyle(fontWeight: FontWeight.bold))),
201+
Text("${message.timestamp}"), // TODO better format time
202+
]));
203+
}
204+
}
205+
206+
class MessageContent extends StatelessWidget {
207+
const MessageContent({super.key, required this.message});
208+
209+
final Message message;
210+
211+
@override
212+
Widget build(BuildContext context) {
213+
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
214+
Text(message.content),
215+
]);
164216
}
165217
}

0 commit comments

Comments
 (0)