@@ -7,6 +7,7 @@ import 'package:mibook/core/designsystem/molecules/buttons/secondary_button.dart
77import 'package:mibook/core/designsystem/molecules/indicators/progress_stepper.dart' ;
88import 'package:mibook/core/designsystem/molecules/inputfields/input_field.dart' ;
99import 'package:mibook/core/designsystem/organisms/app_nav_bar.dart' ;
10+ import 'package:mibook/core/designsystem/organisms/show_error_dialog.dart' ;
1011import 'package:mibook/core/di/di.dart' ;
1112import 'package:mibook/core/utils/strings.dart' ;
1213import 'package:mibook/core/utils/strings.dart' as strings;
@@ -15,6 +16,9 @@ import 'package:mibook/layers/presentation/screens/startreading/start_reading_ev
1516import 'package:mibook/layers/presentation/screens/startreading/start_reading_state.dart' ;
1617import 'package:mibook/layers/presentation/screens/startreading/start_reading_view_model.dart' ;
1718
19+ typedef _BlocListener = BlocListener <StartReadingViewModel , StartReadingState >;
20+ typedef _BlocBuilder = BlocBuilder <StartReadingViewModel , StartReadingState >;
21+
1822@RoutePage ()
1923class StartReadingPage extends StatelessWidget {
2024 final BookDetailsUI book;
@@ -36,34 +40,57 @@ class StartReadingPage extends StatelessWidget {
3640class _StartReadingScaffold extends StatelessWidget {
3741 @override
3842 Widget build (BuildContext context) {
39- return Scaffold (
40- appBar: AppNavBar (
41- titleText: startReading,
42- onBack: context.router.maybePop,
43- ),
44- body: BlocBuilder <StartReadingViewModel , StartReadingState >(
45- builder: (context, state) {
46- final viewModel = context.read <StartReadingViewModel >();
47- if (state.shouldNavigateBack) {
48- context.router.maybePop ();
49- }
50- return _StartReadingContent (
51- book: viewModel.book,
52- progress: state.progress,
53- errorMessage: state.inputErrorMessage,
54- onChangeProgressText: (progress) {
55- viewModel.add (
56- DidEditProgressEvent (progress: int .tryParse (progress) ?? 0 ),
57- );
58- },
59- onClickStartReading: () {
60- viewModel.add (DidClickConfirmEvent ());
61- },
62- onClickFinishBook: () {
63- viewModel.add (DidClickFinishBookEvent ());
43+ final viewModel = context.read <StartReadingViewModel >();
44+
45+ return _BlocListener (
46+ bloc: viewModel,
47+ listenWhen: (previous, current) =>
48+ previous.shouldShowSavingError != current.shouldShowSavingError &&
49+ current.shouldShowSavingError,
50+ listener: (context, state) {
51+ WidgetsBinding .instance.addPostFrameCallback ((_) {
52+ showErrorDialog (
53+ context,
54+ 'Error' ,
55+ 'An error occurred while saving your reading progress. Please try again.' ,
56+ 'OK' ,
57+ () {
58+ viewModel.add (DidClickSavingErrorDismissEvent ());
6459 },
6560 );
66- },
61+ });
62+ },
63+ child: Scaffold (
64+ appBar: AppNavBar (
65+ titleText: startReading,
66+ onBack: context.router.maybePop,
67+ ),
68+ body: _BlocBuilder (
69+ builder: (context, state) {
70+ final viewModel = context.read <StartReadingViewModel >();
71+ if (state.shouldNavigateBack) {
72+ context.router.maybePop ();
73+ }
74+ return _StartReadingContent (
75+ book: viewModel.book,
76+ progress: state.progress,
77+ errorMessage: state.inputErrorMessage,
78+ onChangeProgressText: (progress) {
79+ viewModel.add (
80+ DidEditProgressEvent (
81+ progress: int .tryParse (progress) ?? 0 ,
82+ ),
83+ );
84+ },
85+ onClickStartReading: () {
86+ viewModel.add (DidClickConfirmEvent ());
87+ },
88+ onClickFinishBook: () {
89+ viewModel.add (DidClickFinishBookEvent ());
90+ },
91+ );
92+ },
93+ ),
6794 ),
6895 );
6996 }
0 commit comments