-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathcontacts_screen_page.dart
More file actions
73 lines (66 loc) · 2.83 KB
/
Copy pathcontacts_screen_page.dart
File metadata and controls
73 lines (66 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import 'package:flutter/material.dart';
import 'package:auto_route/auto_route.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:webtrit_phone/app/router/app_router.dart';
import 'package:webtrit_phone/blocs/blocs.dart';
import 'package:webtrit_phone/environment_config.dart';
import 'package:webtrit_phone/extensions/extensions.dart';
import 'package:webtrit_phone/features/features.dart';
import 'package:webtrit_phone/models/models.dart';
import 'package:webtrit_phone/repositories/repositories.dart';
@RoutePage()
class ContactsScreenPage extends StatelessWidget {
// ignore: use_key_in_widget_constructors
const ContactsScreenPage({required this.sourceTypes});
final List<ContactSourceType> sourceTypes;
static PageRouteInfo<dynamic>? getPageRouteInfo(RouteMatch route, List<ContactSourceType> Function() sourceTypes) {
final featureRoute = route.findRouteWithRequiredParams(ContactsScreenPageRoute.page);
return featureRoute != null ? ContactsScreenPageRoute(sourceTypes: sourceTypes()) : null;
}
@override
Widget build(BuildContext context) {
final widget = ContactsScreen(
title: Text(EnvironmentConfig.APP_NAME),
sourceTypes: sourceTypes,
sourceTypeWidgetBuilder: _contactSourceTypeWidgetBuilder,
);
final provider = BlocProvider(
create: (context) =>
ContactsBloc(activeContactSourceTypeRepository: context.read<ActiveContactSourceTypeRepository>()),
child: widget,
);
return provider;
}
Widget _contactSourceTypeWidgetBuilder(BuildContext context, ContactSourceType sourceType) {
switch (sourceType) {
case ContactSourceType.local:
const widget = ContactsLocalTab();
final provider = BlocProvider(
create: (context) {
final contactsSearchBloc = context.read<ContactsBloc>();
return ContactsLocalTabBloc(
contactsRepository: context.read<ContactsRepository>(),
contactsSearchBloc: contactsSearchBloc,
localContactsSyncBloc: context.read<LocalContactsSyncBloc>(),
)..add(ContactsLocalTabStarted(search: contactsSearchBloc.state.search));
},
child: widget,
);
return provider;
case ContactSourceType.external:
const widget = ContactsExternalTab();
final provider = BlocProvider(
create: (context) {
final contactsSearchBloc = context.read<ContactsBloc>();
return ContactsExternalTabBloc(
contactsRepository: context.read<ContactsRepository>(),
contactsSearchBloc: contactsSearchBloc,
externalContactsSyncBloc: context.read<ExternalContactsSyncBloc>(),
)..add(ContactsExternalTabStarted(search: contactsSearchBloc.state.search));
},
child: widget,
);
return provider;
}
}
}