Merge pull request #511 from GetStream/hotfix/userListErrors
This commit is contained in:
@@ -128,7 +128,7 @@ class UserListView extends StatefulWidget {
|
|||||||
final int crossAxisCount;
|
final int crossAxisCount;
|
||||||
|
|
||||||
/// The builder that will be used in case of error
|
/// The builder that will be used in case of error
|
||||||
final Widget Function(Error error)? errorBuilder;
|
final ErrorBuilder? errorBuilder;
|
||||||
|
|
||||||
/// The builder that will be used to build the list
|
/// The builder that will be used to build the list
|
||||||
final Widget Function(BuildContext context, List<ListItem> users)?
|
final Widget Function(BuildContext context, List<ListItem> users)?
|
||||||
@@ -153,8 +153,8 @@ class _UserListViewState extends State<UserListView>
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final child = UserListCore(
|
final child = UserListCore(
|
||||||
errorBuilder: widget.errorBuilder as Widget Function(Object)? ??
|
errorBuilder: widget.errorBuilder ??
|
||||||
(err) => _buildError(err as Error),
|
(BuildContext context, Object err) => _buildError(err),
|
||||||
emptyBuilder: widget.emptyBuilder ?? (context) => _buildEmpty(),
|
emptyBuilder: widget.emptyBuilder ?? (context) => _buildEmpty(),
|
||||||
loadingBuilder: widget.loadingBuilder ??
|
loadingBuilder: widget.loadingBuilder ??
|
||||||
(context) => LayoutBuilder(
|
(context) => LayoutBuilder(
|
||||||
@@ -194,52 +194,33 @@ class _UserListViewState extends State<UserListView>
|
|||||||
bool get isListAlreadySorted =>
|
bool get isListAlreadySorted =>
|
||||||
widget.sort?.any((e) => e.field == 'name' && e.direction == 1) ?? false;
|
widget.sort?.any((e) => e.field == 'name' && e.direction == 1) ?? false;
|
||||||
|
|
||||||
Widget _buildError(Error error) {
|
Widget _buildError(Object error) => Center(
|
||||||
print(error.stackTrace);
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
var message = error.toString();
|
children: <Widget>[
|
||||||
if (error is DioError) {
|
Text.rich(
|
||||||
final dioError = error as DioError;
|
const TextSpan(
|
||||||
if (dioError.type == DioErrorType.response) {
|
children: [
|
||||||
message = dioError.message;
|
WidgetSpan(
|
||||||
} else {
|
child: Padding(
|
||||||
message = 'Check your connection and retry';
|
padding: EdgeInsets.only(
|
||||||
}
|
right: 2,
|
||||||
}
|
),
|
||||||
return Center(
|
child: Icon(Icons.error_outline),
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: <Widget>[
|
|
||||||
Text.rich(
|
|
||||||
const TextSpan(
|
|
||||||
children: [
|
|
||||||
WidgetSpan(
|
|
||||||
child: Padding(
|
|
||||||
padding: EdgeInsets.only(
|
|
||||||
right: 2,
|
|
||||||
),
|
),
|
||||||
child: Icon(Icons.error_outline),
|
|
||||||
),
|
),
|
||||||
),
|
TextSpan(text: 'Error loading users'),
|
||||||
TextSpan(text: 'Error loading channels'),
|
],
|
||||||
],
|
),
|
||||||
|
style: Theme.of(context).textTheme.headline6,
|
||||||
),
|
),
|
||||||
style: Theme.of(context).textTheme.headline6,
|
TextButton(
|
||||||
),
|
onPressed: () => _userListController.loadData!(),
|
||||||
Padding(
|
child: const Text('Retry'),
|
||||||
padding: const EdgeInsets.only(
|
|
||||||
top: 16,
|
|
||||||
),
|
),
|
||||||
child: Text(message),
|
],
|
||||||
),
|
),
|
||||||
TextButton(
|
);
|
||||||
onPressed: () => _userListController.loadData!(),
|
|
||||||
child: const Text('Retry'),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildEmpty() => LayoutBuilder(
|
Widget _buildEmpty() => LayoutBuilder(
|
||||||
builder: (context, viewportConstraints) => SingleChildScrollView(
|
builder: (context, viewportConstraints) => SingleChildScrollView(
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:flutter/foundation.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:stream_chat/stream_chat.dart';
|
import 'package:stream_chat/stream_chat.dart';
|
||||||
import 'package:stream_chat_flutter_core/src/users_bloc.dart';
|
import 'package:stream_chat_flutter_core/src/users_bloc.dart';
|
||||||
|
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
|
||||||
|
|
||||||
///
|
///
|
||||||
/// [UserListCore] is a simplified class that allows fetching users while
|
/// [UserListCore] is a simplified class that allows fetching users while
|
||||||
@@ -76,7 +77,7 @@ class UserListCore extends StatefulWidget {
|
|||||||
final UserListController? userListController;
|
final UserListController? userListController;
|
||||||
|
|
||||||
/// The builder that will be used in case of error
|
/// The builder that will be used in case of error
|
||||||
final Widget Function(Object error) errorBuilder;
|
final ErrorBuilder errorBuilder;
|
||||||
|
|
||||||
/// The builder that will be used to build the list
|
/// The builder that will be used to build the list
|
||||||
final Widget Function(BuildContext context, List<ListItem> users) listBuilder;
|
final Widget Function(BuildContext context, List<ListItem> users) listBuilder;
|
||||||
@@ -170,7 +171,7 @@ class UserListCoreState extends State<UserListCore>
|
|||||||
stream: _buildUserStream(),
|
stream: _buildUserStream(),
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
if (snapshot.hasError) {
|
if (snapshot.hasError) {
|
||||||
return widget.errorBuilder(snapshot.error!);
|
return widget.errorBuilder(context, snapshot.error!);
|
||||||
}
|
}
|
||||||
if (!snapshot.hasData) {
|
if (!snapshot.hasData) {
|
||||||
return widget.loadingBuilder(context);
|
return widget.loadingBuilder(context);
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ void main() {
|
|||||||
listBuilder: (_, __) => Offstage(),
|
listBuilder: (_, __) => Offstage(),
|
||||||
loadingBuilder: (BuildContext context) => Offstage(),
|
loadingBuilder: (BuildContext context) => Offstage(),
|
||||||
emptyBuilder: (BuildContext context) => Offstage(),
|
emptyBuilder: (BuildContext context) => Offstage(),
|
||||||
errorBuilder: (Object error) => Offstage(),
|
errorBuilder: (BuildContext context, Object error) => Offstage(),
|
||||||
);
|
);
|
||||||
|
|
||||||
await tester.pumpWidget(userListCore);
|
await tester.pumpWidget(userListCore);
|
||||||
@@ -62,7 +62,7 @@ void main() {
|
|||||||
listBuilder: (_, __) => Offstage(),
|
listBuilder: (_, __) => Offstage(),
|
||||||
loadingBuilder: (BuildContext context) => Offstage(),
|
loadingBuilder: (BuildContext context) => Offstage(),
|
||||||
emptyBuilder: (BuildContext context) => Offstage(),
|
emptyBuilder: (BuildContext context) => Offstage(),
|
||||||
errorBuilder: (Object error) => Offstage(),
|
errorBuilder: (BuildContext context, Object error) => Offstage(),
|
||||||
);
|
);
|
||||||
|
|
||||||
final mockClient = MockClient();
|
final mockClient = MockClient();
|
||||||
@@ -91,7 +91,7 @@ void main() {
|
|||||||
listBuilder: (_, __) => Offstage(),
|
listBuilder: (_, __) => Offstage(),
|
||||||
loadingBuilder: (BuildContext context) => Offstage(),
|
loadingBuilder: (BuildContext context) => Offstage(),
|
||||||
emptyBuilder: (BuildContext context) => Offstage(),
|
emptyBuilder: (BuildContext context) => Offstage(),
|
||||||
errorBuilder: (Object error) => Offstage(),
|
errorBuilder: (BuildContext context, Object error) => Offstage(),
|
||||||
userListController: controller,
|
userListController: controller,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -125,7 +125,8 @@ void main() {
|
|||||||
listBuilder: (_, __) => Offstage(),
|
listBuilder: (_, __) => Offstage(),
|
||||||
loadingBuilder: (BuildContext context) => Offstage(),
|
loadingBuilder: (BuildContext context) => Offstage(),
|
||||||
emptyBuilder: (BuildContext context) => Offstage(),
|
emptyBuilder: (BuildContext context) => Offstage(),
|
||||||
errorBuilder: (Object error) => Container(key: errorWidgetKey),
|
errorBuilder: (BuildContext context, Object error) =>
|
||||||
|
Container(key: errorWidgetKey),
|
||||||
);
|
);
|
||||||
|
|
||||||
final mockClient = MockClient();
|
final mockClient = MockClient();
|
||||||
@@ -170,7 +171,7 @@ void main() {
|
|||||||
listBuilder: (_, __) => Offstage(),
|
listBuilder: (_, __) => Offstage(),
|
||||||
loadingBuilder: (BuildContext context) => Offstage(),
|
loadingBuilder: (BuildContext context) => Offstage(),
|
||||||
emptyBuilder: (BuildContext context) => Container(key: emptyWidgetKey),
|
emptyBuilder: (BuildContext context) => Container(key: emptyWidgetKey),
|
||||||
errorBuilder: (Object error) => Offstage(),
|
errorBuilder: (BuildContext context, Object error) => Offstage(),
|
||||||
);
|
);
|
||||||
|
|
||||||
final mockClient = MockClient();
|
final mockClient = MockClient();
|
||||||
@@ -215,7 +216,7 @@ void main() {
|
|||||||
listBuilder: (_, __) => Container(key: listWidgetKey),
|
listBuilder: (_, __) => Container(key: listWidgetKey),
|
||||||
loadingBuilder: (BuildContext context) => Offstage(),
|
loadingBuilder: (BuildContext context) => Offstage(),
|
||||||
emptyBuilder: (BuildContext context) => Offstage(),
|
emptyBuilder: (BuildContext context) => Offstage(),
|
||||||
errorBuilder: (Object error) => Offstage(),
|
errorBuilder: (BuildContext context, Object error) => Offstage(),
|
||||||
);
|
);
|
||||||
|
|
||||||
final mockClient = MockClient();
|
final mockClient = MockClient();
|
||||||
@@ -273,7 +274,7 @@ void main() {
|
|||||||
),
|
),
|
||||||
loadingBuilder: (BuildContext context) => Offstage(),
|
loadingBuilder: (BuildContext context) => Offstage(),
|
||||||
emptyBuilder: (BuildContext context) => Offstage(),
|
emptyBuilder: (BuildContext context) => Offstage(),
|
||||||
errorBuilder: (Object error) => Offstage(),
|
errorBuilder: (BuildContext context, Object error) => Offstage(),
|
||||||
groupAlphabetically: true,
|
groupAlphabetically: true,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -341,7 +342,7 @@ void main() {
|
|||||||
),
|
),
|
||||||
loadingBuilder: (BuildContext context) => Offstage(),
|
loadingBuilder: (BuildContext context) => Offstage(),
|
||||||
emptyBuilder: (BuildContext context) => Offstage(),
|
emptyBuilder: (BuildContext context) => Offstage(),
|
||||||
errorBuilder: (Object error) => Offstage(),
|
errorBuilder: (BuildContext context, Object error) => Offstage(),
|
||||||
pagination: pagination,
|
pagination: pagination,
|
||||||
groupAlphabetically: true,
|
groupAlphabetically: true,
|
||||||
);
|
);
|
||||||
@@ -446,7 +447,7 @@ void main() {
|
|||||||
),
|
),
|
||||||
loadingBuilder: (BuildContext context) => Offstage(),
|
loadingBuilder: (BuildContext context) => Offstage(),
|
||||||
emptyBuilder: (BuildContext context) => Offstage(),
|
emptyBuilder: (BuildContext context) => Offstage(),
|
||||||
errorBuilder: (Object error) => Offstage(),
|
errorBuilder: (BuildContext context, Object error) => Offstage(),
|
||||||
pagination: pagination.copyWith(limit: limit),
|
pagination: pagination.copyWith(limit: limit),
|
||||||
groupAlphabetically: true,
|
groupAlphabetically: true,
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user