experiment with streambuilder

This commit is contained in:
Salvatore Giordano
2021-06-01 17:24:26 +02:00
parent 06bf2cdfe5
commit c10166dbff
13 changed files with 342 additions and 234 deletions
@@ -13,14 +13,14 @@ class ConnectionStatusBuilder extends StatelessWidget {
const ConnectionStatusBuilder({
Key? key,
required this.statusBuilder,
this.initialStatus = ConnectionStatus.disconnected,
this.initialStatus,
this.connectionStatusStream,
this.errorBuilder,
this.loadingBuilder,
}) : super(key: key);
/// The connection status that will be used to create the initial snapshot.
final ConnectionStatus initialStatus;
final ConnectionStatus? initialStatus;
/// The asynchronous computation to which this builder is currently connected.
final Stream<ConnectionStatus>? connectionStatusStream;
@@ -37,23 +37,19 @@ class ConnectionStatusBuilder extends StatelessWidget {
@override
Widget build(BuildContext context) {
final stream = connectionStatusStream ??
StreamChat.of(context).client.wsConnectionStatusStream;
return StreamBuilder<ConnectionStatus>(
final client = StreamChat.of(context).client;
final stream = connectionStatusStream ?? client.wsConnectionStatusStream;
return BetterStreamBuilder<ConnectionStatus>(
initialData: initialStatus ?? client.wsConnectionStatus,
stream: stream,
builder: (context, snapshot) {
if (snapshot.hasError) {
if (errorBuilder != null) {
return errorBuilder!(context, snapshot.error);
}
return const Offstage();
loadingBuilder: loadingBuilder,
errorBuilder: (context, error) {
if (errorBuilder != null) {
return errorBuilder!(context, error);
}
if (!snapshot.hasData) {
if (loadingBuilder != null) return loadingBuilder!(context);
return const Offstage();
}
return statusBuilder(context, snapshot.data!);
return const Offstage();
},
builder: statusBuilder,
);
}
}