From f8d8e1c68517158276644b65dfc80ed427a37136 Mon Sep 17 00:00:00 2001 From: Sultan Khan Date: Tue, 21 Jul 2020 09:09:39 +0300 Subject: [PATCH] new pages added --- android/app/build.gradle | 2 + android/app/google-services.json | 42 ++++++ android/app/src/main/AndroidManifest.xml | 4 + android/build.gradle | 1 + lib/config/localized_values.dart | 7 + lib/config/shared_pref_kay.dart | 2 +- .../model/auth/select_device_imei_res.dart | 68 +++++++++ lib/pages/landing/landing_page.dart | 8 +- lib/pages/login/forgot-password.dart | 21 ++- lib/pages/login/login-type.dart | 21 ++- lib/pages/login/login.dart | 36 +---- lib/pages/login/register.dart | 139 ++++++++++++++++++ lib/pages/login/welcome.dart | 6 +- lib/providers/auth_provider.dart | 96 ++++++++++++ lib/routes.dart | 6 + lib/uitl/translations_delegate_base.dart | 5 + lib/widgets/mobile-no/mobile_no.dart | 101 ++++++++----- pubspec.yaml | 3 +- 18 files changed, 485 insertions(+), 83 deletions(-) create mode 100644 android/app/google-services.json create mode 100644 lib/core/model/auth/select_device_imei_res.dart create mode 100644 lib/pages/login/register.dart create mode 100644 lib/providers/auth_provider.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index 807f7fad..300075a5 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -23,6 +23,7 @@ if (flutterVersionName == null) { apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'com.google.gms.google-services' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { @@ -60,4 +61,5 @@ flutter { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "com.google.firebase:firebase-messaging:20.1.0" } diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 00000000..f86832ad --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,42 @@ +{ + "project_info": { + "project_number": "815750722565", + "firebase_url": "https://api-project-815750722565.firebaseio.com", + "project_id": "api-project-815750722565", + "storage_bucket": "api-project-815750722565.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:815750722565:android:62281cd3e5df4063", + "android_client_info": { + "package_name": "com.cloud.diplomaticquarterapp" + } + }, + "oauth_client": [ + { + "client_id": "815750722565-3a0gc7neins0eoahdrimrfksk0sqice8.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDUfg6AKM1-00WyzpvLImUBC46wFrq9-qw" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 2 + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b88d5204..c5095d24 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -37,6 +37,10 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle index 3100ad2d..70b3637d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,6 +8,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.5.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.google.gms:google-services:4.3.2' } } diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index cb1b7962..2527e363 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -41,4 +41,11 @@ const Map> localizedValues = { "ar": "الرجاء إدخال معلومات الملف الشخصي" }, "submit": {"en": "Submit", "ar": "ارسال"}, + "forgot-desc": { + "en": "Enter the mobile number to receive the Medical file Number via SMS", + "ar": "أدخل رقم الجوال المسجل لاستلام رقم الملف عن طريق الرسائل النصية" + }, + "dob": {"en": "Birth Date:", "ar": "تاريخ الميلاد"}, + "hijri-date": {"en": "Hijri Date", "ar": "التاريخ الهجري"}, + "gregorian-date": {"en": "Gregorian Date", "ar": "التاريخ الميلادي"}, }; diff --git a/lib/config/shared_pref_kay.dart b/lib/config/shared_pref_kay.dart index 8c03fcce..59f4f0ff 100644 --- a/lib/config/shared_pref_kay.dart +++ b/lib/config/shared_pref_kay.dart @@ -1,3 +1,3 @@ const TOKEN = 'token'; const APP_LANGUAGE = 'language'; - +const USER_PROFILE = 'user-profile'; diff --git a/lib/core/model/auth/select_device_imei_res.dart b/lib/core/model/auth/select_device_imei_res.dart new file mode 100644 index 00000000..14444279 --- /dev/null +++ b/lib/core/model/auth/select_device_imei_res.dart @@ -0,0 +1,68 @@ +class SelectDeviceIMEIRES { + bool biometricEnabled; + String createdOn; + String editedOn; + int iD; + String iMEI; + String identificationNo; + int logInType; + String mobile; + String name; + String nameN; + bool outSA; + int patientID; + int patientType; + int preferredLanguage; + + SelectDeviceIMEIRES( + {this.biometricEnabled, + this.createdOn, + this.editedOn, + this.iD, + this.iMEI, + this.identificationNo, + this.logInType, + this.mobile, + this.name, + this.nameN, + this.outSA, + this.patientID, + this.patientType, + this.preferredLanguage}); + + SelectDeviceIMEIRES.fromJson(Map json) { + biometricEnabled = json['BiometricEnabled']; + createdOn = json['CreatedOn']; + editedOn = json['EditedOn']; + iD = json['ID']; + iMEI = json['IMEI']; + identificationNo = json['IdentificationNo']; + logInType = json['LogInType']; + mobile = json['Mobile']; + name = json['Name']; + nameN = json['NameN']; + outSA = json['OutSA']; + patientID = json['PatientID']; + patientType = json['PatientType']; + preferredLanguage = json['PreferredLanguage']; + } + + Map toJson() { + final Map data = new Map(); + data['BiometricEnabled'] = this.biometricEnabled; + data['CreatedOn'] = this.createdOn; + data['EditedOn'] = this.editedOn; + data['ID'] = this.iD; + data['IMEI'] = this.iMEI; + data['IdentificationNo'] = this.identificationNo; + data['LogInType'] = this.logInType; + data['Mobile'] = this.mobile; + data['Name'] = this.name; + data['NameN'] = this.nameN; + data['OutSA'] = this.outSA; + data['PatientID'] = this.patientID; + data['PatientType'] = this.patientType; + data['PreferredLanguage'] = this.preferredLanguage; + return data; + } +} diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index ea5198ac..c7748b4c 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -4,7 +4,7 @@ import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.da import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; - +import 'package:firebase_messaging/firebase_messaging.dart'; import 'home_page.dart'; class LandingPage extends StatefulWidget { @@ -15,7 +15,7 @@ class LandingPage extends StatefulWidget { class _LandingPageState extends State { int currentTab = 0; PageController pageController; - + final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); _changeCurrentTab(int tab) { setState(() { currentTab = tab; @@ -27,6 +27,10 @@ class _LandingPageState extends State { void initState() { super.initState(); pageController = PageController(keepPage: true); + _firebaseMessaging.getToken().then((String token) { + print(token); + //assert(token != null); + }); } @override diff --git a/lib/pages/login/forgot-password.dart b/lib/pages/login/forgot-password.dart index 42b951bb..c1fa7b18 100644 --- a/lib/pages/login/forgot-password.dart +++ b/lib/pages/login/forgot-password.dart @@ -7,8 +7,13 @@ import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -class ForgotPassword extends StatelessWidget { - final String selectedType = 'Saudi Arabia'; +class ForgotPassword extends StatefulWidget { + @override + _ForgotPassword createState() => _ForgotPassword(); +} + +class _ForgotPassword extends State { + String selectedType = 'Saudi Arabia'; final TextEditingController nationalIDorFile = null; final TextEditingController mobileNo = null; @override @@ -18,14 +23,14 @@ class ForgotPassword extends StatelessWidget { isShowAppBar: true, body: SingleChildScrollView( child: Container( - padding: EdgeInsets.only(top: 10, left: 10, right: 10), + padding: EdgeInsets.only(top: 10, left: 20, right: 20), height: SizeConfig.realScreenHeight * .8, width: SizeConfig.realScreenWidth, child: Column(children: [ Expanded( flex: 1, child: AppText( - TranslationBase.of(context).enterNationalId, + TranslationBase.of(context).forgotDesc, fontSize: SizeConfig.textMultiplier * 3.5, textAlign: TextAlign.left, )), @@ -45,9 +50,11 @@ class ForgotPassword extends StatelessWidget { value: selectedType, iconSize: 40, elevation: 16, - // selectedItemBuilder: - // (BuildContext context) {}, - onChanged: (String newValue) => {}, + onChanged: (String newValue) => { + setState(() { + selectedType = newValue; + }) + }, items: [ 'Saudi Arabia', 'Dubai', diff --git a/lib/pages/login/login-type.dart b/lib/pages/login/login-type.dart index bf69053e..e22ce297 100644 --- a/lib/pages/login/login-type.dart +++ b/lib/pages/login/login-type.dart @@ -108,11 +108,16 @@ class LoginType extends StatelessWidget { height: 2, ), Center( - child: AppText( - TranslationBase.of(context).forgotPassword, - fontSize: SizeConfig.textMultiplier * 3, - margin: 10, - underline: true)) + child: InkWell( + onTap: () => { + Navigator.of(context) + .pushNamed(FORGOT_PASSWORD) + }, + child: AppText( + TranslationBase.of(context).forgotPassword, + fontSize: SizeConfig.textMultiplier * 3, + margin: 10, + underline: true))) ]), ), Expanded( @@ -128,7 +133,11 @@ class LoginType extends StatelessWidget { textColor: Colors.white, child: Text(TranslationBase.of(context).registerNow), - onPressed: () => {}, + onPressed: () => { + Navigator.of(context).pushNamed( + REGISTER, + ) + }, )) ], ), diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index 8d4c9fef..1cd6fa11 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -10,8 +10,12 @@ import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -class Login extends StatelessWidget { - final String _selectedType = 'Saudi Arabia'; +class Login extends StatefulWidget { + @override + _Login createState() => _Login(); +} + +class _Login extends State { final TextEditingController nationalIDorFile = null; final int loginType = LoginType.loginType; final TextEditingController mobileNo = null; @@ -23,7 +27,7 @@ class Login extends StatelessWidget { isShowAppBar: true, body: SingleChildScrollView( child: Container( - padding: EdgeInsets.only(top: 10, left: 10, right: 10), + padding: EdgeInsets.only(top: 10, left: 20, right: 20), height: SizeConfig.realScreenHeight * .8, width: SizeConfig.realScreenWidth, child: Column(children: [ @@ -39,32 +43,6 @@ class Login extends StatelessWidget { child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Expanded( - // add Expanded to have your dropdown button fill remaining space - child: DropdownButtonHideUnderline( - child: DropdownButton( - isExpanded: true, - value: _selectedType, - iconSize: 40, - elevation: 16, - // selectedItemBuilder: - // (BuildContext context) {}, - onChanged: (String newValue) => {}, - items: [ - 'Saudi Arabia', - 'Dubai', - ].map>( - (String value) { - return DropdownMenuItem( - value: value, - child: Text(value), - ); - }).toList()))), - ], - ), MobileNo(controller: mobileNo), Container( child: TextFields( diff --git a/lib/pages/login/register.dart b/lib/pages/login/register.dart new file mode 100644 index 00000000..6c58ba72 --- /dev/null +++ b/lib/pages/login/register.dart @@ -0,0 +1,139 @@ +import 'package:diplomaticquarterapp/config/size_config.dart'; +import 'package:diplomaticquarterapp/pages/login/login-type.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; +import 'package:diplomaticquarterapp/widgets/card/rounded_container.dart'; +import 'package:diplomaticquarterapp/widgets/input/text_field.dart'; +import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class Register extends StatefulWidget { + @override + _Register createState() => _Register(); +} + +class _Register extends State { + final TextEditingController nationalIDorFile = null; + final int loginType = LoginType.loginType; + final TextEditingController mobileNo = null; + var isHijri; + + DateTime selectedDate; + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: TranslationBase.of(context).login, + isShowAppBar: true, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(top: 10, left: 20, right: 20), + height: SizeConfig.realScreenHeight * .8, + width: SizeConfig.realScreenWidth, + child: Column(children: [ + Expanded( + flex: 1, + child: AppText( + TranslationBase.of(context).enterNationalId, + fontSize: SizeConfig.textMultiplier * 3.5, + textAlign: TextAlign.left, + )), + Expanded( + flex: 4, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + MobileNo(controller: mobileNo), + Container( + child: TextFields( + controller: nationalIDorFile, + prefixIcon: + Icon(Icons.chrome_reader_mode, color: Colors.red), + padding: EdgeInsets.only( + top: 20, bottom: 20, left: 10, right: 10), + hintText: TranslationBase.of(context).nationalID, + )), + Row( + children: [ + Expanded( + child: Row( + children: [ + Radio( + value: 1, + groupValue: isHijri, + onChanged: (value) { + setState(() { + isHijri = value; + }); + }, + ), + Text(TranslationBase.of(context).hijriDate), + ], + ), + ), + Expanded( + child: Row( + children: [ + Radio( + value: 0, + groupValue: isHijri, + onChanged: (value) { + setState(() { + isHijri = value; + }); + }, + ), + Text(TranslationBase.of(context).gregorianDate), + ], + ), + ), + ], + ), + Row(children: [ + Expanded( + child: RaisedButton.icon( + onPressed: () => {_selectDate(context)}, + icon: Icon(Icons.date_range), + label: Text(selectedDate != null + ? "${selectedDate.toLocal()}".split(' ')[0] + : TranslationBase.of(context).dob))) + ]) + ], + ), + ), + Expanded( + flex: 2, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Row( + children: [ + Expanded( + child: RaisedButton( + color: Colors.grey, + textColor: Colors.white, + child: Text(TranslationBase.of(context).login), + onPressed: () => {}, + )) + ], + ), + ], + )) + ]), + ))); + } + + Future _selectDate(BuildContext context) async { + final DateTime picked = await showDatePicker( + context: context, + initialDate: DateTime.now(), + firstDate: DateTime(2015, 8), + lastDate: DateTime(2101)); + if (picked != null && picked != selectedDate) + setState(() { + selectedDate = picked; + }); + } +} diff --git a/lib/pages/login/welcome.dart b/lib/pages/login/welcome.dart index 1dab3e1a..978ff449 100644 --- a/lib/pages/login/welcome.dart +++ b/lib/pages/login/welcome.dart @@ -69,7 +69,11 @@ class WelcomeLogin extends StatelessWidget { Expanded( child: RaisedButton( child: Text(TranslationBase.of(context).no), - onPressed: () => {}, + onPressed: () => { + Navigator.of(context).pushNamed( + REGISTER, + ) + }, )) ], ), diff --git a/lib/providers/auth_provider.dart b/lib/providers/auth_provider.dart new file mode 100644 index 00000000..09b880b9 --- /dev/null +++ b/lib/providers/auth_provider.dart @@ -0,0 +1,96 @@ +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:flutter/cupertino.dart'; + +// SharedPreferences sharedPref = new SharedPreferences(); +enum APP_STATUS { LOADING, UNAUTHENTICATED, AUTHENTICATED } +AppSharedPreferences sharedPref = new AppSharedPreferences(); + +const String INSERT_DEVICE_IMEI = + 'Services/Patients.svc/REST/Patient_INSERTDeviceIMEI'; +const String SELECT_DEVICE_IMEI = + 'Services/Patients.svc/REST/Patient_SELECTDeviceIMEIbyIMEI'; + +class AuthProvider with ChangeNotifier { + bool isLogin = false; + bool isLoading = true; + AuthProvider() { + getUserAuthentication(); + } + + void getUserAuthentication() async { + Map profile = await sharedPref.getObject(USER_PROFILE); + if (profile != null) { + isLoading = false; + isLogin = true; + } else { + isLoading = false; + isLogin = false; + } + notifyListeners(); + } + + APP_STATUS get stutas { + if (isLoading) { + return APP_STATUS.LOADING; + } else { + if (this.isLogin) { + return APP_STATUS.AUTHENTICATED; + } else { + return APP_STATUS.UNAUTHENTICATED; + } + } + } + + // Future login(UserModel userInfo) async { + // try { + // dynamic localRes; + + // await BaseAppClient.post(LOGIN_URL, + // onSuccess: (dynamic response, int statusCode) { + // localRes = response; + // }, onFailure: (String error, int statusCode) { + // throw error; + // }, body: userInfo.toJson()); + + // return Future.value(localRes); + // } catch (error) { + // print(error); + // throw error; + // } + // } + + Future insertDeviceImei(imei) async { + try { + dynamic localRes; + + await new BaseAppClient().post(INSERT_DEVICE_IMEI, + onSuccess: (dynamic response, int statusCode) { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: imei); + return Future.value(localRes); + } catch (error) { + print(error); + throw error; + } + } + + Future selectDeviceImei(imei) async { + try { + dynamic localRes; + await new BaseAppClient().post(SELECT_DEVICE_IMEI, + onSuccess: (dynamic response, int statusCode) { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: imei); + return Future.value(localRes); + } catch (error) { + print(error); + throw error; + } + } +} diff --git a/lib/routes.dart b/lib/routes.dart index 2f25e075..8b3d1d4b 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,7 +1,9 @@ import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; +import 'package:diplomaticquarterapp/pages/login/forgot-password.dart'; import 'package:diplomaticquarterapp/pages/login/welcome.dart'; import 'package:diplomaticquarterapp/pages/login/login-type.dart'; import 'package:diplomaticquarterapp/pages/login/login.dart'; +import 'package:diplomaticquarterapp/pages/login/register.dart'; const String INIT_ROUTE = '/'; const String ROOT = 'root'; @@ -10,10 +12,14 @@ const String LOGIN = 'login'; const String WELCOME_LOGIN = 'welcome-login'; const String LOGIN_TYPE = 'login-type'; const String LOGIN_PAGE = 'login-page'; +const String FORGOT_PASSWORD = 'forgot-password'; +const String REGISTER = 'register'; var routes = { // ROOT: (_) => RootPage(), HOME: (_) => LandingPage(), WELCOME_LOGIN: (_) => WelcomeLogin(), LOGIN_TYPE: (_) => LoginType(), LOGIN_PAGE: (_) => Login(), + FORGOT_PASSWORD: (_) => ForgotPassword(), + REGISTER: (_) => Register() }; diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index ca48792c..8a99c420 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -59,6 +59,11 @@ class TranslationBase { String get profileInfo => localizedValues['profile-info'][locale.languageCode]; String get submit => localizedValues['submit'][locale.languageCode]; + String get forgotDesc => localizedValues['forgot-desc'][locale.languageCode]; + String get dob => localizedValues['dob'][locale.languageCode]; + String get hijriDate => localizedValues['hijri-date'][locale.languageCode]; + String get gregorianDate => + localizedValues['gregorian-date'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/mobile-no/mobile_no.dart b/lib/widgets/mobile-no/mobile_no.dart index a4407e73..a1304eff 100644 --- a/lib/widgets/mobile-no/mobile_no.dart +++ b/lib/widgets/mobile-no/mobile_no.dart @@ -31,45 +31,74 @@ class MobileNo extends StatefulWidget { } class _MobileNo extends State { + var _selectedType = 'Saudi Arabia'; + @override Widget build(BuildContext context) { return Visibility( - child: Container( - padding: EdgeInsets.all(5), - decoration: BoxDecoration( - border: Border.all(color: Colors.grey), - borderRadius: BorderRadius.circular(10)), - child: Row(children: [ - Expanded( - flex: 1, - child: Icon( - Icons.phone, - color: Colors.red, - )), - Expanded( - flex: 1, - child: Text( - widget.countryCode, - overflow: TextOverflow.clip, - )), - Expanded( - flex: 4, - child: Container( - margin: widget.margin != null - ? EdgeInsets.all(widget.margin) - : EdgeInsets.only( - top: widget.marginTop, - right: widget.marginRight, - bottom: widget.marginBottom, - left: widget.marginLeft), - child: TextField( - controller: widget.controller, - decoration: InputDecoration( - border: InputBorder.none, hintText: '5xxxxxxxx'), + child: Column(children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + // add Expanded to have your dropdown button fill remaining space + child: Padding( + padding: EdgeInsets.all(10), + child: DropdownButtonHideUnderline( + child: DropdownButton( + isExpanded: true, + value: _selectedType, + iconSize: 40, + elevation: 16, + onChanged: (newValue) => _selectedType = newValue, + items: [ + 'Saudi Arabia', + 'Dubai', + ].map>((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList())))), + ], + ), + Container( + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + border: Border.all(color: Colors.grey), + borderRadius: BorderRadius.circular(10)), + child: Row(children: [ + Expanded( + flex: 1, + child: Icon( + Icons.phone, + color: Colors.red, + )), + Expanded( + flex: 1, + child: Text( + widget.countryCode, + overflow: TextOverflow.clip, + )), + Expanded( + flex: 4, + child: Container( + margin: widget.margin != null + ? EdgeInsets.all(widget.margin) + : EdgeInsets.only( + top: widget.marginTop, + right: widget.marginRight, + bottom: widget.marginBottom, + left: widget.marginLeft), + child: TextField( + controller: widget.controller, + decoration: InputDecoration( + border: InputBorder.none, hintText: '5xxxxxxxx'), + ), ), - ), - ) - ]), - )); + ) + ]), + ) + ])); } } diff --git a/pubspec.yaml b/pubspec.yaml index 4bb76eaa..bbea1b45 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -38,7 +38,8 @@ dependencies: url_launcher: ^5.5.0 shared_preferences: ^0.5.8 flutter_flexible_toast: ^0.1.4 - + firebase_messaging: ^6.0.16 + # Progress bar progress_hud_v2: ^2.0.0 percent_indicator: ^2.1.5