new pages added

merge-update-with-lab-changes
Sultan Khan 6 years ago
parent 192b21a7e7
commit f8d8e1c685

@ -23,6 +23,7 @@ if (flutterVersionName == null) {
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android { android {
@ -60,4 +61,5 @@ flutter {
dependencies { dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "com.google.firebase:firebase-messaging:20.1.0"
} }

@ -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"
}

@ -37,6 +37,10 @@
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter> </intent-filter>
<intent-filter>
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity> </activity>
<!-- Don't delete the meta-data below. <!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->

@ -8,6 +8,7 @@ buildscript {
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.5.0' classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.2'
} }
} }

@ -41,4 +41,11 @@ const Map<String, Map<String, String>> localizedValues = {
"ar": "الرجاء إدخال معلومات الملف الشخصي" "ar": "الرجاء إدخال معلومات الملف الشخصي"
}, },
"submit": {"en": "Submit", "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": "التاريخ الميلادي"},
}; };

@ -1,3 +1,3 @@
const TOKEN = 'token'; const TOKEN = 'token';
const APP_LANGUAGE = 'language'; const APP_LANGUAGE = 'language';
const USER_PROFILE = 'user-profile';

@ -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<String, dynamic> 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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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;
}
}

@ -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:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'home_page.dart'; import 'home_page.dart';
class LandingPage extends StatefulWidget { class LandingPage extends StatefulWidget {
@ -15,7 +15,7 @@ class LandingPage extends StatefulWidget {
class _LandingPageState extends State<LandingPage> { class _LandingPageState extends State<LandingPage> {
int currentTab = 0; int currentTab = 0;
PageController pageController; PageController pageController;
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
_changeCurrentTab(int tab) { _changeCurrentTab(int tab) {
setState(() { setState(() {
currentTab = tab; currentTab = tab;
@ -27,6 +27,10 @@ class _LandingPageState extends State<LandingPage> {
void initState() { void initState() {
super.initState(); super.initState();
pageController = PageController(keepPage: true); pageController = PageController(keepPage: true);
_firebaseMessaging.getToken().then((String token) {
print(token);
//assert(token != null);
});
} }
@override @override

@ -7,8 +7,13 @@ import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ForgotPassword extends StatelessWidget { class ForgotPassword extends StatefulWidget {
final String selectedType = 'Saudi Arabia'; @override
_ForgotPassword createState() => _ForgotPassword();
}
class _ForgotPassword extends State<ForgotPassword> {
String selectedType = 'Saudi Arabia';
final TextEditingController nationalIDorFile = null; final TextEditingController nationalIDorFile = null;
final TextEditingController mobileNo = null; final TextEditingController mobileNo = null;
@override @override
@ -18,14 +23,14 @@ class ForgotPassword extends StatelessWidget {
isShowAppBar: true, isShowAppBar: true,
body: SingleChildScrollView( body: SingleChildScrollView(
child: Container( child: Container(
padding: EdgeInsets.only(top: 10, left: 10, right: 10), padding: EdgeInsets.only(top: 10, left: 20, right: 20),
height: SizeConfig.realScreenHeight * .8, height: SizeConfig.realScreenHeight * .8,
width: SizeConfig.realScreenWidth, width: SizeConfig.realScreenWidth,
child: Column(children: <Widget>[ child: Column(children: <Widget>[
Expanded( Expanded(
flex: 1, flex: 1,
child: AppText( child: AppText(
TranslationBase.of(context).enterNationalId, TranslationBase.of(context).forgotDesc,
fontSize: SizeConfig.textMultiplier * 3.5, fontSize: SizeConfig.textMultiplier * 3.5,
textAlign: TextAlign.left, textAlign: TextAlign.left,
)), )),
@ -45,9 +50,11 @@ class ForgotPassword extends StatelessWidget {
value: selectedType, value: selectedType,
iconSize: 40, iconSize: 40,
elevation: 16, elevation: 16,
// selectedItemBuilder: onChanged: (String newValue) => {
// (BuildContext context) {}, setState(() {
onChanged: (String newValue) => {}, selectedType = newValue;
})
},
items: <String>[ items: <String>[
'Saudi Arabia', 'Saudi Arabia',
'Dubai', 'Dubai',

@ -108,11 +108,16 @@ class LoginType extends StatelessWidget {
height: 2, height: 2,
), ),
Center( Center(
child: AppText( child: InkWell(
TranslationBase.of(context).forgotPassword, onTap: () => {
fontSize: SizeConfig.textMultiplier * 3, Navigator.of(context)
margin: 10, .pushNamed(FORGOT_PASSWORD)
underline: true)) },
child: AppText(
TranslationBase.of(context).forgotPassword,
fontSize: SizeConfig.textMultiplier * 3,
margin: 10,
underline: true)))
]), ]),
), ),
Expanded( Expanded(
@ -128,7 +133,11 @@ class LoginType extends StatelessWidget {
textColor: Colors.white, textColor: Colors.white,
child: child:
Text(TranslationBase.of(context).registerNow), Text(TranslationBase.of(context).registerNow),
onPressed: () => {}, onPressed: () => {
Navigator.of(context).pushNamed(
REGISTER,
)
},
)) ))
], ],
), ),

@ -10,8 +10,12 @@ import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class Login extends StatelessWidget { class Login extends StatefulWidget {
final String _selectedType = 'Saudi Arabia'; @override
_Login createState() => _Login();
}
class _Login extends State<Login> {
final TextEditingController nationalIDorFile = null; final TextEditingController nationalIDorFile = null;
final int loginType = LoginType.loginType; final int loginType = LoginType.loginType;
final TextEditingController mobileNo = null; final TextEditingController mobileNo = null;
@ -23,7 +27,7 @@ class Login extends StatelessWidget {
isShowAppBar: true, isShowAppBar: true,
body: SingleChildScrollView( body: SingleChildScrollView(
child: Container( child: Container(
padding: EdgeInsets.only(top: 10, left: 10, right: 10), padding: EdgeInsets.only(top: 10, left: 20, right: 20),
height: SizeConfig.realScreenHeight * .8, height: SizeConfig.realScreenHeight * .8,
width: SizeConfig.realScreenWidth, width: SizeConfig.realScreenWidth,
child: Column(children: <Widget>[ child: Column(children: <Widget>[
@ -39,32 +43,6 @@ class Login extends StatelessWidget {
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[ children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
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: <String>[
'Saudi Arabia',
'Dubai',
].map<DropdownMenuItem<String>>(
(String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList()))),
],
),
MobileNo(controller: mobileNo), MobileNo(controller: mobileNo),
Container( Container(
child: TextFields( child: TextFields(

@ -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<Register> {
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: <Widget>[
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: <Widget>[
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: <Widget>[
Expanded(
child: Row(
children: <Widget>[
Radio(
value: 1,
groupValue: isHijri,
onChanged: (value) {
setState(() {
isHijri = value;
});
},
),
Text(TranslationBase.of(context).hijriDate),
],
),
),
Expanded(
child: Row(
children: <Widget>[
Radio(
value: 0,
groupValue: isHijri,
onChanged: (value) {
setState(() {
isHijri = value;
});
},
),
Text(TranslationBase.of(context).gregorianDate),
],
),
),
],
),
Row(children: <Widget>[
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: <Widget>[
Row(
children: <Widget>[
Expanded(
child: RaisedButton(
color: Colors.grey,
textColor: Colors.white,
child: Text(TranslationBase.of(context).login),
onPressed: () => {},
))
],
),
],
))
]),
)));
}
Future<Null> _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;
});
}
}

@ -69,7 +69,11 @@ class WelcomeLogin extends StatelessWidget {
Expanded( Expanded(
child: RaisedButton( child: RaisedButton(
child: Text(TranslationBase.of(context).no), child: Text(TranslationBase.of(context).no),
onPressed: () => {}, onPressed: () => {
Navigator.of(context).pushNamed(
REGISTER,
)
},
)) ))
], ],
), ),

@ -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<dynamic> 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<dynamic> 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<dynamic> 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;
}
}
}

@ -1,7 +1,9 @@
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; 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/welcome.dart';
import 'package:diplomaticquarterapp/pages/login/login-type.dart'; import 'package:diplomaticquarterapp/pages/login/login-type.dart';
import 'package:diplomaticquarterapp/pages/login/login.dart'; import 'package:diplomaticquarterapp/pages/login/login.dart';
import 'package:diplomaticquarterapp/pages/login/register.dart';
const String INIT_ROUTE = '/'; const String INIT_ROUTE = '/';
const String ROOT = 'root'; const String ROOT = 'root';
@ -10,10 +12,14 @@ const String LOGIN = 'login';
const String WELCOME_LOGIN = 'welcome-login'; const String WELCOME_LOGIN = 'welcome-login';
const String LOGIN_TYPE = 'login-type'; const String LOGIN_TYPE = 'login-type';
const String LOGIN_PAGE = 'login-page'; const String LOGIN_PAGE = 'login-page';
const String FORGOT_PASSWORD = 'forgot-password';
const String REGISTER = 'register';
var routes = { var routes = {
// ROOT: (_) => RootPage(), // ROOT: (_) => RootPage(),
HOME: (_) => LandingPage(), HOME: (_) => LandingPage(),
WELCOME_LOGIN: (_) => WelcomeLogin(), WELCOME_LOGIN: (_) => WelcomeLogin(),
LOGIN_TYPE: (_) => LoginType(), LOGIN_TYPE: (_) => LoginType(),
LOGIN_PAGE: (_) => Login(), LOGIN_PAGE: (_) => Login(),
FORGOT_PASSWORD: (_) => ForgotPassword(),
REGISTER: (_) => Register()
}; };

@ -59,6 +59,11 @@ class TranslationBase {
String get profileInfo => String get profileInfo =>
localizedValues['profile-info'][locale.languageCode]; localizedValues['profile-info'][locale.languageCode];
String get submit => localizedValues['submit'][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<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -31,45 +31,74 @@ class MobileNo extends StatefulWidget {
} }
class _MobileNo extends State<MobileNo> { class _MobileNo extends State<MobileNo> {
var _selectedType = 'Saudi Arabia';
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Visibility( return Visibility(
child: Container( child: Column(children: <Widget>[
padding: EdgeInsets.all(5), Row(
decoration: BoxDecoration( mainAxisAlignment: MainAxisAlignment.center,
border: Border.all(color: Colors.grey), children: <Widget>[
borderRadius: BorderRadius.circular(10)), Expanded(
child: Row(children: <Widget>[ // add Expanded to have your dropdown button fill remaining space
Expanded( child: Padding(
flex: 1, padding: EdgeInsets.all(10),
child: Icon( child: DropdownButtonHideUnderline(
Icons.phone, child: DropdownButton(
color: Colors.red, isExpanded: true,
)), value: _selectedType,
Expanded( iconSize: 40,
flex: 1, elevation: 16,
child: Text( onChanged: (newValue) => _selectedType = newValue,
widget.countryCode, items: <String>[
overflow: TextOverflow.clip, 'Saudi Arabia',
)), 'Dubai',
Expanded( ].map<DropdownMenuItem<String>>((String value) {
flex: 4, return DropdownMenuItem<String>(
child: Container( value: value,
margin: widget.margin != null child: Text(value),
? EdgeInsets.all(widget.margin) );
: EdgeInsets.only( }).toList())))),
top: widget.marginTop, ],
right: widget.marginRight, ),
bottom: widget.marginBottom, Container(
left: widget.marginLeft), padding: EdgeInsets.all(5),
child: TextField( decoration: BoxDecoration(
controller: widget.controller, border: Border.all(color: Colors.grey),
decoration: InputDecoration( borderRadius: BorderRadius.circular(10)),
border: InputBorder.none, hintText: '5xxxxxxxx'), child: Row(children: <Widget>[
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'),
),
), ),
), )
) ]),
]), )
)); ]));
} }
} }

@ -38,6 +38,7 @@ dependencies:
url_launcher: ^5.5.0 url_launcher: ^5.5.0
shared_preferences: ^0.5.8 shared_preferences: ^0.5.8
flutter_flexible_toast: ^0.1.4 flutter_flexible_toast: ^0.1.4
firebase_messaging: ^6.0.16
# Progress bar # Progress bar
progress_hud_v2: ^2.0.0 progress_hud_v2: ^2.0.0

Loading…
Cancel
Save