First step from login page

merge-requests/11/merge
Elham Rababah 5 years ago
parent 00d744c0bc
commit 3aec62dceb

@ -0,0 +1,87 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def parse_KV_file(file, separator='=')
file_abs_path = File.expand_path(file)
if !File.exists? file_abs_path
return [];
end
generated_key_values = {}
skip_line_start_symbols = ["#", "/"]
File.foreach(file_abs_path) do |line|
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
plugin = line.split(pattern=separator)
if plugin.length == 2
podname = plugin[0].strip()
path = plugin[1].strip()
podpath = File.expand_path("#{path}", file_abs_path)
generated_key_values[podname] = podpath
else
puts "Invalid plugin specification: #{line}"
end
end
generated_key_values
end
target 'Runner' do
use_frameworks!
use_modular_headers!
# Flutter Pod
copied_flutter_dir = File.join(__dir__, 'Flutter')
copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
# Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
# That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
# CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
unless File.exist?(generated_xcode_build_settings_path)
raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
unless File.exist?(copied_framework_path)
FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
end
unless File.exist?(copied_podspec_path)
FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
end
end
# Keep pod path relative so it can be checked into Podfile.lock.
pod 'Flutter', :path => 'Flutter'
# Plugin Pods
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
# referring to absolute paths on developers' machines.
system('rm -rf .symlinks')
system('mkdir -p .symlinks/plugins')
plugin_pods = parse_KV_file('../.flutter-plugins')
plugin_pods.each do |name, path|
symlink = File.join('.symlinks', 'plugins', name)
File.symlink(path, symlink)
pod name, :path => File.join(symlink, 'ios')
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
end
end

@ -0,0 +1,24 @@
{
"name": "DriverApp",
"css_prefix_text": "",
"css_use_suffix": false,
"hinting": true,
"units_per_em": 1000,
"ascent": 850,
"glyphs": [
{
"uid": "6b13cdbdada31c1cc88c63aedc146a9c",
"css": "logo",
"code": 59393,
"src": "custom_icons",
"selected": true,
"svg": {
"path": "M1572.1 336.4A308.4 308.4 0 0 0 1008.4 436.3C1007 443.1 1005.5 449.9 1003.6 458.7 972.3 454.4 941.8 450.3 911.4 446.1S850.1 437.4 818 432.8C818.4 426.5 818.3 421 819.2 415.9A498.9 498.9 0 1 1 1532.6 947.1 489.1 489.1 0 0 1 1117.1 960 21.8 21.8 0 0 1 1101 931.9C1116.5 824.5 1160.3 502.5 1164.7 470 1172.6 412.1 1179.8 354 1189 296.4A37.2 37.2 0 0 1 1207.3 272.1 252.3 252.3 0 0 1 1362.2 255.7C1379.3 259 1385.5 264.7 1382.3 283.6 1374.2 331.4 1368.2 379.7 1362.4 427.9 1361.1 438.9 1326.1 693.4 1309.7 810 1331.9 807.6 1351.9 806.7 1371.5 803.2A308.6 308.6 0 0 0 1619 493.2C1618.7 485.7 1616.7 459.2 1615.7 452.9A436.5 436.5 0 0 0 1590.8 372C1588.7 368.6 1577.1 344.3 1572.1 336.4ZM237.6 663.6A308.4 308.4 0 0 0 801.2 563.8C802.7 557 804.2 550.2 806.1 541.4 837.4 545.6 867.9 549.7 898.3 554S959.6 562.7 991.7 567.3C991.3 573.6 991.3 579.1 990.5 584.2A498.9 498.9 0 1 1 277 53 489.1 489.1 0 0 1 692.6 40.1 21.8 21.8 0 0 1 708.6 68.2C693.2 175.5 649.4 497.6 645 530.1 637.1 588 629.9 646 620.7 703.7A37.2 37.2 0 0 1 602.4 728 252.4 252.4 0 0 1 447.5 744.4C430.5 741.1 424.2 735.3 427.4 716.5 435.5 668.6 441.6 620.4 447.3 572.1 448.7 561.2 483.6 306.7 500 190.1 477.8 192.4 457.8 193.4 438.2 196.9A308.6 308.6 0 0 0 190.7 506.9C191 514.3 193 540.9 194.1 547.2A436.5 436.5 0 0 0 218.9 628.1C221 631.4 232.6 655.5 237.6 663.6Z",
"width": 1810
},
"search": [
"logo"
]
}
]
}

@ -0,0 +1,25 @@
/// Flutter icons DriverApp
/// Copyright (C) 2020 by original authors @ fluttericon.com, fontello.com
/// This font was generated by FlutterIcon.com, which is derived from Fontello.
///
/// To use this font, place it in your fonts/ directory and include the
/// following in your pubspec.yaml
///
/// flutter:
/// fonts:
/// - family: DriverApp
/// fonts:
/// - asset: fonts/DriverApp.ttf
///
///
///
import 'package:flutter/widgets.dart';
class DriverApp {
DriverApp._();
static const _kFontFam = 'DriverApp';
static const _kFontPkg = null;
static const IconData logo = IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg);
}

Binary file not shown.

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

@ -0,0 +1,282 @@
class AuthenticatedUser {
String setupID;
int patientType;
int patientID;
String firstName;
String middleName;
String lastName;
String firstNameN;
String middleNameN;
String lastNameN;
int relationshipID;
int gender;
String dateofBirth;
dynamic dateofBirthN;
String nationalityID;
dynamic phoneResi;
dynamic phoneOffice;
String mobileNumber;
dynamic faxNumber;
String emailAddress;
dynamic bloodGroup;
dynamic rHFactor;
bool isEmailAlertRequired;
bool isSMSAlertRequired;
String preferredLanguage;
bool isPrivilegedMember;
dynamic memberID;
dynamic expiryDate;
dynamic isHmgEmployee;
dynamic employeeID;
dynamic emergencyContactName;
dynamic emergencyContactNo;
int patientPayType;
dynamic dHCCPatientRefID;
bool isPatientDummy;
int status;
dynamic isStatusCleared;
int patientIdentificationType;
String patientIdentificationNo;
int projectID;
int infoSourceID;
dynamic address;
int age;
String ageDesc;
int areaID;
int createdBy;
String genderDescription;
dynamic iR;
dynamic iSOCityID;
dynamic iSOCountryID;
List<ListPrivilege> listPrivilege;
dynamic marital;
int outSA;
dynamic pOBox;
bool receiveHealthSummaryReport;
int sourceType;
dynamic strDateofBirth;
dynamic tempAddress;
dynamic zipCode;
// dynamic patientPayType;
// dynamic patientType;
// dynamic status;
AuthenticatedUser({
this.setupID,
this.patientType,
this.patientID,
this.firstName,
this.middleName,
this.lastName,
this.firstNameN,
this.middleNameN,
this.lastNameN,
this.relationshipID,
this.gender,
this.dateofBirth,
this.dateofBirthN,
this.nationalityID,
this.phoneResi,
this.phoneOffice,
this.mobileNumber,
this.faxNumber,
this.emailAddress,
this.bloodGroup,
this.rHFactor,
this.isEmailAlertRequired,
this.isSMSAlertRequired,
this.preferredLanguage,
this.isPrivilegedMember,
this.memberID,
this.expiryDate,
this.isHmgEmployee,
this.employeeID,
this.emergencyContactName,
this.emergencyContactNo,
this.patientPayType,
this.dHCCPatientRefID,
this.isPatientDummy,
this.status,
this.isStatusCleared,
this.patientIdentificationType,
this.patientIdentificationNo,
this.projectID,
this.infoSourceID,
this.address,
this.age,
this.ageDesc,
this.areaID,
this.createdBy,
this.genderDescription,
this.iR,
this.iSOCityID,
this.iSOCountryID,
this.listPrivilege,
this.marital,
this.outSA,
this.pOBox,
this.receiveHealthSummaryReport,
this.sourceType,
this.strDateofBirth,
this.tempAddress,
this.zipCode,
});
AuthenticatedUser.fromJson(Map<String, dynamic> json) {
setupID = json['SetupID'];
patientType = json['PatientType'];
patientID = json['PatientID'];
firstName = json['FirstName'];
middleName = json['MiddleName'];
lastName = json['LastName'];
firstNameN = json['FirstNameN'];
middleNameN = json['MiddleNameN'];
lastNameN = json['LastNameN'];
relationshipID = json['RelationshipID'];
gender = json['Gender'];
dateofBirth = json['DateofBirth'];
dateofBirthN = json['DateofBirthN'];
nationalityID = json['NationalityID'];
phoneResi = json['PhoneResi'];
phoneOffice = json['PhoneOffice'];
mobileNumber = json['MobileNumber'];
faxNumber = json['FaxNumber'];
emailAddress = json['EmailAddress'];
bloodGroup = json['BloodGroup'];
rHFactor = json['RHFactor'];
isEmailAlertRequired = json['IsEmailAlertRequired'];
isSMSAlertRequired = json['IsSMSAlertRequired'];
preferredLanguage = json['PreferredLanguage'];
isPrivilegedMember = json['IsPrivilegedMember'];
memberID = json['MemberID'];
expiryDate = json['ExpiryDate'];
isHmgEmployee = json['IsHmgEmployee'];
employeeID = json['EmployeeID'];
emergencyContactName = json['EmergencyContactName'];
emergencyContactNo = json['EmergencyContactNo'];
patientPayType = json['PatientPayType'];
dHCCPatientRefID = json['DHCCPatientRefID'];
isPatientDummy = json['IsPatientDummy'];
status = json['Status'];
isStatusCleared = json['IsStatusCleared'];
patientIdentificationType = json['PatientIdentificationType'];
patientIdentificationNo = json['PatientIdentificationNo'];
projectID = json['ProjectID'];
infoSourceID = json['InfoSourceID'];
address = json['Address'];
age = json['Age'];
ageDesc = json['AgeDesc'];
areaID = json['AreaID'];
createdBy = json['CreatedBy'];
genderDescription = json['GenderDescription'];
iR = json['IR'];
iSOCityID = json['ISOCityID'];
iSOCountryID = json['ISOCountryID'];
if (json['ListPrivilege'] != null) {
listPrivilege = new List<ListPrivilege>();
json['ListPrivilege'].forEach((v) {
listPrivilege.add(new ListPrivilege.fromJson(v));
});
}
marital = json['Marital'];
outSA = json['OutSA'];
pOBox = json['POBox'];
receiveHealthSummaryReport = json['ReceiveHealthSummaryReport'];
sourceType = json['SourceType'];
strDateofBirth = json['StrDateofBirth'];
tempAddress = json['TempAddress'];
zipCode = json['ZipCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['SetupID'] = this.setupID;
data['PatientType'] = this.patientType;
data['PatientID'] = this.patientID;
data['FirstName'] = this.firstName;
data['MiddleName'] = this.middleName;
data['LastName'] = this.lastName;
data['FirstNameN'] = this.firstNameN;
data['MiddleNameN'] = this.middleNameN;
data['LastNameN'] = this.lastNameN;
data['RelationshipID'] = this.relationshipID;
data['Gender'] = this.gender;
data['DateofBirth'] = this.dateofBirth;
data['DateofBirthN'] = this.dateofBirthN;
data['NationalityID'] = this.nationalityID;
data['PhoneResi'] = this.phoneResi;
data['PhoneOffice'] = this.phoneOffice;
data['MobileNumber'] = this.mobileNumber;
data['FaxNumber'] = this.faxNumber;
data['EmailAddress'] = this.emailAddress;
data['BloodGroup'] = this.bloodGroup;
data['RHFactor'] = this.rHFactor;
data['IsEmailAlertRequired'] = this.isEmailAlertRequired;
data['IsSMSAlertRequired'] = this.isSMSAlertRequired;
data['PreferredLanguage'] = this.preferredLanguage;
data['IsPrivilegedMember'] = this.isPrivilegedMember;
data['MemberID'] = this.memberID;
data['ExpiryDate'] = this.expiryDate;
data['IsHmgEmployee'] = this.isHmgEmployee;
data['EmployeeID'] = this.employeeID;
data['EmergencyContactName'] = this.emergencyContactName;
data['EmergencyContactNo'] = this.emergencyContactNo;
data['PatientPayType'] = this.patientPayType;
data['DHCCPatientRefID'] = this.dHCCPatientRefID;
data['IsPatientDummy'] = this.isPatientDummy;
data['Status'] = this.status;
data['IsStatusCleared'] = this.isStatusCleared;
data['PatientIdentificationType'] = this.patientIdentificationType;
data['PatientIdentificationNo'] = this.patientIdentificationNo;
data['ProjectID'] = this.projectID;
data['InfoSourceID'] = this.infoSourceID;
data['Address'] = this.address;
data['Age'] = this.age;
data['AgeDesc'] = this.ageDesc;
data['AreaID'] = this.areaID;
data['CreatedBy'] = this.createdBy;
data['GenderDescription'] = this.genderDescription;
data['IR'] = this.iR;
data['ISOCityID'] = this.iSOCityID;
data['ISOCountryID'] = this.iSOCountryID;
if (this.listPrivilege != null) {
data['ListPrivilege'] =
this.listPrivilege.map((v) => v.toJson()).toList();
}
data['Marital'] = this.marital;
data['OutSA'] = this.outSA;
data['POBox'] = this.pOBox;
data['ReceiveHealthSummaryReport'] = this.receiveHealthSummaryReport;
data['SourceType'] = this.sourceType;
data['StrDateofBirth'] = this.strDateofBirth;
data['TempAddress'] = this.tempAddress;
data['ZipCode'] = this.zipCode;
return data;
}
}
class ListPrivilege {
int iD;
String serviceName;
bool previlege;
dynamic region;
ListPrivilege({this.iD, this.serviceName, this.previlege, this.region});
ListPrivilege.fromJson(Map<String, dynamic> json) {
iD = json['ID'];
serviceName = json['ServiceName'];
previlege = json['Previlege'];
region = json['Region'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ID'] = this.iD;
data['ServiceName'] = this.serviceName;
data['Previlege'] = this.previlege;
data['Region'] = this.region;
return data;
}
}

@ -0,0 +1,29 @@
import 'package:driverapp/core/service/base_service.dart';
import 'package:flutter/cupertino.dart';
class AuthenticationService extends BaseService {
String selectedClinicName;
bool isLogin = false;
bool isLoading = true;
AuthenticationService() {
// getUserAuthentication();
}
// void getUserAuthentication() async {
// if (profile != null) {
//// doctorProfile = new DoctorProfileModel.fromJson(profile);
// isLoading = false;
// isLogin = true;
// } else {
// isLoading = false;
// isLogin = false;
// }
// notifyListeners();
// }
}

@ -1,9 +1,26 @@
import 'package:driverapp/config/shared_pref_kay.dart';
import 'package:driverapp/core/model/authentication/authenticated_user.dart';
import 'package:driverapp/uitl/app_shared_preferences.dart';
import 'client/base_app_client.dart';
class BaseService{
class BaseService {
String error;
bool hasError = false;
BaseAppClient baseAppClient = BaseAppClient();
AuthenticatedUser user;
AppSharedPreferences sharedPref = AppSharedPreferences();
BaseService() {
getUser();
}
getUser() async {
var userProfile = await sharedPref.getObject(USER_PROFILE);
if (userProfile != null) {
user =
AuthenticatedUser.fromJson(await sharedPref.getObject(USER_PROFILE));
}
}
}

@ -0,0 +1,30 @@
import 'package:driverapp/core/enum/viewstate.dart';
import 'package:driverapp/core/service/authentication_service.dart';
import 'package:driverapp/core/viewModels/base_view_model.dart';
import '../../locator.dart';
enum APP_STATUS { LOADING, UNAUTHENTICATED, AUTHENTICATED }
class AuthenticationViewModel extends BaseViewModel {
AuthenticationService _authenticationService = locator<AuthenticationService>();
APP_STATUS get status {
if (state == ViewState.Busy || state == ViewState.BusyLocal) {
return APP_STATUS.LOADING;
} else {
if (user != null) {
return APP_STATUS.AUTHENTICATED;
} else {
return APP_STATUS.UNAUTHENTICATED;
}
}
}
login({String userName,String password}){
setState(ViewState.BusyLocal);
// call api
// if()
// setState(viewState)
}
}

@ -1,4 +1,7 @@
import 'package:driverapp/config/shared_pref_kay.dart';
import 'package:driverapp/core/enum/viewstate.dart';
import 'package:driverapp/core/model/authentication/authenticated_user.dart';
import 'package:driverapp/uitl/app_shared_preferences.dart';
import 'package:flutter/material.dart';
class BaseViewModel extends ChangeNotifier {
@ -6,8 +9,21 @@ class BaseViewModel extends ChangeNotifier {
bool isInternetConnection = true;
ViewState get state => _state;
AuthenticatedUser user;
String error = "";
AppSharedPreferences sharedPref = AppSharedPreferences();
BaseViewModel(){
getUser();
}
getUser() async {
var userProfile = await sharedPref.getObject(USER_PROFILE);
if (userProfile != null) {
user =
AuthenticatedUser.fromJson(await sharedPref.getObject(USER_PROFILE));
}
}
//TODO load user details from SP

@ -1,6 +1,8 @@
import 'package:get_it/get_it.dart';
import 'core/service/authentication_service.dart';
import 'core/service/hospital_service.dart';
import 'core/viewModels/authentication_view_model.dart';
import 'core/viewModels/hospital_view_model.dart';
GetIt locator = GetIt.instance;
@ -9,7 +11,9 @@ GetIt locator = GetIt.instance;
void setupLocator() {
/// Services
locator.registerLazySingleton(() => HospitalService());
locator.registerLazySingleton(() => AuthenticationService());
/// View Model
locator.registerFactory(() => HospitalViewModel());
locator.registerFactory(() => AuthenticationViewModel());
}

@ -1,9 +1,11 @@
import 'package:driverapp/root_page.dart';
import 'package:driverapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart';
import 'config/size_config.dart';
import 'core/service/authentication_service.dart';
import 'core/viewModels/project_view_model.dart';
import 'locator.dart';
import 'pages/landing/landing_page.dart';
@ -25,7 +27,7 @@ class MyApp extends StatelessWidget {
providers: [
ChangeNotifierProvider<ProjectViewModel>(
create: (context) => ProjectViewModel(),
),
)
],
child: Consumer<ProjectViewModel>(
builder: (context, projectProvider, child) => MaterialApp(
@ -51,6 +53,7 @@ class MyApp extends StatelessWidget {
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
},
),
scaffoldBackgroundColor:Color.fromRGBO(239, 245, 245, 1) ,
hintColor: Colors.grey[400],
disabledColor: Colors.grey[300],
errorColor: Color.fromRGBO(235, 80, 60, 1.0),
@ -73,7 +76,7 @@ class MyApp extends StatelessWidget {
),
),
initialRoute: '/',
routes: {'/': (context) => LandingPage()},
routes: {'/': (context) => RootPage()},
debugShowCheckedModeBanner: false,
),
),

@ -0,0 +1,85 @@
import 'package:driverapp/app-icons/driver_app_icons.dart';
import 'package:driverapp/core/viewModels/authentication_view_model.dart';
import 'package:driverapp/pages/base/base_view.dart';
import 'package:driverapp/widgets/buttons/secondary_button.dart';
import 'package:driverapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class LoginPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AnimatedSwitcher(
duration: Duration(microseconds: 350),
child: BaseView<AuthenticationViewModel>(
builder: (_, model, widget) => AppScaffold(
baseViewModel: model,
body: Center(
child: Column(
children: <Widget>[
FractionallySizedBox(
widthFactor: 0.9,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(DriverApp.logo,
size: 60,
color: Colors.red,),
],
),
Column(),
new Container(
height: 22.28,
width: 139.13,
decoration: BoxDecoration(
color: Color(0xffffffff),
border: Border.all(
width: 1.00,
color: Color(0xff707070),
),
borderRadius: BorderRadius.circular(6.00),
),
),
Container(
height: 22.28,
width: 139.13,
decoration: BoxDecoration(
color: Color(0xffffffff),
border: Border.all(
width: 1.00,
color: Color(0xff707070),
),
borderRadius: BorderRadius.circular(6.00),
),
),
new Container(
height: 22.28,
width: 139.13,
decoration: BoxDecoration(
color: Color(0xffffffff),
border: Border.all(
width: 1.00,
color: Color(0xff707070),
),
borderRadius: BorderRadius.circular(6.00),
),
)
],
),
),
FractionallySizedBox(
widthFactor: 0.90,
child: SecondaryButton(label: "DFDf"),
)
],
),
),
),
),
);
}
}

@ -0,0 +1,36 @@
import 'package:driverapp/pages/authentication/login_page.dart';
import 'package:driverapp/pages/base/base_view.dart';
import 'package:driverapp/pages/landing/landing_page.dart';
import 'package:driverapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'core/viewModels/authentication_view_model.dart';
class RootPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
Widget buildRoot(APP_STATUS status) {
switch (status) {
case APP_STATUS.UNAUTHENTICATED:
return LoginPage();
break;
case APP_STATUS.AUTHENTICATED:
return LandingPage();
break;
}
}
return AnimatedSwitcher(
duration: Duration(microseconds: 350),
child: BaseView<AuthenticationViewModel>(
builder: (_, model, widget) => AppScaffold(
baseViewModel: model,
body: buildRoot((model.status)),
),
),
);
}
}

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
/// SecondaryButton widget
/// [label] button label
@ -87,6 +88,7 @@ class _SecondaryButtonState extends State<SecondaryButton>
_rippleSize = _rippleAnimation.value;
});
});
super.initState();
}
@ -160,17 +162,22 @@ class _SecondaryButtonState extends State<SecondaryButton>
child: ClipRRect(
borderRadius: widget.noBorderRadius
? BorderRadius.all(Radius.circular(0.0))
: BorderRadius.all(Radius.circular(10.0)),
: BorderRadius.all(Radius.circular(40.0)),
child: Stack(
children: <Widget>[
Positioned(
left: 0,
bottom: 0,
child: Container(
width: MediaQuery.of(context).size.width,
width: MediaQuery
.of(context)
.size
.width,
height: 100,
decoration: BoxDecoration(
color: Theme.of(context).disabledColor,
color: Theme
.of(context)
.disabledColor,
),
),
),
@ -184,7 +191,8 @@ class _SecondaryButtonState extends State<SecondaryButton>
height: MediaQuery.of(context).size.width * 2.2,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: widget.color,
color: widget.color != null ? widget.color : Hexcolor(
"#1CA4AA"),
),
),
),
@ -193,8 +201,8 @@ class _SecondaryButtonState extends State<SecondaryButton>
padding: widget.iconOnly
? EdgeInsets.symmetric(vertical: 4.0, horizontal: 5.0)
: EdgeInsets.only(
top: widget.small ? 8.0 : 14.0,
bottom: widget.small ? 6.0 : 14.0,
top: widget.small ? 8.0 : 12.0,
bottom: widget.small ? 6.0 : 12.0,
left: 18.0,
right: 18.0),
child: Stack(
@ -223,12 +231,13 @@ class _SecondaryButtonState extends State<SecondaryButton>
)
: Padding(
padding: EdgeInsets.only(
bottom: widget.small ? 4.0 : 3.0),
bottom: widget.small ? 4.0 : 2.0),
child: Text(widget.label,
style: TextStyle(
color: widget.textColor,
color: widget.textColor != null
? widget.textColor
: Colors.white,
fontSize: 17.0,
fontWeight: FontWeight.w800,
fontFamily: "WorkSans")),
)
],

@ -24,40 +24,42 @@ class AppScaffold extends StatelessWidget {
@override
Widget build(BuildContext context) {
AppGlobal.context = context;
return Scaffold(
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: isShowAppBar
? AppBar(
elevation: 0,
backgroundColor: Theme.of(context).appBarTheme.color,
textTheme: TextTheme(
headline6:
TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
title: Text(appBarTitle.toUpperCase()),
leading: Builder(
builder: (BuildContext context) {
return ArrowBack();
},
),
centerTitle: true,
actions: <Widget>[
IconButton(
icon: Icon(FontAwesomeIcons.home),
color: Colors.white,
onPressed: () {
// TODO add navigator to home page
return SafeArea(
child: Scaffold(
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: isShowAppBar
? AppBar(
elevation: 0,
backgroundColor: Theme.of(context).appBarTheme.color,
textTheme: TextTheme(
headline6:
TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
title: Text(appBarTitle.toUpperCase()),
leading: Builder(
builder: (BuildContext context) {
return ArrowBack();
},
),
],
)
: null,
body: baseViewModel != null
? NetworkBaseView(
child: buildBodyWidget(),
baseViewModel: baseViewModel,
)
: buildBodyWidget(),
centerTitle: true,
actions: <Widget>[
IconButton(
icon: Icon(FontAwesomeIcons.home),
color: Colors.white,
onPressed: () {
// TODO add navigator to home page
},
),
],
)
: null,
body: baseViewModel != null
? NetworkBaseView(
child: buildBodyWidget(),
baseViewModel: baseViewModel,
)
: buildBodyWidget(),
),
);
}

@ -20,6 +20,8 @@ class NetworkBaseView extends StatelessWidget {
buildBaseViewWidget() {
switch (baseViewModel.state) {
case ViewState.Idle:
case ViewState.BusyLocal:
case ViewState.ErrorLocal:
return child;
break;
case ViewState.Busy:
@ -31,7 +33,6 @@ class NetworkBaseView extends StatelessWidget {
error: baseViewModel.error,
),
);
break;
}
}
}

@ -92,3 +92,7 @@ flutter:
- asset: assets/fonts/Work_Sans/WorkSans-Bold.ttf
- asset: assets/fonts/Work_Sans/WorkSans-Bold.ttf
weight: 700
- family: DriverApp
fonts:
- asset: lib/app-icons/fonts/DriverApp.ttf

Loading…
Cancel
Save