From c41669ec4e311233d046b4d2e130fc9417f46963 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Sun, 19 Apr 2020 13:30:39 +0300 Subject: [PATCH] First step form implement loading --- lib/main.dart | 2 +- lib/routes.dart | 4 +- lib/screens/auth/login_screen.dart | 19 ++++++-- lib/widgets/auth/login_form.dart | 17 ++++--- lib/widgets/shared/app_loader_widget.dart | 50 +++++++++++++++++++++ lib/widgets/shared/app_scaffold_widget.dart | 22 +++++---- pubspec.lock | 7 +++ pubspec.yaml | 2 +- 8 files changed, 101 insertions(+), 22 deletions(-) create mode 100644 lib/widgets/shared/app_loader_widget.dart diff --git a/lib/main.dart b/lib/main.dart index 6953f636..c6ab42bb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -27,7 +27,7 @@ class MyApp extends StatelessWidget { child: MaterialApp( title: 'Flutter Demo', theme: ThemeData( - primarySwatch: Colors.blue, + primarySwatch: Colors.red, primaryColor: Hexcolor('#B8382C'), buttonColor: Hexcolor('#B8382C'), fontFamily: 'WorkSans',), diff --git a/lib/routes.dart b/lib/routes.dart index 9aacf6cb..2f589830 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,11 +1,12 @@ + import './screens/QR_reader_screen.dart'; import './screens/auth/change_password_screen.dart'; import './screens/auth/login_screen.dart'; import './screens/auth/verification_methods_screen.dart'; import './screens/auth/verify_account_screen.dart'; import './screens/blood_bank_screen.dart'; -import './screens/doctor_reply_screen.dart'; import './screens/dashboard_screen.dart'; +import './screens/doctor_reply_screen.dart'; import './screens/medicine/medicine_search_screen.dart'; import './screens/my_schedule_screen.dart'; import './screens/patients/patient_search_screen.dart'; @@ -26,6 +27,7 @@ const String BLOOD_BANK = 'blood-bank'; const String DOCTOR_REPLY = 'doctor-reply'; const String MEDICINE_SEARCH = 'medicine-search'; const String SETTINGS = 'settings'; +const LOADER ='loader'; var routes = { HOME: (_) => DashboardScreen(), diff --git a/lib/screens/auth/login_screen.dart b/lib/screens/auth/login_screen.dart index 97fde198..471ece67 100644 --- a/lib/screens/auth/login_screen.dart +++ b/lib/screens/auth/login_screen.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -9,6 +8,7 @@ import '../../util/dr_app_shared_pref.dart'; import '../../widgets/auth/auth_header.dart'; import '../../widgets/auth/known_user_login.dart'; import '../../widgets/auth/login_form.dart'; +import '../../widgets/shared/app_scaffold_widget.dart'; import '../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); @@ -22,9 +22,10 @@ class _LoginsreenState extends State { Future _prefs = SharedPreferences.getInstance(); String platformImei; - Future platformImeiFuture; + bool _isLoading = false; + Future getSharedPref() async { sharedPref.getString('platformImei').then((imei) { platformImei = imei; @@ -39,11 +40,18 @@ class _LoginsreenState extends State { }); } + void changeLoadingStata(isLoading) { + setState(() { + _isLoading = isLoading; + }); + } + @override Widget build(BuildContext context) { getSharedPref(); return AppScaffold( pageOnly: true, + isloading: _isLoading, body: SafeArea( child: ListView(children: [ FutureBuilder( @@ -63,12 +71,15 @@ class _LoginsreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ (platformImei == null) - ? Column( + ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ AuthHeader(loginType.knownUser), - LoginForm(), + LoginForm( + changeLoadingStata: + changeLoadingStata, + ), ], ) : Column( diff --git a/lib/widgets/auth/login_form.dart b/lib/widgets/auth/login_form.dart index c92b404e..f584c11a 100644 --- a/lib/widgets/auth/login_form.dart +++ b/lib/widgets/auth/login_form.dart @@ -20,9 +20,8 @@ DrAppToastMsg toastMsg = DrAppToastMsg(); Helpers helpers = Helpers(); class LoginForm extends StatefulWidget with DrAppToastMsg { - LoginForm({ - Key key, - }) : super(key: key); + LoginForm({this.changeLoadingStata}); + final Function changeLoadingStata; @override _LoginFormState createState() => _LoginFormState(); @@ -175,7 +174,7 @@ class _LoginFormState extends State { onPressed: () { // Navigator.of(context).pushNamed(VERIFICATION_METHODS); - login(context, authProv); + login(context, authProv, widget.changeLoadingStata); }, textColor: Colors.white, elevation: 0.0, @@ -214,10 +213,13 @@ class _LoginFormState extends State { ); } - login(context, AuthProvider authProv) { + login(context, AuthProvider authProv, Function changeLoadingStata) { + changeLoadingStata(true); if (loginFormKey.currentState.validate()) { loginFormKey.currentState.save(); authProv.login(userInfo).then((res) { + changeLoadingStata(false); + if (res['MessageStatus'] == 1) { // insertDeviceImei(res, authProv); saveObjToString('loggedUser', res); @@ -230,8 +232,11 @@ class _LoginFormState extends State { // Navigator.of(context).pushNamed(HOME); }).catchError((err) { print('$err'); + changeLoadingStata(false); helpers.showErrorToast(); }); + } else { + changeLoadingStata(false); } } @@ -315,8 +320,6 @@ class _LoginFormState extends State { }); } - - saveObjToString(String key, value) async { sharedPref.setObj(key, value); } diff --git a/lib/widgets/shared/app_loader_widget.dart b/lib/widgets/shared/app_loader_widget.dart new file mode 100644 index 00000000..2fc70ac3 --- /dev/null +++ b/lib/widgets/shared/app_loader_widget.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; +import 'package:progress_hud_v2/progress_hud.dart'; + + + +class AppLoaderWidget extends StatefulWidget { + AppLoaderWidget({Key key, this.title}) : super(key: key); + + final String title; + + @override + _AppLoaderWidgetState createState() => new _AppLoaderWidgetState(); +} + +class _AppLoaderWidgetState extends State { + ProgressHUD _progressHUD; + + // bool _loading = false; + + @override + void initState() { + super.initState(); + + _progressHUD = new ProgressHUD( + backgroundColor: Colors.black12, + color: Colors.black, + // containerColor: Colors.blue, + borderRadius: 5.0, + // text: 'Loading...', + ); + } + + @override + Widget build(BuildContext context) { + // void dismissProgressHUD() { + // setState(() { + // if (_loading) { + // _progressHUD.state.dismiss(); + // } else { + // _progressHUD.state.show(); + // } + + // _loading = !_loading; + // }); + // } + + return Positioned(child: _progressHUD) ; + + } +} \ No newline at end of file diff --git a/lib/widgets/shared/app_scaffold_widget.dart b/lib/widgets/shared/app_scaffold_widget.dart index 0993749f..bb1242d6 100644 --- a/lib/widgets/shared/app_scaffold_widget.dart +++ b/lib/widgets/shared/app_scaffold_widget.dart @@ -1,10 +1,11 @@ -import 'package:doctor_app_flutter/config/size_config.dart'; -import 'package:doctor_app_flutter/screens/patients/patients_screen.dart'; +import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; +import '../../config/size_config.dart'; import '../../presentation/doctor_app_icons.dart'; +import '../../screens/patients/patients_screen.dart'; import '../../widgets/shared/app_drawer_widget.dart'; -import 'package:flutter/material.dart'; +import '../../widgets/shared/app_loader_widget.dart'; class AppScaffold extends StatelessWidget { bool pageOnly = false; @@ -16,6 +17,7 @@ class AppScaffold extends StatelessWidget { bool showCurve = true; String appBarTitle = ''; Widget body; + bool isloading = false; AppScaffold( {this.pageOnly, @@ -25,7 +27,8 @@ class AppScaffold extends StatelessWidget { this.showAppDrawer, this.body, this.showbg, - this.showCurve}); + this.showCurve, + this.isloading = false}); @override Widget build(BuildContext context) { @@ -83,7 +86,7 @@ class AppScaffold extends StatelessWidget { icon: Icon(Icons.apps), title: Text('Menu')) ]), body: (pageOnly == true || showCurve == false) - ? body + ? Stack(children: [body, buildAppLoaderWidget(isloading)]) : Stack( children: [ ClipPath( @@ -95,10 +98,13 @@ class AppScaffold extends StatelessWidget { Positioned( // key: , // top: SizeConfig.realScreenHeight * 0.10, - child: body) + child: body), + buildAppLoaderWidget(isloading) ], )); } -} - + Widget buildAppLoaderWidget(bool isloading) { + return isloading ? AppLoaderWidget() : Container(); + } +} diff --git a/pubspec.lock b/pubspec.lock index b5106a1b..e717a7f9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -429,6 +429,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.4.0" + progress_hud_v2: + dependency: "direct main" + description: + name: progress_hud_v2 + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" protobuf: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 7b87b081..e9e10757 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,7 +30,7 @@ dependencies: flutter_flexible_toast: ^0.1.4 local_auth: ^0.6.1+3 http_interceptor: ^0.2.0 - + progress_hud_v2: ^2.0.0 # The following adds the Cupertino Icons font to your application.