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? 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( initialData: client.wsConnectionStatus, stream: stream, loadingBuilder: loadingBuilder, errorBuilder: (context, error) { if (errorBuilder != null) { return errorBuilder!(context, error); } return const Offstage(); }, builder: statusBuilder, ); } }