refactor (core <-> ui <-> persistence) with the new filter changes.

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-04-27 15:41:00 +05:30
parent f683961581
commit 8c666caa52
24 changed files with 180 additions and 195 deletions
@@ -3,7 +3,7 @@ analyzer:
- lib/**/*.g.dart
- lib/**/*.freezed.dart
- example/*
- test/*
linter:
rules:
- always_use_package_imports
@@ -78,14 +78,12 @@ class HomeScreen extends StatelessWidget {
body: ChannelsBloc(
child: ChannelListCore(
channelListController: channelListController,
filter: {
'type': 'messaging',
'members': {
r'$in': [
StreamChatCore.of(context).user!.id,
]
}
},
filter: Filter.and([
Filter.equal('type', 'messaging'),
Filter.in_('members', [
StreamChatCore.of(context).user!.id,
])
]),
emptyBuilder: (BuildContext context) {
return Center(
child: Text('Looks like you are not in any channels'),
@@ -92,7 +92,7 @@ class ChannelListCore extends StatefulWidget {
/// The query filters to use.
/// You can query on any of the custom fields you've defined on the [Channel].
/// You can also filter other built-in channel fields.
final Map<String, dynamic>? filter;
final Filter? filter;
/// Query channels options.
///
@@ -88,7 +88,7 @@ class ChannelsBlocState extends State<ChannelsBloc>
/// Calls [client.queryChannels] updating [queryChannelsLoading] stream
Future<void> queryChannels({
Map<String, dynamic>? filter,
Filter? filter,
List<SortOption<ChannelModel>>? sortOptions,
PaginationParams paginationParams = const PaginationParams(limit: 30),
Map<String, dynamic>? options,
@@ -160,9 +160,8 @@ class ChannelsBlocState extends State<ChannelsBloc>
newChannels.insert(0, _hiddenChannels[hiddenIndex]);
_hiddenChannels.removeAt(hiddenIndex);
} else {
if (client.state.channels != null &&
client.state.channels?[e.cid] != null) {
newChannels.insert(0, client.state.channels![e.cid]!);
if (client.state.channels[e.cid] != null) {
newChannels.insert(0, client.state.channels[e.cid]!);
}
}
}
@@ -9,7 +9,7 @@ import 'package:stream_chat_flutter_core/src/stream_chat_core.dart';
/// [MessageSearchBloc] can be access at anytime by using the static [of] method
/// using Flutter's [BuildContext].
///
// API docs: https://getstream.io/chat/docs/flutter-dart/send_message/
/// API docs: https://getstream.io/chat/docs/flutter-dart/send_message/
class MessageSearchBloc extends StatefulWidget {
/// Instantiate a new MessageSearchBloc
const MessageSearchBloc({
@@ -58,7 +58,7 @@ class MessageSearchBlocState extends State<MessageSearchBloc>
/// Calls [StreamChatClient.search] updating
/// [messagesStream] and [queryMessagesLoading] stream
Future<void> search({
required Map<String, dynamic> filter,
required Filter filter,
Map<String, dynamic>? messageFilter,
List<SortOption>? sort,
String? query,
@@ -67,7 +67,7 @@ class MessageSearchListCore extends StatefulWidget {
/// The query filters to use.
/// You can query on any of the custom fields you've defined on the [Channel].
/// You can also filter other built-in channel fields.
final Map<String, dynamic> filters;
final Filter filters;
/// The sorting used for the channels matching the filters.
/// Sorting is based on field and direction, multiple sorting options can be
@@ -24,7 +24,7 @@ void main() {
client,
'testType$index',
'testId$index',
{'extra_data_key': 'extra_data_value_$index'},
extraData: {'extra_data_key': 'extra_data_value_$index'},
);
},
);
@@ -26,7 +26,7 @@ void main() {
client,
'testType$index',
'testId$index',
{'extra_data_key': 'extra_data_value_$index'},
extraData: {'extra_data_key': 'extra_data_value_$index'},
);
},
);
@@ -703,7 +703,7 @@ void main() {
final mockClient = MockClient();
final channels = _generateChannels(mockClient);
final stateChannels = {
for (var c in _generateChannels(mockClient, offset: 5)) c.cid: c
for (var c in _generateChannels(mockClient, offset: 5)) c.cid!: c
};
const channelsBlocKey = Key('channelsBloc');
final channelsBloc = ChannelsBloc(
@@ -8,6 +8,8 @@ import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'matchers/get_message_response_matcher.dart';
import 'mocks.dart';
final testFilter = Filter.custom(operator: '\$test', value: 'testValue');
void main() {
List<GetMessageResponse> _generateMessages({
int count = 3,
@@ -50,7 +52,7 @@ void main() {
);
try {
await usersBlocState.search(filter: {});
await usersBlocState.search(filter: testFilter);
} catch (e) {
expect(e, isInstanceOf<Exception>());
}
@@ -82,7 +84,7 @@ void main() {
final messageResponseList = _generateMessages();
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -91,7 +93,7 @@ void main() {
(_) async => SearchMessagesResponse()..results = messageResponseList,
);
messageSearchBlocState.search(filter: {});
messageSearchBlocState.search(filter: testFilter);
await expectLater(
messageSearchBlocState.messagesStream,
@@ -99,7 +101,7 @@ void main() {
);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -133,14 +135,14 @@ void main() {
const error = 'Error! Error! Error!';
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
paginationParams: any(named: 'paginationParams'),
)).thenThrow(error);
messageSearchBlocState.search(filter: {});
messageSearchBlocState.search(filter: testFilter);
await expectLater(
messageSearchBlocState.messagesStream,
@@ -148,7 +150,7 @@ void main() {
);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -185,7 +187,7 @@ void main() {
final messageResponseList = _generateMessages();
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -194,7 +196,7 @@ void main() {
(_) async => SearchMessagesResponse()..results = messageResponseList,
);
messageSearchBlocState.search(filter: {});
messageSearchBlocState.search(filter: testFilter);
await expectLater(
messageSearchBlocState.messagesStream,
@@ -202,7 +204,7 @@ void main() {
);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -214,7 +216,7 @@ void main() {
final pagination = PaginationParams(offset: offset);
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -224,7 +226,7 @@ void main() {
SearchMessagesResponse()..results = paginatedMessageResponseList,
);
messageSearchBlocState.search(pagination: pagination, filter: {});
messageSearchBlocState.search(pagination: pagination, filter: testFilter);
await Future.wait([
expectLater(
@@ -240,7 +242,7 @@ void main() {
]);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -277,7 +279,7 @@ void main() {
final messageResponseList = _generateMessages();
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -286,7 +288,7 @@ void main() {
(_) async => SearchMessagesResponse()..results = messageResponseList,
);
messageSearchBlocState.search(filter: {});
messageSearchBlocState.search(filter: testFilter);
await expectLater(
messageSearchBlocState.messagesStream,
@@ -294,7 +296,7 @@ void main() {
);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -306,14 +308,14 @@ void main() {
const error = 'Error! Error! Error!';
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
paginationParams: pagination,
)).thenThrow(error);
messageSearchBlocState.search(pagination: pagination, filter: {});
messageSearchBlocState.search(pagination: pagination, filter: testFilter);
await expectLater(
messageSearchBlocState.queryMessagesLoading,
@@ -321,7 +323,7 @@ void main() {
);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -6,6 +6,8 @@ import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'mocks.dart';
final testFilter = Filter.custom(operator: '\$test', value: 'testValue');
void main() {
List<GetMessageResponse> _generateMessages({
int count = 3,
@@ -37,7 +39,7 @@ void main() {
loadingBuilder: (BuildContext context) => const Offstage(),
emptyBuilder: (BuildContext context) => const Offstage(),
errorBuilder: (BuildContext context, Object? error) => const Offstage(),
filters: const {},
filters: testFilter,
);
await tester.pumpWidget(messageSearchListCore);
@@ -58,7 +60,7 @@ void main() {
loadingBuilder: (BuildContext context) => Offstage(),
emptyBuilder: (BuildContext context) => Offstage(),
errorBuilder: (BuildContext context, Object? error) => Offstage(),
filters: {},
filters: testFilter,
);
final mockClient = MockClient();
@@ -89,7 +91,7 @@ void main() {
emptyBuilder: (BuildContext context) => Offstage(),
errorBuilder: (BuildContext context, Object error) => Offstage(),
messageSearchListController: controller,
filters: {},
filters: testFilter,
);
expect(controller.loadData, isNull);
@@ -125,14 +127,14 @@ void main() {
errorBuilder: (BuildContext context, Object error) => Offstage(
key: errorWidgetKey,
),
filters: {},
filters: testFilter,
);
final mockClient = MockClient();
const error = 'Error! Error! Error!';
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -153,7 +155,7 @@ void main() {
expect(find.byKey(errorWidgetKey), findsOneWidget);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -174,14 +176,14 @@ void main() {
loadingBuilder: (BuildContext context) => Offstage(),
emptyBuilder: (BuildContext context) => Offstage(key: emptyWidgetKey),
errorBuilder: (BuildContext context, Object error) => Offstage(),
filters: {},
filters: testFilter,
);
final mockClient = MockClient();
final messageResponseList = <GetMessageResponse>[];
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -204,7 +206,7 @@ void main() {
expect(find.byKey(emptyWidgetKey), findsOneWidget);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -226,14 +228,14 @@ void main() {
loadingBuilder: (BuildContext context) => Offstage(),
emptyBuilder: (BuildContext context) => Offstage(),
errorBuilder: (BuildContext context, Object error) => Offstage(),
filters: {},
filters: testFilter,
);
final mockClient = MockClient();
final messageResponseList = _generateMessages();
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -256,7 +258,7 @@ void main() {
expect(find.byKey(childWidgetKey), findsOneWidget);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -284,14 +286,14 @@ void main() {
emptyBuilder: (BuildContext context) => Offstage(),
errorBuilder: (BuildContext context, Object error) => Offstage(),
paginationParams: pagination,
filters: {},
filters: testFilter,
);
final mockClient = MockClient();
final messageResponseList = _generateMessages();
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -325,7 +327,7 @@ void main() {
);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -341,7 +343,7 @@ void main() {
final paginatedMessageResponseList = _generateMessages(offset: offset);
final updatedPagination = pagination.copyWith(offset: offset);
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -365,7 +367,7 @@ void main() {
);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -400,14 +402,14 @@ void main() {
emptyBuilder: (BuildContext context) => Offstage(),
errorBuilder: (BuildContext context, Object error) => Offstage(),
paginationParams: pagination.copyWith(limit: limit),
filters: {},
filters: testFilter,
);
final mockClient = MockClient();
final messageResponseList = _generateMessages();
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -445,7 +447,7 @@ void main() {
);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -458,7 +460,7 @@ void main() {
final updatedMessageResponseList = _generateMessages(count: limit);
final updatedPagination = pagination.copyWith(limit: limit);
when(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),
@@ -479,7 +481,7 @@ void main() {
);
verify(() => mockClient.search(
any(),
testFilter,
query: any(named: 'query'),
sort: any(named: 'sort'),
messageFilters: any(named: 'messageFilters'),