add invitation
This commit is contained in:
@@ -45,6 +45,22 @@
|
|||||||
"faq.edit.delete.confirm":"Delete this FAQ?",
|
"faq.edit.delete.confirm":"Delete this FAQ?",
|
||||||
|
|
||||||
|
|
||||||
|
"language.selection.title":"Please select your language",
|
||||||
|
|
||||||
|
"welcome.signin":"Sign In",
|
||||||
|
"welcome.msg":"Welcome to FCS Logistics!",
|
||||||
|
|
||||||
|
"sms.verify.title":"Verify your number",
|
||||||
|
"sms.six.digit":"Enter 6 digit sms code sent to",
|
||||||
|
"sms.resend":"Resend",
|
||||||
|
"sms.resend.seconds":"Resend again in {0} seconds",
|
||||||
|
|
||||||
|
"invite.title":"You need invitation from FCS",
|
||||||
|
"invite.name.enter":"Please enter your name",
|
||||||
|
"invite.request":"Request Invitation",
|
||||||
|
"invite.request.successful":"Successfully requested!",
|
||||||
|
|
||||||
|
"================================================================":"",
|
||||||
|
|
||||||
"btn.save": "Save",
|
"btn.save": "Save",
|
||||||
"btn.approve":"Approve",
|
"btn.approve":"Approve",
|
||||||
@@ -495,11 +511,6 @@
|
|||||||
"login": "SignIn",
|
"login": "SignIn",
|
||||||
"login.title":"Sign in to FCS",
|
"login.title":"Sign in to FCS",
|
||||||
"login.phone":"Enter phone number",
|
"login.phone":"Enter phone number",
|
||||||
"login.smscode.retry":"Resend again in {0} seconds",
|
|
||||||
|
|
||||||
"singup.verify.title":"Verify your number",
|
|
||||||
"singup.code_sent":"Enter 6 digit sms code sent to",
|
|
||||||
"singup.resend":"Resend",
|
|
||||||
|
|
||||||
"user_edit.welcome":"Welcome to FCS",
|
"user_edit.welcome":"Welcome to FCS",
|
||||||
"user_edit.name":"Please enter your name",
|
"user_edit.name":"Please enter your name",
|
||||||
|
|||||||
@@ -44,6 +44,25 @@
|
|||||||
"faq.edit.sn":"S/N",
|
"faq.edit.sn":"S/N",
|
||||||
"faq.edit.delete.confirm":"Delete this FAQ?",
|
"faq.edit.delete.confirm":"Delete this FAQ?",
|
||||||
|
|
||||||
|
|
||||||
|
"language.selection.title":"ဘာသာစကား ရွေးချယ်ပါ",
|
||||||
|
|
||||||
|
"welcome.signin":"ဝင်မည်",
|
||||||
|
"welcome.msg":"FCS Logistics က ကြိုဆိုပါတယ်!",
|
||||||
|
|
||||||
|
"sms.verify.title":"သင့်နံပါတ်ကိုအတည်ပြုပါ",
|
||||||
|
"sms.six.digit":"SMS ဂဏန်း ခြောက်လုံး ကိုရိုက်ထဲ့ပါ",
|
||||||
|
"sms.resend":"ပြန်ပို့ရန်",
|
||||||
|
"sms.resend.seconds":"SMS ပြန်ပို့ရန် {0} စက္ကန့် စောင့်ပါ",
|
||||||
|
|
||||||
|
"invite.title":"FCS ဖိတ်ကြားမှု လိုအပ်သည်",
|
||||||
|
"invite.name.enter":"နာမည် ရိုက်ထည့်ပါ",
|
||||||
|
"invite.request":"ဖိတ်ကြားမှု တောင်းဆိုမည်",
|
||||||
|
"invite.request.successful":"တောင်းဆိုမှု အောင်မြင်သည်!",
|
||||||
|
|
||||||
|
"================================================================":"",
|
||||||
|
|
||||||
|
|
||||||
"btn.save":"သိမ်းဆည်းရန်",
|
"btn.save":"သိမ်းဆည်းရန်",
|
||||||
"btn.approve":"အတည်ပြုရန်",
|
"btn.approve":"အတည်ပြုရန်",
|
||||||
|
|
||||||
@@ -523,11 +542,6 @@
|
|||||||
"login": "SignIn",
|
"login": "SignIn",
|
||||||
"login.title":"FCS သို့အကောင့်ဒ်၀င်ပါ",
|
"login.title":"FCS သို့အကောင့်ဒ်၀င်ပါ",
|
||||||
"login.phone":"ဖုန်းနံပါတ်ထည့်ပါ",
|
"login.phone":"ဖုန်းနံပါတ်ထည့်ပါ",
|
||||||
"login.smscode.retry":"Resend again in {0} seconds",
|
|
||||||
|
|
||||||
"singup.verify.title":"သင့်နံပါတ်ကိုအတည်ပြုပါ",
|
|
||||||
"singup.code_sent":"Enter 6 digit sms code sent to",
|
|
||||||
"singup.resend":"ပြန်ပို့ရန်",
|
|
||||||
|
|
||||||
"user_edit.welcome":"FCS မှကြိုဆိုပါသည်",
|
"user_edit.welcome":"FCS မှကြိုဆိုပါသည်",
|
||||||
"user_edit.name":"ကျေးဇူးပြု၍ နာမည်ထည့်ပေးပါ",
|
"user_edit.name":"ကျေးဇူးပြု၍ နာမည်ထည့်ပေးပါ",
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ import 'package:fcs/fcs/common/localization/transalation.dart';
|
|||||||
import 'package:fcs/fcs/common/pages/contact/model/contact_model.dart';
|
import 'package:fcs/fcs/common/pages/contact/model/contact_model.dart';
|
||||||
import 'package:fcs/fcs/common/pages/customers/model/customer_model.dart';
|
import 'package:fcs/fcs/common/pages/customers/model/customer_model.dart';
|
||||||
import 'package:fcs/fcs/common/pages/faq/model/faq_model.dart';
|
import 'package:fcs/fcs/common/pages/faq/model/faq_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/initial_language_selection.dart';
|
||||||
import 'package:fcs/fcs/common/pages/model/language_model.dart';
|
import 'package:fcs/fcs/common/pages/model/language_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/signin/model/signin_model.dart';
|
||||||
import 'package:fcs/fcs/common/pages/term/model/term_model.dart';
|
import 'package:fcs/fcs/common/pages/term/model/term_model.dart';
|
||||||
import 'package:fcs/fcs/common/services/services.dart';
|
import 'package:fcs/fcs/common/services/services.dart';
|
||||||
import 'package:fcs/model/buyer_model.dart';
|
import 'package:fcs/model/buyer_model.dart';
|
||||||
@@ -92,6 +94,7 @@ class _AppState extends State<App> {
|
|||||||
final InvoiceModel invoiceModel = new InvoiceModel();
|
final InvoiceModel invoiceModel = new InvoiceModel();
|
||||||
final CustomerModel customerModel = new CustomerModel();
|
final CustomerModel customerModel = new CustomerModel();
|
||||||
final DiscountModel discountModel = new DiscountModel();
|
final DiscountModel discountModel = new DiscountModel();
|
||||||
|
final SigninModel signinModel = new SigninModel();
|
||||||
|
|
||||||
AppTranslationsDelegate _newLocaleDelegate;
|
AppTranslationsDelegate _newLocaleDelegate;
|
||||||
static FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin =
|
static FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin =
|
||||||
@@ -209,7 +212,8 @@ class _AppState extends State<App> {
|
|||||||
agreePage: true,
|
agreePage: true,
|
||||||
),
|
),
|
||||||
'/login': (context) => LoginPage(),
|
'/login': (context) => LoginPage(),
|
||||||
'/email': (context) => EmailPage()
|
'/email': (context) => EmailPage(),
|
||||||
|
'/language_selection': (context) => InitialLanguageSelectionPage(),
|
||||||
};
|
};
|
||||||
return routes;
|
return routes;
|
||||||
}
|
}
|
||||||
@@ -251,6 +255,7 @@ class _AppState extends State<App> {
|
|||||||
ChangeNotifierProvider.value(value: contactModel),
|
ChangeNotifierProvider.value(value: contactModel),
|
||||||
ChangeNotifierProvider.value(value: termModel),
|
ChangeNotifierProvider.value(value: termModel),
|
||||||
ChangeNotifierProvider.value(value: faqModel),
|
ChangeNotifierProvider.value(value: faqModel),
|
||||||
|
ChangeNotifierProvider.value(value: signinModel),
|
||||||
],
|
],
|
||||||
child: Consumer<LanguageModel>(
|
child: Consumer<LanguageModel>(
|
||||||
builder: (context, value, child) {
|
builder: (context, value, child) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ class User {
|
|||||||
String name;
|
String name;
|
||||||
String phoneNumber;
|
String phoneNumber;
|
||||||
bool hasSignup;
|
bool hasSignup;
|
||||||
|
bool invited;
|
||||||
List<String> privileges = [];
|
List<String> privileges = [];
|
||||||
|
|
||||||
String fcsID;
|
String fcsID;
|
||||||
|
|||||||
@@ -29,7 +29,9 @@ Future<dynamic> requestAPI(
|
|||||||
if (token != null) {
|
if (token != null) {
|
||||||
headers["Token"] = token;
|
headers["Token"] = token;
|
||||||
}
|
}
|
||||||
|
if (devInfo != null && devInfo.deviceID != null && deviceName != null) {
|
||||||
headers["Device"] = devInfo.deviceID + ":" + deviceName;
|
headers["Device"] = devInfo.deviceID + ":" + deviceName;
|
||||||
|
}
|
||||||
headers["Project-ID"] = Config.instance.reportProjectID;
|
headers["Project-ID"] = Config.instance.reportProjectID;
|
||||||
|
|
||||||
BaseOptions options = new BaseOptions(
|
BaseOptions options = new BaseOptions(
|
||||||
|
|||||||
@@ -3,11 +3,20 @@ import 'dart:convert';
|
|||||||
import 'package:fcs/fcs/common/domain/entities/user.dart';
|
import 'package:fcs/fcs/common/domain/entities/user.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
|
|
||||||
class SharedPref {
|
class SharedPref {
|
||||||
static final SharedPref instance = SharedPref._();
|
static final SharedPref instance = SharedPref._();
|
||||||
SharedPref._();
|
SharedPref._();
|
||||||
|
|
||||||
|
static Future<bool> isFirstLaunch() async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
return prefs.getBool('first_launch');
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<void> finishFirstLaunch() async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
return prefs.setBool('first_launch', false);
|
||||||
|
}
|
||||||
|
|
||||||
static Future<String> getLang() async {
|
static Future<String> getLang() async {
|
||||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
return prefs.getString('language');
|
return prefs.getString('language');
|
||||||
|
|||||||
@@ -214,6 +214,7 @@ class _HomePageState extends State<HomePage> {
|
|||||||
],
|
],
|
||||||
onPressed: _langChange,
|
onPressed: _langChange,
|
||||||
isSelected: languageModel.currentState,
|
isSelected: languageModel.currentState,
|
||||||
|
selectedBorderColor: Colors.white24,
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
|||||||
187
lib/fcs/common/pages/initial_language_selection.dart
Normal file
187
lib/fcs/common/pages/initial_language_selection.dart
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
import 'package:fcs/fcs/common/helpers/shared_pref.dart';
|
||||||
|
import 'package:fcs/fcs/common/helpers/theme.dart';
|
||||||
|
import 'package:fcs/fcs/common/localization/transalation.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/model/language_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/model/main_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/signin/signin_page.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/widgets/local_text.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class InitialLanguageSelectionPage extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_InitialLanguageSelectionPageState createState() =>
|
||||||
|
_InitialLanguageSelectionPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _InitialLanguageSelectionPageState
|
||||||
|
extends State<InitialLanguageSelectionPage> {
|
||||||
|
static final List<String> languagesList = Translation().supportedLanguages;
|
||||||
|
static final List<String> languageCodesList =
|
||||||
|
Translation().supportedLanguagesCodes;
|
||||||
|
|
||||||
|
final Map<dynamic, dynamic> languagesMap = {
|
||||||
|
languagesList[0]: languageCodesList[0],
|
||||||
|
languagesList[1]: languageCodesList[1],
|
||||||
|
};
|
||||||
|
|
||||||
|
String selectedLanguage;
|
||||||
|
int selectedIndex;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
var languageModel = Provider.of<LanguageModel>(context, listen: false);
|
||||||
|
this.selectedIndex = languageModel.isEng ? 0 : 1;
|
||||||
|
loadLaunguage(languageModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
loadLaunguage(LanguageModel languageModel) async {
|
||||||
|
var lan = await languageModel.load();
|
||||||
|
if (this.selectedLanguage != lan) {
|
||||||
|
setState(() {
|
||||||
|
this.selectedLanguage = lan;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Material(
|
||||||
|
type: MaterialType.transparency,
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
gradient: LinearGradient(
|
||||||
|
colors: [Color(0xff272282), primaryColor],
|
||||||
|
begin: const FractionalOffset(0.8, 0.9),
|
||||||
|
end: const FractionalOffset(0.9, 0.0),
|
||||||
|
stops: [0.0, 1.0],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
height: 40,
|
||||||
|
child: LocalText(context, "language.selection.title",
|
||||||
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.w200,
|
||||||
|
color: Colors.white),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(top: 0),
|
||||||
|
child: Card(
|
||||||
|
color: Color(0xfff4edec),
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(20)),
|
||||||
|
),
|
||||||
|
child: Container(
|
||||||
|
padding: EdgeInsets.only(top: 20),
|
||||||
|
width: 300,
|
||||||
|
height: 160,
|
||||||
|
child: Column(
|
||||||
|
children: languagesList.asMap().entries.map((e) {
|
||||||
|
var language = e.value;
|
||||||
|
var key = e.key;
|
||||||
|
return InkWell(
|
||||||
|
onTap: () {
|
||||||
|
_select(key, language);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
padding: EdgeInsets.all(2),
|
||||||
|
decoration: key == languagesList.length - 1
|
||||||
|
? BoxDecoration()
|
||||||
|
: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom:
|
||||||
|
BorderSide(color: Colors.grey[300]),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: ListTile(
|
||||||
|
leading: language == 'English'
|
||||||
|
? Container(
|
||||||
|
child: CircleAvatar(
|
||||||
|
radius: 20,
|
||||||
|
backgroundImage: AssetImage(
|
||||||
|
"icons/flags/png/gb.png",
|
||||||
|
package: 'country_icons',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: Container(
|
||||||
|
child: CircleAvatar(
|
||||||
|
radius: 20,
|
||||||
|
backgroundImage: AssetImage(
|
||||||
|
"icons/flags/png/mm.png",
|
||||||
|
package: 'country_icons',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
title: Text("$language"),
|
||||||
|
trailing: Theme(
|
||||||
|
data: Theme.of(context).copyWith(
|
||||||
|
unselectedWidgetColor: Colors.grey[400],
|
||||||
|
),
|
||||||
|
child: Radio(
|
||||||
|
value: key,
|
||||||
|
groupValue: selectedIndex,
|
||||||
|
onChanged: (int i) =>
|
||||||
|
_select(key, language),
|
||||||
|
activeColor: primaryColor,
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 20.0),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(left: 230, top: 20),
|
||||||
|
child: Container(
|
||||||
|
width: 50,
|
||||||
|
height: 50,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
_next();
|
||||||
|
},
|
||||||
|
child: CircleAvatar(
|
||||||
|
radius: 25,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
child: Center(
|
||||||
|
child: Icon(FontAwesomeIcons.arrowRight,
|
||||||
|
color: Colors.black87)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_select(int index, String lang) {
|
||||||
|
setState(() {
|
||||||
|
selectedIndex = index;
|
||||||
|
selectedLanguage = lang;
|
||||||
|
Translation().onLocaleChanged(Locale(languagesMap[lang]));
|
||||||
|
Provider.of<LanguageModel>(context, listen: false)
|
||||||
|
.saveLanguage(selectedLanguage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_next() {
|
||||||
|
SharedPref.finishFirstLaunch();
|
||||||
|
bool isLogin = Provider.of<MainModel>(context, listen: false).isLogin();
|
||||||
|
String page = isLogin ? "/home" : "/welcome";
|
||||||
|
Navigator.of(context).pushReplacementNamed(page);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,7 +31,6 @@ class LanguageModel extends BaseModel {
|
|||||||
}
|
}
|
||||||
this.language = result;
|
this.language = result;
|
||||||
Translation().onLocaleChanged(Locale(languagesMap[this.language]));
|
Translation().onLocaleChanged(Locale(languagesMap[this.language]));
|
||||||
print("lang=====$result");
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
|
||||||
|
|
||||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
||||||
import 'package:device_info/device_info.dart';
|
|
||||||
import 'package:dio/dio.dart';
|
|
||||||
import 'package:fcs/fcs/common/domain/entities/auth_result.dart';
|
import 'package:fcs/fcs/common/domain/entities/auth_result.dart';
|
||||||
import 'package:fcs/fcs/common/domain/entities/auth_status.dart';
|
import 'package:fcs/fcs/common/domain/entities/auth_status.dart';
|
||||||
import 'package:fcs/fcs/common/domain/entities/setting.dart';
|
import 'package:fcs/fcs/common/domain/entities/setting.dart';
|
||||||
import 'package:fcs/fcs/common/domain/entities/user.dart';
|
import 'package:fcs/fcs/common/domain/entities/user.dart';
|
||||||
import 'package:fcs/fcs/common/helpers/network_connectivity.dart';
|
import 'package:fcs/fcs/common/helpers/network_connectivity.dart';
|
||||||
|
import 'package:fcs/fcs/common/helpers/shared_pref.dart';
|
||||||
import 'package:fcs/fcs/common/pages/model/base_model.dart';
|
import 'package:fcs/fcs/common/pages/model/base_model.dart';
|
||||||
import 'package:fcs/fcs/common/services/services.dart';
|
import 'package:fcs/fcs/common/services/services.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
@@ -22,12 +19,11 @@ class MainModel extends ChangeNotifier {
|
|||||||
User user;
|
User user;
|
||||||
PackageInfo packageInfo;
|
PackageInfo packageInfo;
|
||||||
|
|
||||||
Setting setting = Setting(
|
Setting setting;
|
||||||
terms:
|
|
||||||
'[{"insert":"* Minimum shipping weight is 1lbs.\n* Oversized goods, Light weight/Large volume items, laptops, phones, tablets may incur extra charges based on pecifications.Please contact us for pricing.\n* Goods with lithium battary needs extra packaging and declaration. Please inform us ahead of time so that we can process your package accordingly.\n* Loose Batteries, Drones, and Prescription medicines are not allowed on aircraft.\n* Payment: We accept money orders, any US bank transfers via Zelle, AYA, KBZ and CB. No COD except for pick-ups.\n*Payments made in Myanmar will incur 2% tranfer fee\n"}]');
|
|
||||||
|
|
||||||
bool isLoaded = false;
|
bool isLoaded = false;
|
||||||
bool isOnline = false;
|
bool isOnline = false;
|
||||||
|
bool isFirstLaunch = false;
|
||||||
|
|
||||||
MainModel() {
|
MainModel() {
|
||||||
NetworkConnectivity.instance.statusStream.listen((data) {
|
NetworkConnectivity.instance.statusStream.listen((data) {
|
||||||
@@ -41,22 +37,21 @@ class MainModel extends ChangeNotifier {
|
|||||||
Services.instance.authService.onAuthStatus().listen((event) {
|
Services.instance.authService.onAuthStatus().listen((event) {
|
||||||
this.user = event;
|
this.user = event;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
print("main event-->$event");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
bool faqEditable() {
|
bool faqEditable() {
|
||||||
return this.user != null && false;
|
return this.user != null && false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool termEditable() {
|
bool termEditable() {
|
||||||
return this.user != null && false;
|
return this.user != null && false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool contactEditable() {
|
bool contactEditable() {
|
||||||
return this.user != null && false;
|
return this.user != null && false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool isLogin() {
|
bool isLogin() {
|
||||||
return this.user != null;
|
return this.user != null;
|
||||||
}
|
}
|
||||||
@@ -69,13 +64,15 @@ class MainModel extends ChangeNotifier {
|
|||||||
return this.user != null && this.user.hasSysAdmin();
|
return this.user != null && this.user.hasSysAdmin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool isAdmin() {
|
bool isAdmin() {
|
||||||
return this.user != null && this.user.hasAdmin();
|
return this.user != null && this.user.hasAdmin();
|
||||||
}
|
}
|
||||||
|
|
||||||
init() async {
|
init() async {
|
||||||
await _loadSetting();
|
await _loadSetting();
|
||||||
|
this.isFirstLaunch = await SharedPref.isFirstLaunch();
|
||||||
|
this.isFirstLaunch = this.isFirstLaunch ?? true;
|
||||||
|
|
||||||
_loadUser();
|
_loadUser();
|
||||||
this.packageInfo = await PackageInfo.fromPlatform();
|
this.packageInfo = await PackageInfo.fromPlatform();
|
||||||
}
|
}
|
||||||
@@ -126,7 +123,6 @@ class MainModel extends ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isSupport() {
|
bool isSupport() {
|
||||||
return true;
|
|
||||||
if (packageInfo == null || setting == null) return false;
|
if (packageInfo == null || setting == null) return false;
|
||||||
return int.parse(packageInfo.buildNumber) >= setting.supportBuildNum;
|
return int.parse(packageInfo.buildNumber) >= setting.supportBuildNum;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import 'package:fcs/pages_fcs/shipping_address_row.dart';
|
|||||||
import 'package:fcs/vo/role.dart';
|
import 'package:fcs/vo/role.dart';
|
||||||
import 'package:fcs/vo/shipping_address.dart';
|
import 'package:fcs/vo/shipping_address.dart';
|
||||||
import 'package:fcs/widget/bottom_up_page_route.dart';
|
import 'package:fcs/widget/bottom_up_page_route.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
@@ -129,7 +130,6 @@ class _ProfileState extends State<Profile> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
final logoutbutton = Container(
|
final logoutbutton = Container(
|
||||||
padding: EdgeInsets.only(left: 20.0, right: 24.0),
|
padding: EdgeInsets.only(left: 20.0, right: 24.0),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
@@ -183,6 +183,13 @@ class _ProfileState extends State<Profile> {
|
|||||||
inAsyncCall: _isLoading,
|
inAsyncCall: _isLoading,
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
|
leading: IconButton(
|
||||||
|
icon: Icon(
|
||||||
|
CupertinoIcons.back,
|
||||||
|
size: 30,
|
||||||
|
),
|
||||||
|
onPressed: () => Navigator.of(context).pop(),
|
||||||
|
),
|
||||||
title: Text(
|
title: Text(
|
||||||
AppTranslations.of(context).text("profile.title"),
|
AppTranslations.of(context).text("profile.title"),
|
||||||
),
|
),
|
||||||
|
|||||||
122
lib/fcs/common/pages/signin/invitation_request_page.dart
Normal file
122
lib/fcs/common/pages/signin/invitation_request_page.dart
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
import 'package:fcs/fcs/common/pages/model/main_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/signin/model/signin_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/util.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import '../../../../widget/local_text.dart';
|
||||||
|
import '../../../../widget/progress.dart';
|
||||||
|
import '../../helpers/theme.dart';
|
||||||
|
|
||||||
|
class RequestInvitationPage extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_RequestInvitationPageState createState() => _RequestInvitationPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _RequestInvitationPageState extends State<RequestInvitationPage> {
|
||||||
|
bool _isLoading = false;
|
||||||
|
TextEditingController nameCtl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
nameCtl = new TextEditingController();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return LocalProgress(
|
||||||
|
inAsyncCall: _isLoading,
|
||||||
|
child: new Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
centerTitle: true,
|
||||||
|
leading: new IconButton(
|
||||||
|
icon: new Icon(Icons.close),
|
||||||
|
onPressed: () => Navigator.of(context).pop(),
|
||||||
|
),
|
||||||
|
backgroundColor: primaryColor,
|
||||||
|
),
|
||||||
|
body: _buildBody(context),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildBody(BuildContext context) {
|
||||||
|
return ListView(
|
||||||
|
padding: EdgeInsets.only(top: 5, left: 10, right: 10),
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(top: 40),
|
||||||
|
child: LocalText(
|
||||||
|
context,
|
||||||
|
'invite.title',
|
||||||
|
fontSize: 21,
|
||||||
|
color: primaryColor,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(top: 25),
|
||||||
|
child: LocalText(
|
||||||
|
context,
|
||||||
|
'invite.name.enter',
|
||||||
|
color: labelColor,
|
||||||
|
fontSize: 16,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(top: 0, bottom: 10),
|
||||||
|
child: TextFormField(
|
||||||
|
controller: nameCtl,
|
||||||
|
cursorColor: primaryColor,
|
||||||
|
textAlign: TextAlign.left,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
autofocus: true,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18,
|
||||||
|
),
|
||||||
|
decoration: new InputDecoration(
|
||||||
|
enabledBorder: UnderlineInputBorder(
|
||||||
|
borderSide: BorderSide(color: primaryColor, width: 1.0)),
|
||||||
|
focusedBorder: UnderlineInputBorder(
|
||||||
|
borderSide: BorderSide(color: primaryColor, width: 1.0)),
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
SizedBox(
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
RaisedButton(
|
||||||
|
onPressed: _request,
|
||||||
|
child: Text(getLocalString(context, "invite.request")),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_request() async {
|
||||||
|
setState(() {
|
||||||
|
_isLoading = true;
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
await context.read<SigninModel>().requestInvitation(nameCtl.text);
|
||||||
|
await showMsgDialog(context, "Successful",
|
||||||
|
getLocalString(context, "invite.request.successful"));
|
||||||
|
} catch (e) {
|
||||||
|
await showMsgDialog(context, "Error", e.toString());
|
||||||
|
} finally {
|
||||||
|
setState(() {
|
||||||
|
_isLoading = false;
|
||||||
|
});
|
||||||
|
Navigator.pushNamedAndRemoveUntil(context, "/welcome", (r) => false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
22
lib/fcs/common/pages/signin/model/signin_model.dart
Normal file
22
lib/fcs/common/pages/signin/model/signin_model.dart
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:fcs/fcs/common/pages/model/base_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/services/services.dart';
|
||||||
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
|
class SigninModel extends BaseModel {
|
||||||
|
final log = Logger('SigninModel');
|
||||||
|
|
||||||
|
Future<bool> checkInvatation() async {
|
||||||
|
var invited = await request("/check_invitation", "GET",
|
||||||
|
token: await Services.instance.authService.getToken());
|
||||||
|
return invited["invited"];
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> requestInvitation(String name) async {
|
||||||
|
await request("/request_invitation", "POST",
|
||||||
|
payload: {"user_name": name},
|
||||||
|
token: await Services.instance.authService.getToken());
|
||||||
|
await Services.instance.authService.signout();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@ import 'package:provider/provider.dart';
|
|||||||
|
|
||||||
import '../../helpers/theme.dart';
|
import '../../helpers/theme.dart';
|
||||||
import '../../../../widget/progress.dart';
|
import '../../../../widget/progress.dart';
|
||||||
import 'code_page.dart';
|
import 'sms_code_page.dart';
|
||||||
import '../util.dart';
|
import '../util.dart';
|
||||||
|
|
||||||
class SigninPage extends StatefulWidget {
|
class SigninPage extends StatefulWidget {
|
||||||
@@ -87,7 +87,7 @@ class _SigninPageState extends State<SigninPage> {
|
|||||||
child: CountryCodePicker(
|
child: CountryCodePicker(
|
||||||
onChanged: _countryChange,
|
onChanged: _countryChange,
|
||||||
initialSelection: dialCode,
|
initialSelection: dialCode,
|
||||||
countryFilter: ['+95', '+65', '+66'],
|
countryFilter: ['+95', '+1'],
|
||||||
showCountryOnly: false,
|
showCountryOnly: false,
|
||||||
showOnlyCountryWhenClosed: false,
|
showOnlyCountryWhenClosed: false,
|
||||||
alignLeft: false,
|
alignLeft: false,
|
||||||
@@ -176,7 +176,7 @@ class _SigninPageState extends State<SigninPage> {
|
|||||||
AuthResult auth = await context.read<MainModel>().sendSms(phoneNumber);
|
AuthResult auth = await context.read<MainModel>().sendSms(phoneNumber);
|
||||||
if (auth.authStatus == AuthStatus.SMS_SENT) {
|
if (auth.authStatus == AuthStatus.SMS_SENT) {
|
||||||
await Navigator.of(context)
|
await Navigator.of(context)
|
||||||
.push(BottomUpPageRoute(CodePage(phoneNumber: phoneNumber)));
|
.push(BottomUpPageRoute(SmsCodePage(phoneNumber: phoneNumber)));
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
} else if (auth.authStatus == AuthStatus.AUTH_VERIFIED) {
|
} else if (auth.authStatus == AuthStatus.AUTH_VERIFIED) {
|
||||||
User user = context.read<MainModel>().user;
|
User user = context.read<MainModel>().user;
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import 'package:fcs/fcs/common/domain/entities/auth_result.dart';
|
|||||||
import 'package:fcs/fcs/common/domain/entities/auth_status.dart';
|
import 'package:fcs/fcs/common/domain/entities/auth_status.dart';
|
||||||
import 'package:fcs/fcs/common/domain/entities/user.dart';
|
import 'package:fcs/fcs/common/domain/entities/user.dart';
|
||||||
import 'package:fcs/fcs/common/pages/model/main_model.dart';
|
import 'package:fcs/fcs/common/pages/model/main_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/signin/model/signin_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/signin/invitation_request_page.dart';
|
||||||
import 'package:fcs/fcs/common/pages/util.dart';
|
import 'package:fcs/fcs/common/pages/util.dart';
|
||||||
import 'package:fcs/fcs/common/pages/widgets/local_text.dart';
|
import 'package:fcs/fcs/common/pages/widgets/local_text.dart';
|
||||||
import 'package:fcs/widget/bottom_up_page_route.dart';
|
import 'package:fcs/widget/bottom_up_page_route.dart';
|
||||||
@@ -15,16 +17,16 @@ import 'signup_page.dart';
|
|||||||
import '../../helpers/theme.dart';
|
import '../../helpers/theme.dart';
|
||||||
import '../../../../widget/progress.dart';
|
import '../../../../widget/progress.dart';
|
||||||
|
|
||||||
const resend_count_sec = 5;
|
const resend_count_sec = 30;
|
||||||
|
|
||||||
class CodePage extends StatefulWidget {
|
class SmsCodePage extends StatefulWidget {
|
||||||
final String phoneNumber;
|
final String phoneNumber;
|
||||||
const CodePage({Key key, this.phoneNumber}) : super(key: key);
|
const SmsCodePage({Key key, this.phoneNumber}) : super(key: key);
|
||||||
@override
|
@override
|
||||||
_CodePageState createState() => _CodePageState();
|
_SmsCodePageState createState() => _SmsCodePageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _CodePageState extends State<CodePage> {
|
class _SmsCodePageState extends State<SmsCodePage> {
|
||||||
bool _isLoading = false;
|
bool _isLoading = false;
|
||||||
String pin;
|
String pin;
|
||||||
bool allNumberEntered;
|
bool allNumberEntered;
|
||||||
@@ -87,7 +89,7 @@ class _CodePageState extends State<CodePage> {
|
|||||||
padding: EdgeInsets.only(left: 20, right: 20, top: 40),
|
padding: EdgeInsets.only(left: 20, right: 20, top: 40),
|
||||||
child: LocalText(
|
child: LocalText(
|
||||||
context,
|
context,
|
||||||
'singup.verify.title',
|
'sms.verify.title',
|
||||||
fontSize: 21,
|
fontSize: 21,
|
||||||
color: primaryColor,
|
color: primaryColor,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
@@ -98,7 +100,7 @@ class _CodePageState extends State<CodePage> {
|
|||||||
left: 20,
|
left: 20,
|
||||||
top: 20,
|
top: 20,
|
||||||
),
|
),
|
||||||
child: LocalText(context, 'singup.code_sent',
|
child: LocalText(context, 'sms.six.digit',
|
||||||
fontSize: 15, color: labelColor),
|
fontSize: 15, color: labelColor),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
@@ -130,7 +132,7 @@ class _CodePageState extends State<CodePage> {
|
|||||||
RaisedButton(
|
RaisedButton(
|
||||||
onPressed: canResend ? _resend : null,
|
onPressed: canResend ? _resend : null,
|
||||||
color: canResend ? Colors.white : Colors.grey,
|
color: canResend ? Colors.white : Colors.grey,
|
||||||
child: LocalText(context, 'singup.resend',
|
child: LocalText(context, 'sms.resend',
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
color:
|
color:
|
||||||
canResend ? primaryColor : Colors.grey[400]),
|
canResend ? primaryColor : Colors.grey[400]),
|
||||||
@@ -165,7 +167,7 @@ class _CodePageState extends State<CodePage> {
|
|||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
LocalText(
|
LocalText(
|
||||||
context,
|
context,
|
||||||
'login.smscode.retry',
|
'sms.resend.seconds',
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
translationVariables: [_start.toString()],
|
translationVariables: [_start.toString()],
|
||||||
color: primaryColor,
|
color: primaryColor,
|
||||||
@@ -198,10 +200,17 @@ class _CodePageState extends State<CodePage> {
|
|||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
AuthResult auth = await context.read<MainModel>().signin(this.pin);
|
AuthResult auth = await context.read<MainModel>().signin(this.pin);
|
||||||
|
|
||||||
if (auth.authStatus == AuthStatus.AUTH_VERIFIED) {
|
if (auth.authStatus == AuthStatus.AUTH_VERIFIED) {
|
||||||
User user = context.read<MainModel>().user;
|
User user = context.read<MainModel>().user;
|
||||||
if (user != null && !user.hasSignup) {
|
if (user != null && !user.hasSignup) {
|
||||||
|
bool invited = await context.read<SigninModel>().checkInvatation();
|
||||||
|
if (invited) {
|
||||||
await Navigator.of(context).push(BottomUpPageRoute(SignupPage()));
|
await Navigator.of(context).push(BottomUpPageRoute(SignupPage()));
|
||||||
|
} else {
|
||||||
|
await Navigator.of(context)
|
||||||
|
.push(BottomUpPageRoute(RequestInvitationPage()));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Navigator.pushNamedAndRemoveUntil(context, "/home", (r) => false);
|
Navigator.pushNamedAndRemoveUntil(context, "/home", (r) => false);
|
||||||
}
|
}
|
||||||
@@ -14,32 +14,21 @@ class SplashScreen extends StatefulWidget {
|
|||||||
|
|
||||||
class _SplashScreenState extends State<SplashScreen> {
|
class _SplashScreenState extends State<SplashScreen> {
|
||||||
final log = Logger('_SplashScreenState');
|
final log = Logger('_SplashScreenState');
|
||||||
|
String page = "/language_selection";
|
||||||
bool _loaded = false;
|
bool _loaded = false;
|
||||||
bool _isSupport = false;
|
bool _isSupport = false;
|
||||||
bool _isLogin = false;
|
|
||||||
bool _isOnline = true;
|
bool _isOnline = true;
|
||||||
Timer timer;
|
Timer timer;
|
||||||
|
|
||||||
startTime() async {
|
startTime() async {
|
||||||
var _duration = new Duration(milliseconds: 1000);
|
var _duration = new Duration(milliseconds: 3000);
|
||||||
this.timer = new Timer.periodic(_duration, navigationPage);
|
this.timer = new Timer.periodic(_duration, navigationPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void navigationPage(Timer timer) async {
|
void navigationPage(Timer timer) async {
|
||||||
if (!_isOnline) {
|
if (_loaded && _isOnline && _isSupport) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_loaded) {
|
|
||||||
timer.cancel();
|
timer.cancel();
|
||||||
if (_isSupport) {
|
Navigator.of(context).pushReplacementNamed(page);
|
||||||
if (this._isLogin) {
|
|
||||||
Navigator.of(context).pushReplacementNamed('/home');
|
|
||||||
} else {
|
|
||||||
Navigator.of(context).pushReplacementNamed('/welcome');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,10 +47,18 @@ class _SplashScreenState extends State<SplashScreen> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
MainModel mainModel = Provider.of<MainModel>(context);
|
MainModel mainModel = Provider.of<MainModel>(context);
|
||||||
|
|
||||||
this._loaded = mainModel.isLoaded;
|
|
||||||
this._isSupport = mainModel.isSupport();
|
this._isSupport = mainModel.isSupport();
|
||||||
this._isLogin = mainModel.isLogin();
|
|
||||||
this._isOnline = mainModel.isOnline;
|
this._isOnline = mainModel.isOnline;
|
||||||
|
if (mainModel.isLoaded) {
|
||||||
|
if (mainModel.isFirstLaunch) {
|
||||||
|
page = "/language_selection";
|
||||||
|
} else if (mainModel.isLogin() && mainModel.user.hasSignup) {
|
||||||
|
page = "/home";
|
||||||
|
} else {
|
||||||
|
page = "/welcome";
|
||||||
|
}
|
||||||
|
this._loaded = mainModel.isLoaded;
|
||||||
|
}
|
||||||
|
|
||||||
return new Scaffold(
|
return new Scaffold(
|
||||||
backgroundColor: Colors.white,
|
backgroundColor: Colors.white,
|
||||||
@@ -77,11 +74,7 @@ class _SplashScreenState extends State<SplashScreen> {
|
|||||||
Column(
|
Column(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Text(
|
Text(
|
||||||
"Cargo Services",
|
"FCS Logistics",
|
||||||
style: welcomeLabelStyle,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
"by FCS Logistics",
|
|
||||||
style: welcomeSubLabelStyle,
|
style: welcomeSubLabelStyle,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ import '../../../pages/user_editor.dart';
|
|||||||
|
|
||||||
final log = Logger('Util');
|
final log = Logger('Util');
|
||||||
|
|
||||||
void showMsgDialog(BuildContext context, String title, String msg) {
|
Future showMsgDialog(BuildContext context, String title, String msg) {
|
||||||
showDialog(
|
return showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (_) {
|
builder: (_) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:fcs/fcs/common/pages/model/language_model.dart';
|
import 'package:fcs/fcs/common/pages/model/language_model.dart';
|
||||||
import 'package:fcs/fcs/common/pages/model/main_model.dart';
|
import 'package:fcs/fcs/common/pages/model/main_model.dart';
|
||||||
|
import 'package:fcs/fcs/common/pages/util.dart';
|
||||||
import 'package:fcs/fcs/common/pages/widgets/bottom_widgets.dart';
|
import 'package:fcs/fcs/common/pages/widgets/bottom_widgets.dart';
|
||||||
import 'package:fcs/widget/banner.dart';
|
import 'package:fcs/widget/banner.dart';
|
||||||
import 'package:fcs/widget/bottom_up_page_route.dart';
|
import 'package:fcs/widget/bottom_up_page_route.dart';
|
||||||
@@ -14,7 +15,6 @@ import 'package:provider/provider.dart';
|
|||||||
import '../helpers/theme.dart';
|
import '../helpers/theme.dart';
|
||||||
import 'profile_page.dart';
|
import 'profile_page.dart';
|
||||||
import 'signin/signin_page.dart';
|
import 'signin/signin_page.dart';
|
||||||
import '../../../pages/term.dart';
|
|
||||||
|
|
||||||
final msgLog = Logger('backgroundMessageHandler');
|
final msgLog = Logger('backgroundMessageHandler');
|
||||||
|
|
||||||
@@ -27,103 +27,30 @@ typedef BtnCallback();
|
|||||||
|
|
||||||
class _WelcomePageState extends State<WelcomePage> {
|
class _WelcomePageState extends State<WelcomePage> {
|
||||||
final log = Logger('_HomePageWelcomeState');
|
final log = Logger('_HomePageWelcomeState');
|
||||||
bool login = false;
|
|
||||||
bool customer = true;
|
String pin;
|
||||||
double length = 10;
|
List<bool> isSelected = [true, false];
|
||||||
double width = 10;
|
|
||||||
double height = 10;
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
_loadLang();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _loadLang() {
|
||||||
|
isSelected =
|
||||||
|
Provider.of<LanguageModel>(context, listen: false).currentState;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
void dispose() {
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
int actualChart = 0;
|
|
||||||
final numberFormatter = new intl.NumberFormat("#,###");
|
|
||||||
|
|
||||||
String pin;
|
|
||||||
List<bool> isSelected = [true, false];
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
login = Provider.of<MainModel>(context).isLogin();
|
|
||||||
|
|
||||||
return OfflineRedirect(
|
return OfflineRedirect(
|
||||||
child: FlavorBanner(
|
child: FlavorBanner(
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
appBar: AppBar(
|
|
||||||
elevation: 0,
|
|
||||||
backgroundColor: primaryColor,
|
|
||||||
title: ClipRRect(
|
|
||||||
child: Image.asset("assets/logo.jpg", height: 40),
|
|
||||||
borderRadius: new BorderRadius.circular(30.0),
|
|
||||||
),
|
|
||||||
actions: login
|
|
||||||
? <Widget>[
|
|
||||||
ToggleButtons(
|
|
||||||
children: <Widget>[
|
|
||||||
Image.asset(
|
|
||||||
'icons/flags/png/us.png',
|
|
||||||
package: 'country_icons',
|
|
||||||
fit: BoxFit.fitWidth,
|
|
||||||
width: 25,
|
|
||||||
),
|
|
||||||
Image.asset(
|
|
||||||
'icons/flags/png/mm.png',
|
|
||||||
package: 'country_icons',
|
|
||||||
fit: BoxFit.fitWidth,
|
|
||||||
width: 25,
|
|
||||||
)
|
|
||||||
],
|
|
||||||
onPressed: _langChange,
|
|
||||||
isSelected: isSelected,
|
|
||||||
),
|
|
||||||
IconButton(
|
|
||||||
onPressed: () {
|
|
||||||
Navigator.push(
|
|
||||||
context,
|
|
||||||
MaterialPageRoute(
|
|
||||||
builder: (context) => Profile()),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
iconSize: 30,
|
|
||||||
icon: Icon(Icons.account_circle),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
: <Widget>[
|
|
||||||
ToggleButtons(
|
|
||||||
children: <Widget>[
|
|
||||||
Image.asset(
|
|
||||||
'icons/flags/png/us.png',
|
|
||||||
package: 'country_icons',
|
|
||||||
fit: BoxFit.fitWidth,
|
|
||||||
width: 25,
|
|
||||||
),
|
|
||||||
Image.asset(
|
|
||||||
'icons/flags/png/mm.png',
|
|
||||||
package: 'country_icons',
|
|
||||||
fit: BoxFit.fitWidth,
|
|
||||||
width: 25,
|
|
||||||
)
|
|
||||||
],
|
|
||||||
onPressed: _langChange,
|
|
||||||
isSelected: isSelected,
|
|
||||||
),
|
|
||||||
FlatButton(
|
|
||||||
onPressed: () {
|
|
||||||
Navigator.of(context)
|
|
||||||
.push(BottomUpPageRoute(SigninPage()));
|
|
||||||
},
|
|
||||||
// iconSize: 30,
|
|
||||||
child: Text(
|
|
||||||
"Sign In",
|
|
||||||
style: siginButtonStyle,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
body: Container(
|
body: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
gradient: LinearGradient(
|
gradient: LinearGradient(
|
||||||
@@ -137,35 +64,48 @@ class _WelcomePageState extends State<WelcomePage> {
|
|||||||
)),
|
)),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Expanded(
|
Row(
|
||||||
child: ListView(
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
ToggleButtons(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Padding(
|
Image.asset(
|
||||||
padding: const EdgeInsets.all(80.0),
|
'icons/flags/png/us.png',
|
||||||
|
package: 'country_icons',
|
||||||
|
fit: BoxFit.fitWidth,
|
||||||
|
width: 25,
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
'icons/flags/png/mm.png',
|
||||||
|
package: 'country_icons',
|
||||||
|
fit: BoxFit.fitWidth,
|
||||||
|
width: 25,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
selectedBorderColor: Colors.white12,
|
||||||
|
borderColor: Colors.transparent,
|
||||||
|
onPressed: _langChange,
|
||||||
|
isSelected: isSelected,
|
||||||
|
),
|
||||||
|
FlatButton(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context)
|
||||||
|
.push(BottomUpPageRoute(SigninPage()));
|
||||||
|
},
|
||||||
child: Text(
|
child: Text(
|
||||||
"Welcome!",
|
getLocalString(context, "welcome.signin"),
|
||||||
textAlign: TextAlign.center,
|
style: siginButtonStyle,
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.white,
|
|
||||||
fontSize: 28,
|
|
||||||
fontFamily: "Roboto"),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Padding(
|
],
|
||||||
padding: const EdgeInsets.only(top: 0.0),
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
child: Text(
|
child: Text(
|
||||||
"Cargo Services",
|
getLocalString(context, "welcome.msg"),
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.white,
|
|
||||||
fontSize: 28,
|
|
||||||
fontFamily: "Roboto"),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.all(10.0),
|
|
||||||
child: Text(
|
|
||||||
"by FCS Trading",
|
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
@@ -173,16 +113,29 @@ class _WelcomePageState extends State<WelcomePage> {
|
|||||||
fontFamily: "Roboto"),
|
fontFamily: "Roboto"),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
Container(
|
Container(
|
||||||
padding: EdgeInsets.only(top: 10, bottom: 30),
|
padding: EdgeInsets.only(top: 0),
|
||||||
child: CircleAvatar(
|
child: CircleAvatar(
|
||||||
radius: (50),
|
radius: (25),
|
||||||
backgroundColor: Colors.white,
|
backgroundColor: Colors.white,
|
||||||
child: ClipRRect(
|
child: ClipRRect(
|
||||||
borderRadius: BorderRadius.circular(50),
|
borderRadius: BorderRadius.circular(50),
|
||||||
child: Image.asset("assets/logo.jpg"),
|
child: Image.asset("assets/logo.jpg"),
|
||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
|
Padding(
|
||||||
|
padding:
|
||||||
|
const EdgeInsets.only(bottom: 10.0, top: 5),
|
||||||
|
child: Text(
|
||||||
|
"by FCS Logistics",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 11,
|
||||||
|
fontFamily: "Roboto"),
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ void main() {
|
|||||||
Config(
|
Config(
|
||||||
flavor: Flavor.DEV,
|
flavor: Flavor.DEV,
|
||||||
color: Colors.blue,
|
color: Colors.blue,
|
||||||
apiURL: "http://192.168.1.155:7777",
|
apiURL: "http://192.168.100.11:7777",
|
||||||
level: Level.ALL);
|
level: Level.ALL);
|
||||||
runApp(App());
|
runApp(App());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,9 +81,7 @@ class MainModel extends ChangeNotifier {
|
|||||||
// notifyListeners();
|
// notifyListeners();
|
||||||
// });
|
// });
|
||||||
_loadFcs();
|
_loadFcs();
|
||||||
Services.instance.authService.onAuthStatus().listen((event) {
|
Services.instance.authService.onAuthStatus().listen((event) {});
|
||||||
print("main event-->$event");
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PaymentMethod> get paymentMethods {
|
List<PaymentMethod> get paymentMethods {
|
||||||
|
|||||||
Reference in New Issue
Block a user