From f7718140e68097320fb52dc22e11e314e68451cd Mon Sep 17 00:00:00 2001 From: Daniel Borges Date: Tue, 20 Aug 2019 18:10:17 -0300 Subject: [PATCH] display options API integration --- assets/lang/en.json | 4 +++- lib/main.dart | 20 ++++++++++------ lib/src/bloc/display_options_dialog_bloc.dart | 6 ++--- lib/src/openlp_mobile_remote_app.dart | 4 +++- lib/src/widgets/bottom_navigation_bar.dart | 6 ++++- lib/src/widgets/display_options_dialog.dart | 24 +++++++++++-------- pubspec.yaml | 4 ++-- 7 files changed, 43 insertions(+), 25 deletions(-) diff --git a/assets/lang/en.json b/assets/lang/en.json index 0928811..027ec72 100644 --- a/assets/lang/en.json +++ b/assets/lang/en.json @@ -40,5 +40,7 @@ "dialog_server_ip_title": "Type the IP", "dialog_server_port_title": "Type the port", "dialog_server_user_id_title": "Type the ID", - "dialog_server_user_pass_title": "Type the password" + "dialog_server_user_pass_title": "Type the password", + "success": "Success", + "failure": "Failure" } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 0650fc2..2865e90 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -24,14 +24,23 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; +import 'src/bloc/display_options_dialog_bloc.dart'; import 'src/bloc/settings_bloc.dart'; import 'src/openlp_mobile_remote_app.dart'; import 'src/configurations/app_theme.dart'; import 'src/configurations/app_localizations.dart'; import 'src/screens/settings.dart'; -void main() => runApp( - MaterialApp( +void main() => runApp(MultiBlocProvider( + providers: [ + BlocProvider( + builder: (context) => DisplayOptionsDialogBloc(), + ), + BlocProvider( + builder: (context) => SettingsBloc(), + ), + ], + child: MaterialApp( debugShowCheckedModeBanner: false, theme: appTheme, supportedLocales: [ @@ -62,10 +71,7 @@ void main() => runApp( }, routes: { '/': (context) => OpenLPMobileRemoteApp(), - '/settings': (context) => BlocProvider( - builder: (context) => SettingsBloc(), - child: Settings(), - ), + '/settings': (context) => Settings(), }, ), - ); + )); diff --git a/lib/src/bloc/display_options_dialog_bloc.dart b/lib/src/bloc/display_options_dialog_bloc.dart index 68eed19..fc56c9a 100644 --- a/lib/src/bloc/display_options_dialog_bloc.dart +++ b/lib/src/bloc/display_options_dialog_bloc.dart @@ -26,7 +26,7 @@ import 'package:meta/meta.dart'; import '../network/api.dart' as api; -enum DisplayOptionsState { none, success, failure } +enum DisplayOptionsState { waiting, success, failure } @immutable abstract class SetDisplayTypeEvent extends Equatable { @@ -54,7 +54,7 @@ class SetDisplayTypeShowEvent extends SetDisplayTypeEvent { class DisplayOptionsDialogBloc extends Bloc { @override - DisplayOptionsState get initialState => DisplayOptionsState.none; + DisplayOptionsState get initialState => DisplayOptionsState.waiting; void setBlankScreen() { dispatch(SetDisplayTypeBlankEvent()); @@ -81,6 +81,6 @@ class DisplayOptionsDialogBloc } catch (e) { yield DisplayOptionsState.failure; } - yield DisplayOptionsState.none; + yield DisplayOptionsState.waiting; } } diff --git a/lib/src/openlp_mobile_remote_app.dart b/lib/src/openlp_mobile_remote_app.dart index 966858a..7f8c997 100644 --- a/lib/src/openlp_mobile_remote_app.dart +++ b/lib/src/openlp_mobile_remote_app.dart @@ -36,6 +36,7 @@ class OpenLPMobileRemoteApp extends StatefulWidget { class _OpenLPMobileRemoteAppState extends State with SingleTickerProviderStateMixin { TabController tabController; + final GlobalKey _scaffoldKey = GlobalKey(); @override void initState() { @@ -46,6 +47,7 @@ class _OpenLPMobileRemoteAppState extends State @override Widget build(BuildContext context) { return Scaffold( + key: _scaffoldKey, appBar: AppBar( title: Text('OpenLP Remote'), actions: [ @@ -74,7 +76,7 @@ class _OpenLPMobileRemoteAppState extends State ), floatingActionButton: SearchFloatingButton(), floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, - bottomNavigationBar: AppBottomNavigationBar(), + bottomNavigationBar: AppBottomNavigationBar(_scaffoldKey), ); } } diff --git a/lib/src/widgets/bottom_navigation_bar.dart b/lib/src/widgets/bottom_navigation_bar.dart index a16ea64..3a2cd8e 100644 --- a/lib/src/widgets/bottom_navigation_bar.dart +++ b/lib/src/widgets/bottom_navigation_bar.dart @@ -35,6 +35,10 @@ class _Action { } class AppBottomNavigationBar extends StatelessWidget { + final GlobalKey _scaffoldKey; + + AppBottomNavigationBar(this._scaffoldKey); + @override Widget build(BuildContext context) { final List<_Action> _actions = [ @@ -54,7 +58,7 @@ class AppBottomNavigationBar extends StatelessWidget { () { showDialog( context: context, - builder: (context) => DisplayOptionsDialog(), + builder: (context) => DisplayOptionsDialog(_scaffoldKey), ); }, ), diff --git a/lib/src/widgets/display_options_dialog.dart b/lib/src/widgets/display_options_dialog.dart index e48555a..2a9842d 100644 --- a/lib/src/widgets/display_options_dialog.dart +++ b/lib/src/widgets/display_options_dialog.dart @@ -59,30 +59,34 @@ class DisplayOptionsDialog extends StatelessWidget { }, ), ]; + final GlobalKey _scaffoldKey; + + DisplayOptionsDialog(this._scaffoldKey); @override Widget build(BuildContext context) { - final bloc = DisplayOptionsDialogBloc(); + final bloc = BlocProvider.of(context); return BlocListener( bloc: bloc, - condition: (previous, current) => current != DisplayOptionsState.none, + condition: (previous, current) => current != DisplayOptionsState.waiting, listener: (context, state) { - print(state); + String text; + Color backgroundColor; switch (state) { case DisplayOptionsState.success: - Scaffold.of(context).showSnackBar(SnackBar( - content: Text('Sucesso!'), - )); + text = AppLocalizations.of(context).translate('success'); break; case DisplayOptionsState.failure: - Scaffold.of(context).showSnackBar(SnackBar( - content: Text('Falha!'), - backgroundColor: Colors.red, - )); + text = AppLocalizations.of(context).translate('failure'); + backgroundColor = Colors.red; break; default: break; } + _scaffoldKey.currentState.showSnackBar(SnackBar( + content: Text(text), + backgroundColor: backgroundColor, + )); }, child: SimpleDialog( contentPadding: EdgeInsets.all(20.0), diff --git a/pubspec.yaml b/pubspec.yaml index 9d4bea6..38a2926 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,8 +34,8 @@ dependencies: url_launcher: ^5.1.2 flutter_localizations: sdk: flutter - bloc: ^0.14.0 - flutter_bloc: ^0.20.0 + bloc: ^0.15.0 + flutter_bloc: ^0.21.0 equatable: ^0.4.0 http: ^0.12.0+2