From bd22ee0fd67ba195a016d86f7df19f52f0a1ac77 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Wed, 16 Sep 2020 10:35:28 +0200 Subject: [PATCH] fix channellistview loading when client is not initialized --- lib/src/channel_list_view.dart | 20 ++++++++++++++++---- lib/src/channels_bloc.dart | 27 ++++++++++++++------------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/lib/src/channel_list_view.dart b/lib/src/channel_list_view.dart index c31c4649..c387594d 100644 --- a/lib/src/channel_list_view.dart +++ b/lib/src/channel_list_view.dart @@ -205,8 +205,20 @@ class _ChannelListViewState extends State } if (!snapshot.hasData) { - return Center( - child: CircularProgressIndicator(), + return LayoutBuilder( + builder: (context, viewportConstraints) { + return SingleChildScrollView( + physics: AlwaysScrollableScrollPhysics(), + child: ConstrainedBox( + constraints: BoxConstraints( + minHeight: viewportConstraints.maxHeight, + ), + child: Center( + child: CircularProgressIndicator(), + ), + ), + ); + }, ); } @@ -374,7 +386,7 @@ class _ChannelListViewState extends State filter: widget.filter, sortOptions: widget.sort, paginationParams: widget.pagination.copyWith( - offset: channelsProvider.channels.length, + offset: channelsProvider.channels?.length ?? 0, ), options: widget.options, ); @@ -426,7 +438,7 @@ class _ChannelListViewState extends State void didUpdateWidget(ChannelListView oldWidget) { super.didUpdateWidget(oldWidget); - if (widget.filter != oldWidget.filter || + if (widget.filter?.toString() != oldWidget.filter?.toString() || widget.sort != oldWidget.sort || widget.pagination != oldWidget.pagination || widget.options != oldWidget.options) { diff --git a/lib/src/channels_bloc.dart b/lib/src/channels_bloc.dart index 0e7ee243..cc2d4f93 100644 --- a/lib/src/channels_bloc.dart +++ b/lib/src/channels_bloc.dart @@ -56,8 +56,7 @@ class ChannelsBlocState extends State final BehaviorSubject _queryChannelsLoadingController = BehaviorSubject.seeded(false); - final BehaviorSubject> _channelsController = - BehaviorSubject.seeded([]); + final BehaviorSubject> _channelsController = BehaviorSubject(); /// The stream notifying the state of queryChannel call Stream get queryChannelsLoading => @@ -73,7 +72,10 @@ class ChannelsBlocState extends State Map options, bool onlyOffline = false, }) async { - if (_queryChannelsLoadingController.value == true) { + final client = StreamChat.of(context).client; + + if (client.state?.user == null || + _queryChannelsLoadingController.value == true) { return; } _queryChannelsLoadingController.sink.add(true); @@ -82,16 +84,15 @@ class ChannelsBlocState extends State final clear = paginationParams == null || paginationParams.offset == null || paginationParams.offset == 0; - final oldChannels = List.from(channels); - StreamChat.of(context) - .client + final oldChannels = List.from(channels ?? []); + client .queryChannels( - filter: filter, - sort: sortOptions, - options: options, - paginationParams: paginationParams, - onlyOffline: onlyOffline, - ) + filter: filter, + sort: sortOptions, + options: options, + paginationParams: paginationParams, + onlyOffline: onlyOffline, + ) .listen((channels) { if (clear) { _channelsController.add(channels); @@ -139,7 +140,7 @@ class ChannelsBlocState extends State } _subscriptions.add(client.on(EventType.channelHidden).listen((event) async { - final newChannels = List.from(channels); + final newChannels = List.from(channels ?? []); final channelIndex = newChannels.indexWhere((c) => c.cid == event.cid); if (channelIndex > -1) { final channel = newChannels.removeAt(channelIndex);