Skip to content

Commit 9cba74e

Browse files
committed
chore: routing
1 parent fa298c5 commit 9cba74e

8 files changed

Lines changed: 82 additions & 51 deletions

File tree

lib/app/router/router.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,20 @@ final router = GoRouter(
6565
name: Routes.medicationDetail.name,
6666
path: Routes.medicationDetail.path,
6767
pageBuilder: (context, state) {
68+
log('call with params: ${state.queryParameters}');
6869
final stateBloc = context.read<SearchMedicationResultBloc>().state;
6970
if (stateBloc is AvailableSearchMedicationResultState) {
7071
final medicamento = stateBloc.medicamentos.firstWhereOrNull(
7172
(element) =>
7273
element.registerNumber == state.queryParameters['nregistro'],
7374
);
7475
if (medicamento == null) {
75-
return const MaterialPage(child: Text('not found'));
76+
log('mediation not found');
77+
return const MaterialPage(child: Center(child: Text('not found')));
7678
}
79+
context.read<MedicationDetailBloc>().add(
80+
FetchMedicamento(nregistro: medicamento.registerNumber),
81+
);
7782
return MedicationDetailPage.page(medication: medicamento);
7883
} else {
7984
log('medication not found');

lib/app/view/app.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:cima_client/app/router/router.dart';
22
import 'package:cima_client/l10n/l10n.dart';
3+
import 'package:cima_client/medication_detail/medication_detail.dart';
34
import 'package:cima_client/search_result/bloc/search_medication_result_bloc.dart';
45
import 'package:cima_client/theme/theme.dart';
56
import 'package:cima_repository/cima_repository.dart';
@@ -30,6 +31,10 @@ class App extends StatelessWidget {
3031
create: (context) =>
3132
SearchMedicationResultBloc(cimaRepository: cimaRepository),
3233
),
34+
BlocProvider(
35+
create: (context) =>
36+
MedicationDetailBloc(cimaRepository: cimaRepository),
37+
)
3338
],
3439
child: BlocBuilder<ThemeAppCubit, ThemeAppState>(
3540
builder: (context, state) {

lib/home/views/home_page.dart

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import 'package:cima_client/home/home.dart';
21
import 'package:cima_client/l10n/l10n.dart';
32
import 'package:cima_client/search/search.dart';
3+
import 'package:cima_client/search_result/bloc/search_medication_result_bloc.dart';
44
import 'package:flutter/material.dart';
5+
import 'package:flutter_bloc/flutter_bloc.dart';
56

67
class HomePage extends StatelessWidget {
78
const HomePage({super.key});
@@ -14,17 +15,17 @@ class HomePage extends StatelessWidget {
1415
return Scaffold(
1516
appBar: AppBar(
1617
title: Text(l10n.home_page_title),
17-
actions: [
18-
IconButton(
19-
icon: const Icon(Icons.search),
20-
onPressed: () {
21-
showSearch(
22-
context: context,
23-
delegate: MedicationSearchDelegate(),
24-
);
25-
},
26-
),
27-
],
18+
// actions: [
19+
// IconButton(
20+
// icon: const Icon(Icons.search),
21+
// onPressed: () {
22+
// showSearch(
23+
// context: context,
24+
// delegate: MedicationSearchDelegate(),
25+
// );
26+
// },
27+
// ),
28+
// ],
2829
),
2930
body: Padding(
3031
padding: const EdgeInsets.all(16),
@@ -44,11 +45,11 @@ class HomePage extends StatelessWidget {
4445
style: Theme.of(context).textTheme.bodyMedium,
4546
),
4647
const SizedBox(height: 16),
47-
const LinksRowWidget(),
48+
// const LinksRowWidget(),
4849
],
4950
),
5051
),
51-
drawer: const DrawerWidget(),
52+
// drawer: const DrawerWidget(),
5253
floatingActionButton: Row(
5354
mainAxisAlignment: MainAxisAlignment.end,
5455
children: [
@@ -57,7 +58,9 @@ class HomePage extends StatelessWidget {
5758
onPressed: () {
5859
showSearch(
5960
context: context,
60-
delegate: MedicationSearchDelegate(),
61+
delegate: MedicationSearchDelegate(
62+
context.read<SearchMedicationResultBloc>(),
63+
),
6164
);
6265
},
6366
child: const Icon(Icons.search),

lib/medication_detail/bloc/medication_detail_state.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,9 @@ class AvailableMedicationDetailState extends MedicationDetailState {
2020

2121
@override
2222
List<Object> get props => [super.props, medicamento];
23+
24+
@override
25+
String toString() {
26+
return medicamento.name;
27+
}
2328
}

lib/medication_detail/views/medication_detail_page.dart

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import 'package:cima_client/common/widgets/cima_loading.dart';
12
import 'package:cima_client/l10n/l10n.dart';
23
import 'package:cima_client/medication_detail/medication_detail.dart';
34
import 'package:cima_model/cima_model.dart';
4-
import 'package:cima_repository/cima_repository.dart';
55
import 'package:flutter/material.dart';
66
import 'package:flutter_bloc/flutter_bloc.dart';
77
import 'package:share_plus/share_plus.dart';
@@ -20,29 +20,33 @@ class MedicationDetailPage extends StatelessWidget {
2020
@override
2121
Widget build(BuildContext context) {
2222
final l10n = context.l10n;
23-
return BlocProvider(
24-
create: (context) =>
25-
MedicationDetailBloc(cimaRepository: context.read<CimaRepository>())
26-
..add(
27-
FetchMedicamento(
28-
nregistro: medication.registerNumber,
29-
),
23+
return Scaffold(
24+
appBar: AppBar(
25+
title: Text(l10n.medication_detail_page_title),
26+
actions: [
27+
IconButton(
28+
icon: const Icon(Icons.share),
29+
onPressed: () => Share.share(
30+
'https://cima.aemps.es/cima/publico/detalle.html?'
31+
'nregistro=${medication.registerNumber}',
32+
subject: medication.name,
3033
),
31-
child: Scaffold(
32-
appBar: AppBar(
33-
title: Text(l10n.medication_detail_page_title),
34-
actions: [
35-
IconButton(
36-
icon: const Icon(Icons.share),
37-
onPressed: () => Share.share(
38-
'https://cima.aemps.es/cima/publico/detalle.html?'
39-
'nregistro=${medication.registerNumber}',
40-
subject: medication.name,
41-
),
42-
),
43-
],
44-
),
45-
body: MedicationDetailWidget(medicamento: medication),
34+
),
35+
],
36+
),
37+
body: BlocBuilder<MedicationDetailBloc, MedicationDetailState>(
38+
builder: (context, state) {
39+
switch (state) {
40+
case AvailableMedicationDetailState():
41+
return MedicationDetailWidget(medicamento: medication);
42+
case Initial():
43+
case Loading():
44+
return const CimaLoading();
45+
}
46+
return const SizedBox.shrink();
47+
// AvailableMedicationDetailState:
48+
// return MedicationDetailWidget(medicamento: medication);
49+
},
4650
),
4751
);
4852
}

lib/medication_detail/views/medication_detail_view_widget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class MedicationDetailWidget extends StatelessWidget {
5959
subtitle: Text(currentMedication.dosage!),
6060
),
6161
FeaturesWidget(medication: currentMedication),
62-
const PresentationsGridWidget(),
62+
// const PresentationsGridWidget(),
6363
],
6464
),
6565
)

lib/search/widgets/medication_search_delegate.dart

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
import 'dart:developer';
22

33
import 'package:cima_client/search_result/search_result.dart';
4+
import 'package:cima_model/cima_model.dart';
45
import 'package:flutter/material.dart';
56
import 'package:flutter_bloc/flutter_bloc.dart';
67

7-
class MedicationSearchDelegate extends SearchDelegate<void> {
8+
class MedicationSearchDelegate extends SearchDelegate<Medication?> {
9+
MedicationSearchDelegate(this.searchMedicationResultBloc);
10+
11+
final SearchMedicationResultBloc searchMedicationResultBloc;
12+
final minCharsSearch = 3;
13+
814
@override
915
List<Widget>? buildActions(BuildContext context) {
1016
return [
11-
const IconButton(onPressed: null, icon: Icon(Icons.qr_code_scanner)),
17+
// const IconButton(onPressed: null, icon: Icon(Icons.qr_code_scanner)),
1218
IconButton(
1319
icon: const Icon(Icons.clear),
1420
onPressed: () {
@@ -36,23 +42,21 @@ class MedicationSearchDelegate extends SearchDelegate<void> {
3642

3743
@override
3844
Widget buildResults(BuildContext context) {
39-
search(context, query);
45+
if (query.length < minCharsSearch) return const SizedBox.shrink();
4046
log('buildResults');
41-
return const MedicationListWidget();
47+
return buildResultList(context, query);
4248
}
4349

4450
@override
4551
Widget buildSuggestions(BuildContext context) {
46-
search(context, query);
52+
if (query.length < minCharsSearch) return const SizedBox.shrink();
4753
log('buildSuggestions');
48-
return const MedicationListWidget();
54+
return buildResultList(context, query);
4955
}
5056

51-
void search(BuildContext context, String query) {
52-
if (query.length < 3) return;
53-
context
54-
.read<SearchMedicationResultBloc>()
55-
.add(Search(params: {'nombre': query}));
57+
Widget buildResultList(BuildContext context, String query) {
58+
searchMedicationResultBloc.add(Search(params: {'nombre': query}));
59+
return const MedicationListWidget();
5660
}
5761

5862
@override

lib/search_result/bloc/search_medication_result_state.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,9 @@ class AvailableSearchMedicationResultState extends SearchMedicationResultState {
2020

2121
@override
2222
List<Object?> get props => [medicamentos];
23+
24+
@override
25+
String toString() {
26+
return '${medicamentos.length} medications';
27+
}
2328
}

0 commit comments

Comments
 (0)