@@ -139,7 +139,7 @@ class MessageList extends StatefulWidget {
139139
140140class _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