Merge pull request #239 from GetStream/nash/message-core-error-builder

Expose error callback in MessageList
This commit is contained in:
Salvatore Giordano
2021-01-28 12:04:19 +01:00
committed by GitHub
2 changed files with 29 additions and 5 deletions
@@ -227,6 +227,16 @@ class _MessageScreenState extends State<MessageScreen> {
}, },
); );
}, },
errorWidgetBuilder: (BuildContext context, error) {
print(error?.toString());
return Center(
child: SizedBox(
height: 100.0,
width: 100.0,
child: Text('Oh no, an error occured. Please see logs.'),
),
);
},
), ),
), ),
Padding( Padding(
@@ -5,6 +5,12 @@ import 'package:flutter/material.dart';
import 'package:stream_chat/stream_chat.dart'; import 'package:stream_chat/stream_chat.dart';
import 'stream_channel.dart'; import 'stream_channel.dart';
/// A signature for a callback which exposes an error and returns a function.
/// This Callback can be used in cases where an API failure occurs and the widget
/// is unable to render data.
typedef StreamErrorBuilder = Widget Function(
BuildContext context, Object error);
/// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/screenshots/message_listview.png) /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/screenshots/message_listview.png)
/// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/screenshots/message_listview_paint.png) /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/screenshots/message_listview_paint.png)
/// ///
@@ -61,6 +67,7 @@ class MessageListCore extends StatefulWidget {
@required this.loadingBuilder, @required this.loadingBuilder,
@required this.emptyBuilder, @required this.emptyBuilder,
@required this.messageListBuilder, @required this.messageListBuilder,
@required this.errorWidgetBuilder,
this.messageListController, this.messageListController,
}) : super(key: key); }) : super(key: key);
@@ -77,6 +84,11 @@ class MessageListCore extends StatefulWidget {
/// Function used to build an empty widget /// Function used to build an empty widget
final WidgetBuilder emptyBuilder; final WidgetBuilder emptyBuilder;
/// Callback triggered when an error occurs while performing the given request.
/// This parameter can be used to display an error message to users in the event
/// of a connection failure.
final StreamErrorBuilder errorWidgetBuilder;
/// If true will show a scroll to bottom message when there are new messages and the scroll offset is not zero /// If true will show a scroll to bottom message when there are new messages and the scroll offset is not zero
final bool showScrollToBottom; final bool showScrollToBottom;
@@ -118,9 +130,10 @@ class _MessageListCoreState extends State<MessageListCore> {
?.toList()), ?.toList()),
builder: (context, snapshot) { builder: (context, snapshot) {
if (!snapshot.hasData) { if (!snapshot.hasData) {
return widget.loadingBuilder(context); return widget.loadingBuilder(context);
} } else if (snapshot.hasError) {
return widget.errorWidgetBuilder(context, snapshot.error);
} else {
final messageList = snapshot.data?.reversed?.toList() ?? []; final messageList = snapshot.data?.reversed?.toList() ?? [];
if (messageList.isEmpty) { if (messageList.isEmpty) {
if (_upToDate) { if (_upToDate) {
@@ -129,9 +142,10 @@ class _MessageListCoreState extends State<MessageListCore> {
} else { } else {
messages = messageList; messages = messageList;
} }
return widget.messageListBuilder(context, messages); return widget.messageListBuilder(context, messages);
}); }
},
);
} }
Future<void> paginateData( Future<void> paginateData(