From d080b5e1c4df02bfb042c252da055a389d2bbb3a Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Thu, 19 Mar 2020 11:57:57 +0200 Subject: [PATCH] first step from IMEI --- lib/providers/auth_provider.dart | 25 ++- lib/screens/auth/login_screen.dart | 9 +- .../patients/patient_search_screen.dart | 4 +- lib/widgets/auth/known_user_login.dart | 12 ++ lib/widgets/auth/login_form.dart | 192 +++++++++++++----- 5 files changed, 180 insertions(+), 62 deletions(-) create mode 100644 lib/widgets/auth/known_user_login.dart diff --git a/lib/providers/auth_provider.dart b/lib/providers/auth_provider.dart index 71cc3526..c84b7077 100644 --- a/lib/providers/auth_provider.dart +++ b/lib/providers/auth_provider.dart @@ -5,14 +5,16 @@ import 'package:http/http.dart' as http; import '../models/user_model.dart'; +const LOGIN_URL = 'https://hmgwebservices.com/Services/Sentry.svc/REST/MemberLogIN_New'; +const INSERT_DEVICE_IMEI = 'https://hmgwebservices.com/Services/Sentry.svc/REST/DoctorApplication_INSERTDeviceIMEI'; class AuthProvider with ChangeNotifier { Future login(UserModel userInfo) async { Map requestHeaders = { 'Content-type': 'application/json', 'Accept': 'application/json', }; - const url = - 'https://hmgwebservices.com/Services/Sentry.svc/REST/MemberLogIN_New'; + const url =LOGIN_URL; + try { final response = await http.post(url, headers: requestHeaders, @@ -31,4 +33,23 @@ class AuthProvider with ChangeNotifier { print(error); } } + + + Future insertDeviceImei( imei) async { + Map requestHeaders = { + 'Content-type': 'application/json', + 'Accept': 'application/json', + }; + const url =INSERT_DEVICE_IMEI; + + try { + final response = await http.post(url, + headers: requestHeaders, + body: json.encode(imei)); + return Future.value(json.decode(response.body)); + } catch (error) { + print(error); + } + } + } diff --git a/lib/screens/auth/login_screen.dart b/lib/screens/auth/login_screen.dart index ae2bd863..5859e1a1 100644 --- a/lib/screens/auth/login_screen.dart +++ b/lib/screens/auth/login_screen.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:doctor_app_flutter/widgets/auth/known_user_login.dart'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -7,14 +8,14 @@ import '../../widgets/auth/auth_header.dart'; import '../../widgets/auth/login_form.dart'; class Loginsreen extends StatelessWidget { - // Future pref = SharedPreferences.getInstance(); Future _prefs = SharedPreferences.getInstance(); + int platformImei; Future _incrementCounter() async { final SharedPreferences prefs = await _prefs; final int counter = (prefs.getInt('counter') ?? 0) + 1; - var x = prefs.getInt('counter22222'); + platformImei = prefs.getInt('platformImei'); // setState(() { - print(x); + print('platformImei'+platformImei.toString()); prefs.setInt("counter", counter).then((bool success) { return counter; // }); @@ -35,7 +36,7 @@ class Loginsreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ AuthHeader(), - LoginForm(), + platformImei == null?LoginForm():KnownUserLogin(), ])), ), ); diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index e921173e..a943a153 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -1,11 +1,11 @@ -import '../../routes.dart'; -import '../../widgets/patients/dynamic_elements.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:hexcolor/hexcolor.dart'; import '../../lookups/patient_lookup.dart'; import '../../models/patient_model.dart'; +import '../../routes.dart'; +import '../../widgets/patients/dynamic_elements.dart'; class PatientSearchScreen extends StatefulWidget { @override diff --git a/lib/widgets/auth/known_user_login.dart b/lib/widgets/auth/known_user_login.dart new file mode 100644 index 00000000..bc2a7455 --- /dev/null +++ b/lib/widgets/auth/known_user_login.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; + +class KnownUserLogin extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + child: Center( + child: Text(" welcome to Known User Login "), + ), + ); + } +} diff --git a/lib/widgets/auth/login_form.dart b/lib/widgets/auth/login_form.dart index 4c3df702..ecdb6e8d 100644 --- a/lib/widgets/auth/login_form.dart +++ b/lib/widgets/auth/login_form.dart @@ -1,38 +1,55 @@ -import '../../models/user_model.dart'; -import '../../providers/auth_provider.dart'; -import 'package:provider/provider.dart'; - -import '../../routes.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; +import 'package:flutter/services.dart'; import 'package:hexcolor/hexcolor.dart'; +import 'package:imei_plugin/imei_plugin.dart'; +import 'package:provider/provider.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import '../../models/user_model.dart'; +import '../../providers/auth_provider.dart'; +import '../../routes.dart'; - -class LoginForm extends StatelessWidget { +class LoginForm extends StatefulWidget { LoginForm({ Key key, }) : super(key: key); - + + @override + _LoginFormState createState() => _LoginFormState(); +} + +class _LoginFormState extends State { final loginFormKey = GlobalKey(); + String _platformImei = 'Unknown'; + String uniqueId = "Unknown"; + var userInfo = UserModel( - UserID: '', - Password: '', - ProjectID: 15, - LanguageID: 2, - IPAdress: "11.11.11.11", - VersionID: 1.2, - Channel: 9, - SessionID: "i1UJwCTSqt" - ); + UserID: '', + Password: '', + ProjectID: 15, + LanguageID: 2, + IPAdress: "11.11.11.11", + VersionID: 1.2, + Channel: 9, + SessionID: "i1UJwCTSqt"); + + @override + void initState() { + super.initState(); + initPlatformState(); + } + @override Widget build(BuildContext context) { + AuthProvider authProv = Provider.of(context); + return LayoutBuilder(builder: (ctx, constraints) { var smallScreenSize = 660; bool isSmallScreen = constraints.maxWidth <= smallScreenSize; return Form( key: loginFormKey, - child: Container( + child: Container( width: constraints.maxWidth * 0.9, child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -64,7 +81,7 @@ class LoginForm extends StatelessWidget { } return null; }, - onSaved: (value){ + onSaved: (value) { userInfo.UserID = value; }, ), @@ -72,34 +89,35 @@ class LoginForm extends StatelessWidget { height: 20, ), TextFormField( - obscureText: true, - decoration: InputDecoration( - prefixIcon: Image.asset('assets/images/password_icon.png'), - hintText: 'Enter Password', - hintStyle: TextStyle( - fontSize: - isSmallScreen ? 14 : constraints.maxWidth * 0.024), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(20)), - borderSide: BorderSide(color: Hexcolor('#CCCCCC')), - ), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(10.0)), - borderSide: - BorderSide(color: Theme.of(context).primaryColor), - ) - //BorderRadius.all(Radius.circular(20)); - ), - validator: (value) { - if (value.isEmpty) { - return 'Please enter some text'; - } - return null; - }, - onSaved: (value){ - userInfo.Password = value; - } - ), + obscureText: true, + decoration: InputDecoration( + prefixIcon: + Image.asset('assets/images/password_icon.png'), + hintText: 'Enter Password', + hintStyle: TextStyle( + fontSize: isSmallScreen + ? 14 + : constraints.maxWidth * 0.024), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(20)), + borderSide: BorderSide(color: Hexcolor('#CCCCCC')), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(10.0)), + borderSide: + BorderSide(color: Theme.of(context).primaryColor), + ) + //BorderRadius.all(Radius.circular(20)); + ), + validator: (value) { + if (value.isEmpty) { + return 'Please enter some text'; + } + return null; + }, + onSaved: (value) { + userInfo.Password = value; + }), SizedBox( height: 20, ), @@ -152,14 +170,15 @@ class LoginForm extends StatelessWidget { ), RaisedButton( onPressed: () { - login(context); + login(context, authProv); }, textColor: Colors.white, elevation: 0.0, padding: const EdgeInsets.all(0.0), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), - side: BorderSide(width: 0.5, color: Hexcolor('#CCCCCC'))), + side: + BorderSide(width: 0.5, color: Hexcolor('#CCCCCC'))), child: Container( padding: const EdgeInsets.all(10.0), height: 50, @@ -186,18 +205,83 @@ class LoginForm extends StatelessWidget { }); } - login(context) { - AuthProvider authProv = Provider.of(context); + login(context, AuthProvider authProv) { loginFormKey.currentState.validate(); loginFormKey.currentState.save(); - // if login succses - // set imei in shared preferanced - authProv.login(userInfo).then((res) { print(res['MobileNumber']); + if (res['MessageStatus'] == 1) { + insertDeviceImei(res, authProv); + // call insert imei + // save imei on shared preferance + // handel errors + } else { + // handel error + } + print(_platformImei + '_platformImei0'); Navigator.of(context).pushNamed(HOME); }).catchError((err) { print('$err'); }); } + + insertDeviceImei(res, AuthProvider authProv) { + var imeiInfo = { + "IMEI": _platformImei.toString(), + "LogInType": 1, + "DoctorID": res['DoctorID'], + "DoctorName": "Test User", + "Gender": 1, + "ClinicID": 3, + "ProjectID": 15, + "DoctorTitle": "Mr.", + "ClinicName": "MED", + "ProjectName": "", + "DoctorImageURL": "UNKNOWN" + }; + authProv.insertDeviceImei(imeiInfo).then((res) { + if (res['MessageStatus'] == 1) { + setSharedPref('platformImei',_platformImei); + // save imei on shared preferance + } else { + // handel error + } + }).catchError((err) { + print(err); + }); + } + + // Platform messages are asynchronous, so we initialize in an async method. + Future initPlatformState() async { + String platformImei; + String idunique; + // Platform messages may fail, so we use a try/catch PlatformException. + try { + platformImei = + await ImeiPlugin.getImei(shouldShowRequestPermissionRationale: false); + idunique = await ImeiPlugin.getId(); + } on PlatformException { + platformImei = 'Failed to get platform version.'; + } + + // If the widget was removed from the tree while the asynchronous platform + // message was in flight, we want to discard the reply rather than calling + // setState to update our non-existent appearance. + if (!mounted) return; + + setState(() { + _platformImei = platformImei; + uniqueId = idunique; + }); + } + + Future setSharedPref(key, value) async { + Future _prefs = SharedPreferences.getInstance(); + final SharedPreferences prefs = await _prefs; + print(key); + print(value); + prefs.setInt(key, value).then((bool success) { + return; + }); + } }