refactor (core <-> ui <-> persistence) with the new filter changes.
Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
@@ -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'),
|
||||
|
||||
Reference in New Issue
Block a user