@@ -139,7 +139,7 @@ class MessageList extends StatefulWidget {
139
139
140
140
class _MessageListState extends State <MessageList > {
141
141
final List <Message > messages = []; // TODO move state up to store
142
- bool fetched = false ;
142
+ bool fetched = false ; // TODO this will get more complex
143
143
144
144
@override
145
145
void didChangeDependencies () {
@@ -160,6 +160,58 @@ class _MessageListState extends State<MessageList> {
160
160
@override
161
161
Widget build (BuildContext context) {
162
162
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
+ ]);
164
216
}
165
217
}
0 commit comments