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