11part of dash_chat;
22
3- class MessageListView extends StatelessWidget {
3+ class MessageListView extends StatefulWidget {
44 final List <ChatMessage > messages;
55 final ChatUser user;
66 final bool showuserAvatar;
@@ -31,8 +31,6 @@ class MessageListView extends StatelessWidget {
3131 final Function onLoadEarlier;
3232 final Function (bool ) defaultLoadCallback;
3333
34- double previousPixelPostion = 0.0 ;
35-
3634 MessageListView ({
3735 this .showLoadEarlierWidget,
3836 this .shouldShowLoadEarlier,
@@ -66,17 +64,24 @@ class MessageListView extends StatelessWidget {
6664 this .showLoadMore,
6765 });
6866
67+ @override
68+ _MessageListViewState createState () => _MessageListViewState ();
69+ }
70+
71+ class _MessageListViewState extends State <MessageListView > {
72+ double previousPixelPostion = 0.0 ;
73+
6974 bool scrollNotificationFunc (ScrollNotification scrollNotification) {
7075 if (previousPixelPostion == 0.0 ) {
7176 previousPixelPostion = scrollNotification.metrics.maxScrollExtent;
7277 }
7378
7479 if (scrollNotification.metrics.pixels ==
7580 scrollNotification.metrics.maxScrollExtent) {
76- changeVisible (false );
81+ widget. changeVisible (false );
7782 } else {
7883 if (previousPixelPostion < scrollNotification.metrics.pixels) {
79- changeVisible (true );
84+ widget. changeVisible (true );
8085 }
8186
8287 previousPixelPostion = scrollNotification.metrics.pixels;
@@ -93,36 +98,37 @@ class MessageListView extends StatelessWidget {
9398 behavior: CustomScrollBehaviour (),
9499 child: Flexible (
95100 child: Padding (
96- padding: messageContainerPadding,
101+ padding: widget. messageContainerPadding,
97102 child: NotificationListener <ScrollNotification >(
98103 onNotification: scrollNotificationFunc,
99104 child: Stack (
100105 alignment: AlignmentDirectional .topCenter,
101106 children: [
102107 ListView .builder (
103- controller: scrollController,
108+ controller: widget. scrollController,
104109 shrinkWrap: true ,
105- reverse: inverted,
106- itemCount: messages.length,
110+ reverse: widget. inverted,
111+ itemCount: widget. messages.length,
107112 itemBuilder: (context, i) {
108113 final j = i + 1 ;
109114 bool showAvatar = false ;
110115 bool showDate;
111- if (j < messages.length) {
112- showAvatar = messages[j].user.uid != messages[i].user.uid;
116+ if (j < widget.messages.length) {
117+ showAvatar = widget.messages[j].user.uid !=
118+ widget.messages[i].user.uid;
113119 } else {
114120 showAvatar = true ;
115121 }
116122
117123 if (currentDate == null ) {
118- currentDate = messages[i].createdAt;
124+ currentDate = widget. messages[i].createdAt;
119125 showDate = true ;
120126 } else if (currentDate
121- .difference (messages[i].createdAt)
127+ .difference (widget. messages[i].createdAt)
122128 .inDays !=
123129 0 ) {
124130 showDate = true ;
125- currentDate = messages[i].createdAt;
131+ currentDate = widget. messages[i].createdAt;
126132 } else {
127133 showDate = false ;
128134 }
@@ -131,11 +137,12 @@ class MessageListView extends StatelessWidget {
131137 child: Column (
132138 children: < Widget > [
133139 if (showDate)
134- if (dateBuilder != null )
135- dateBuilder (dateBuilder != null
136- ? dateFormat.format (messages[i].createdAt)
140+ if (widget.dateBuilder != null )
141+ widget.dateBuilder (widget.dateBuilder != null
142+ ? widget.dateFormat
143+ .format (widget.messages[i].createdAt)
137144 : DateFormat ('yyyy-MM-dd' )
138- .format (messages[i].createdAt))
145+ .format (widget. messages[i].createdAt))
139146 else
140147 Container (
141148 decoration: BoxDecoration (
@@ -149,41 +156,45 @@ class MessageListView extends StatelessWidget {
149156 ),
150157 margin: EdgeInsets .symmetric (vertical: 10.0 ),
151158 child: Text (
152- dateBuilder != null
153- ? dateFormat.format (messages[i].createdAt)
159+ widget.dateBuilder != null
160+ ? widget.dateFormat
161+ .format (widget.messages[i].createdAt)
154162 : DateFormat ('MMM dd' )
155- .format (messages[i].createdAt),
163+ .format (widget. messages[i].createdAt),
156164 style: TextStyle (
157165 color: Colors .white,
158166 fontSize: 12.0 ,
159167 ),
160168 ),
161169 ),
162170 Row (
163- mainAxisAlignment: messages[i].user.uid == user.uid
164- ? MainAxisAlignment .end
165- : MainAxisAlignment .start,
171+ mainAxisAlignment:
172+ widget.messages[i].user.uid == widget.user.uid
173+ ? MainAxisAlignment .end
174+ : MainAxisAlignment .start,
166175 crossAxisAlignment: CrossAxisAlignment .center,
167176 children: < Widget > [
168177 Padding (
169178 padding: EdgeInsets .symmetric (horizontal: 10.0 ),
170- child:
171- ((showAvatarForEverMessage || showAvatar) &&
172- messages[i].user.uid != user.uid)
173- ? AvatarContainer (
174- user: messages[i].user,
175- onPress: onPressAvatar,
176- onLongPress: onLongPressAvatar,
177- avatarBuilder: avatarBuilder,
178- )
179- : SizedBox (
180- width: 40.0 ,
181- ),
179+ child: ((widget.showAvatarForEverMessage ||
180+ showAvatar) &&
181+ widget.messages[i].user.uid !=
182+ widget.user.uid)
183+ ? AvatarContainer (
184+ user: widget.messages[i].user,
185+ onPress: widget.onPressAvatar,
186+ onLongPress: widget.onLongPressAvatar,
187+ avatarBuilder: widget.avatarBuilder,
188+ )
189+ : SizedBox (
190+ width: 40.0 ,
191+ ),
182192 ),
183193 GestureDetector (
184194 onLongPress: () {
185- if (onLongPressMessage != null ) {
186- onLongPressMessage (messages[i]);
195+ if (widget.onLongPressMessage != null ) {
196+ widget
197+ .onLongPressMessage (widget.messages[i]);
187198 } else {
188199 showBottomSheet (
189200 context: context,
@@ -199,7 +210,8 @@ class MessageListView extends StatelessWidget {
199210 onTap: () {
200211 Clipboard .setData (
201212 ClipboardData (
202- text: messages[i]
213+ text: widget
214+ .messages[i]
203215 .text));
204216 Navigator .pop (context);
205217 },
@@ -209,34 +221,37 @@ class MessageListView extends StatelessWidget {
209221 ));
210222 }
211223 },
212- child: messageBuilder != null
213- ? messageBuilder (messages[i])
224+ child: widget. messageBuilder != null
225+ ? widget. messageBuilder (widget. messages[i])
214226 : MessageContainer (
215- isUser:
216- messages[i].user.uid == user.uid,
217- message: messages[i],
218- timeFormat: timeFormat,
227+ isUser: widget.messages[i].user.uid ==
228+ widget. user.uid,
229+ message: widget. messages[i],
230+ timeFormat: widget. timeFormat,
219231 messageImageBuilder:
220- messageImageBuilder,
221- messageTextBuilder: messageTextBuilder,
222- messageTimeBuilder: messageTimeBuilder,
232+ widget.messageImageBuilder,
233+ messageTextBuilder:
234+ widget.messageTextBuilder,
235+ messageTimeBuilder:
236+ widget.messageTimeBuilder,
223237 messageContainerDecoration:
224- messageContainerDecoration,
225- parsePatterns: parsePatterns,
238+ widget. messageContainerDecoration,
239+ parsePatterns: widget. parsePatterns,
226240 ),
227241 ),
228- if (showuserAvatar)
242+ if (widget. showuserAvatar)
229243 Padding (
230244 padding:
231245 EdgeInsets .symmetric (horizontal: 10.0 ),
232- child: ((showAvatarForEverMessage ||
246+ child: ((widget. showAvatarForEverMessage ||
233247 showAvatar) &&
234- messages[i].user.uid == user.uid)
248+ widget.messages[i].user.uid ==
249+ widget.user.uid)
235250 ? AvatarContainer (
236- user: messages[i].user,
237- onPress: onPressAvatar,
238- onLongPress: onLongPressAvatar,
239- avatarBuilder: avatarBuilder,
251+ user: widget. messages[i].user,
252+ onPress: widget. onPressAvatar,
253+ onLongPress: widget. onLongPressAvatar,
254+ avatarBuilder: widget. avatarBuilder,
240255 )
241256 : SizedBox (
242257 width: 40.0 ,
@@ -254,13 +269,13 @@ class MessageListView extends StatelessWidget {
254269 },
255270 ),
256271 AnimatedPositioned (
257- top: showLoadMore ? 8.0 : - 50.0 ,
272+ top: widget. showLoadMore ? 8.0 : - 50.0 ,
258273 duration: Duration (milliseconds: 200 ),
259- child: showLoadEarlierWidget != null
260- ? showLoadEarlierWidget ()
274+ child: widget. showLoadEarlierWidget != null
275+ ? widget. showLoadEarlierWidget ()
261276 : LoadEarlierWidget (
262- onLoadEarlier: onLoadEarlier,
263- defaultLoadCallback: defaultLoadCallback,
277+ onLoadEarlier: widget. onLoadEarlier,
278+ defaultLoadCallback: widget. defaultLoadCallback,
264279 ),
265280 ),
266281 ],
0 commit comments