52 lines
1.8 KiB
Dart
52 lines
1.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
|
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
|
|
|
|
/// Widget that builds itself based on the latest snapshot of interaction with
|
|
/// a [Stream] of type [ConnectionStatus].
|
|
///
|
|
/// The widget will use the closest [StreamChatClient.wsConnectionStatusStream]
|
|
/// in case no stream is provided.
|
|
class ConnectionStatusBuilder extends StatelessWidget {
|
|
/// Creates a new ConnectionStatusBuilder
|
|
const ConnectionStatusBuilder({
|
|
Key? key,
|
|
required this.statusBuilder,
|
|
this.connectionStatusStream,
|
|
this.errorBuilder,
|
|
this.loadingBuilder,
|
|
}) : super(key: key);
|
|
|
|
/// The asynchronous computation to which this builder is currently connected.
|
|
final Stream<ConnectionStatus>? connectionStatusStream;
|
|
|
|
/// The builder that will be used in case of error
|
|
final Widget Function(BuildContext context, Object? error)? errorBuilder;
|
|
|
|
/// The builder that will be used in case of loading
|
|
final WidgetBuilder? loadingBuilder;
|
|
|
|
/// The builder that will be used in case of data
|
|
final Widget Function(BuildContext context, ConnectionStatus status)
|
|
statusBuilder;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final stream = connectionStatusStream ??
|
|
StreamChat.of(context).client.wsConnectionStatusStream;
|
|
final client = StreamChat.of(context).client;
|
|
return BetterStreamBuilder<ConnectionStatus>(
|
|
initialData: client.wsConnectionStatus,
|
|
stream: stream,
|
|
loadingBuilder: loadingBuilder,
|
|
errorBuilder: (context, error) {
|
|
if (errorBuilder != null) {
|
|
return errorBuilder!(context, error);
|
|
}
|
|
return const Offstage();
|
|
},
|
|
builder: statusBuilder,
|
|
);
|
|
}
|
|
}
|