New UI Implemented Fix 3 Phase 1

mirza_dev
mirza.shafique 3 years ago
parent 8fea020fc8
commit 521d9f4edd

@ -43,7 +43,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.ejada.hmg"
applicationId "com.ejadaa.hmg"
minSdkVersion 23
targetSdkVersion 33
versionCode flutterVersionCode.toInteger()

@ -13,6 +13,7 @@
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:exported="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="29.159" height="24.616" viewBox="0 0 29.159 24.616">
<g id="promotion" transform="translate(-2 -3.116)">
<path id="Path_4626" data-name="Path 4626" d="M26.785,3.408a.292.292,0,0,0-.417-.263L11.455,10.236h.021V20.442h-.021l14.913,7.092a.292.292,0,0,0,.417-.263ZM10.019,20.078V10.6H6.544A4.644,4.644,0,0,0,2,15.339a4.722,4.722,0,0,0,3.191,4.525l2.395,7.663a.292.292,0,0,0,.278.2h3.945a.292.292,0,0,0,.278-.378L9.814,20.078ZM7.728,16.068a.729.729,0,0,0,.729-.729v-.208a.729.729,0,0,0-.729-.729H6.686a.729.729,0,0,0-.729.729v.208a.729.729,0,0,0,.729.729Z" transform="translate(0 0)" fill="#767676" fill-rule="evenodd"/>
<path id="Path_4627" data-name="Path 4627" d="M22.29,17.715a5.1,5.1,0,0,0,0-9.224ZM20.832,8.052a5.1,5.1,0,1,0,0,10.1Z" transform="translate(5.953 2.236)" fill="#767676" fill-rule="evenodd"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 878 B

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="25.034" height="25.034" viewBox="0 0 25.034 25.034">
<g id="weekly-calendar-page-symbol" transform="translate(139)">
<path id="Path_4379" data-name="Path 4379" d="M22.53,0H2.5A2.511,2.511,0,0,0,0,2.5V22.53a2.512,2.512,0,0,0,2.5,2.5H22.53a2.512,2.512,0,0,0,2.5-2.5V2.5A2.511,2.511,0,0,0,22.53,0ZM6.756,22.031H2.921V18.62H6.756v3.411Zm0-4.555H2.921v-3.41H6.756v3.41ZM6.467,3.794A1.063,1.063,0,1,1,7.529,2.731,1.062,1.062,0,0,1,6.467,3.794Zm5.406,18.237H8.039V18.62h3.834Zm0-4.555H8.039v-3.41h3.834Zm0-4.552H8.039V9.514h3.834ZM11.455,2.731a1.062,1.062,0,1,1,1.062,1.062A1.062,1.062,0,0,1,11.455,2.731Zm5.54,14.745H13.159v-3.41H17v3.41Zm0-4.552H13.159V9.514H17v3.41ZM17.5,2.731a1.062,1.062,0,1,1,1.062,1.062A1.062,1.062,0,0,1,17.5,2.731Zm4.609,14.745H18.278v-3.41h3.835Zm0-4.552H18.278V9.514h3.835Z" transform="translate(-139)" fill="#767676"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 908 B

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" width="22.851" height="24.894" viewBox="0 0 22.851 24.894">
<g id="Layer_2" data-name="Layer 2" transform="translate(-2.981 -2)">
<path id="Path_4628" data-name="Path 4628" d="M18.185,17.74a6.372,6.372,0,0,1-7.113,0,6.291,6.291,0,0,1-3.574,1.1A6.111,6.111,0,0,1,5,18.318v7.655A2.675,2.675,0,0,0,7.667,28.64h3.112V23.306a1.778,1.778,0,0,1,1.778-1.778H17a1.778,1.778,0,0,1,1.778,1.778V28.64h3.112a2.675,2.675,0,0,0,2.667-2.667V18.185a6.209,6.209,0,0,1-6.375-.445Z" transform="translate(-0.224 -1.746)" fill="#767676"/>
<path id="Path_4629" data-name="Path 4629" d="M13.5,24h4.445v5.334H13.5Z" transform="translate(-1.167 -2.441)" fill="#767676"/>
<path id="Path_4630" data-name="Path 4630" d="M9.363,14.8,10.869,2H7.685A2.667,2.667,0,0,0,5.156,3.823L3.234,9.592A4.322,4.322,0,0,0,4.9,14.638a4.543,4.543,0,0,0,4.461.164Z" transform="translate(0 0)" fill="#767676"/>
<path id="Path_4631" data-name="Path 4631" d="M27.484,9.592,25.56,3.823A2.667,2.667,0,0,0,23.03,2H20.147l1.526,12.964a4.39,4.39,0,0,0,4.143-.326,4.319,4.319,0,0,0,1.669-5.046Z" transform="translate(-1.904)" fill="#767676"/>
<path id="Path_4632" data-name="Path 4632" d="M18.4,14.2A.867.867,0,0,1,18.882,14L17.471,2H13.7L12.282,14.091a.842.842,0,0,1,.188.115A4.559,4.559,0,0,0,18.4,14.2Z" transform="translate(-1.032 0)" fill="#767676"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28.123" height="26.245" viewBox="0 0 28.123 26.245">
<path id="XMLID_219_" d="M28.984,15.637A2.077,2.077,0,0,1,27.025,17h-.716V27.309a.938.938,0,0,1-.937.937H19.748V21.685a4.687,4.687,0,0,0-9.374,0v6.562H4.749a.938.938,0,0,1-.937-.937V17H3.095a2.1,2.1,0,0,1-1.378-3.675L12.665,2.955a3.486,3.486,0,0,1,4.792,0L28.431,13.347A2.066,2.066,0,0,1,28.984,15.637Z" transform="translate(-0.999 -2.001)" fill="#273139"/>
</svg>

After

Width:  |  Height:  |  Size: 467 B

@ -0,0 +1,5 @@
<svg id="interview_5_" data-name="interview (5)" xmlns="http://www.w3.org/2000/svg" width="25.794" height="25.794" viewBox="0 0 25.794 25.794">
<path id="Path_4658" data-name="Path 4658" d="M205.7,0h-9.713A3.182,3.182,0,0,0,192.8,3.184v14.57a.756.756,0,0,0,1.209.6l3.036-2.277H205.7a3.182,3.182,0,0,0,3.184-3.184V3.184A3.182,3.182,0,0,0,205.7,0Zm-5.612,12.034h-3.291a.756.756,0,1,1,0-1.511h3.291a.756.756,0,1,1,0,1.511Zm4.8-3.238h-8.094a.756.756,0,1,1,0-1.511h8.094a.756.756,0,0,1,0,1.511Zm0-3.238h-8.094a.756.756,0,1,1,0-1.511h8.094a.756.756,0,0,1,0,1.511Zm0,0" transform="translate(-183.088)" fill="#767676"/>
<path id="Path_4659" data-name="Path 4659" d="M31.57,244.561A3.572,3.572,0,1,1,28,240.988,3.572,3.572,0,0,1,31.57,244.561Zm0,0" transform="translate(-23.195 -228.847)" fill="#767676"/>
<path id="Path_4660" data-name="Path 4660" d="M4.8,382.8a4.8,4.8,0,0,0-4.8,4.8v.95a.756.756,0,0,0,.756.756H8.85a.756.756,0,0,0,.756-.756v-.95A4.8,4.8,0,0,0,4.8,382.8Zm0,0" transform="translate(0 -363.519)" fill="#767676"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -30,7 +30,6 @@ class BranchApiClent {
"serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? "",
};
String t = AppState().getUser.data!.accessToken ?? "";
print("tokeen " + t);
return await ApiClient().getJsonForObject((json) => Branch.fromJson(json), ApiConsts.getProviderBranch, queryParameters: postParams, token: t);
}

@ -1,30 +0,0 @@
import 'package:permission_handler/permission_handler.dart';
class AppPermissions{
static void location(Function(bool) completion) {
Permission.location.isGranted.then((isGranted){
if(!isGranted){
Permission.location.request().then((granted){
completion(granted == PermissionStatus.granted);
});
}
completion(isGranted);
});
}
static void checkAll(Function(bool) completion){
[
Permission.location
].request().then((value){
bool allGranted = false;
value.values.forEach((element) {
allGranted = allGranted && element == PermissionStatus.granted;
});
completion(allGranted);
});
}
}

@ -15,7 +15,7 @@ class AppState {
bool? get getIsLogged => isLogged;
User? _user = null;
User? _user;
set setUser(v) => _user = v;
@ -31,7 +31,7 @@ class AppState {
this._postParams = _postParams;
}
LatLng currentLocation = new LatLng(0, 0);
LatLng currentLocation = const LatLng(0, 0);
set setCurrentLocation(v) => currentLocation = v;

@ -5,14 +5,28 @@ import 'package:car_provider_app/classes/colors.dart';
extension EmailValidator on String {
Widget get toWidget => Text(this);
Widget toText({Color? color, bool isBold = false, double? fontSize}) => Text(
Widget toText({
Color? color,
bool isBold = false,
double? fontSize,
TextDecoration? decoration,
TextAlign? textAlign,
}) =>
Text(
this,
style: TextStyle(fontSize: fontSize ?? 10, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4),
textAlign: textAlign,
style: TextStyle(
fontSize: fontSize ?? 10,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
color: color ?? MyColors.darkTextColor,
letterSpacing: -0.4,
decoration: decoration,
),
);
Widget toText10({Color? color, bool isBold = false}) => Text(
this,
style: TextStyle(fontSize: 10, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4),
style: TextStyle(fontSize: 10, fontWeight: isBold ? FontWeight.bold : FontWeight.w800, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4),
);
Widget toText11({Color? color, bool isUnderLine = false, bool isBold = false}) => Text(
@ -42,15 +56,16 @@ extension EmailValidator on String {
style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.52, decoration: isUnderLine ? TextDecoration.underline : null),
);
Widget toText14({
Color? color,
bool isBold = false,
TextAlign? textAlign,
}) =>
Text(
Widget toText14({Color? color, bool isBold = false, TextAlign? textAlign, TextDecoration? decoration}) => Text(
this,
textAlign: textAlign,
style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 14, letterSpacing: -0.48, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
style: TextStyle(
color: color ?? MyColors.darkTextColor,
fontSize: 14,
letterSpacing: -0.48,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
decoration: decoration,
),
);
Widget toText16({Color? color, bool isBold = false}) => Text(
@ -65,14 +80,7 @@ extension EmailValidator on String {
Widget toText20({Color? color, bool isBold = false, FontWeight? fontWeight}) => Text(
this,
style: TextStyle(
height: 23 / 24,
color: color ?? MyColors.darkTextColor,
fontSize: 20,
letterSpacing: -1.44,
fontWeight: fontWeight ?? (isBold
? FontWeight.bold
: FontWeight.w600)),
style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 20, letterSpacing: -1.44, fontWeight: fontWeight ?? (isBold ? FontWeight.bold : FontWeight.w600)),
);
Widget toText22({Color? color, bool isBold = false}) => Text(

@ -9,18 +9,55 @@ extension WidgetExtensions on Widget {
Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) =>
Padding(padding: EdgeInsets.only(left: left, right: right, top: top, bottom: bottom), child: this);
Widget toContainer({double borderRadius = 8,double padding=10}) => Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(borderRadius),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.1),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
padding: EdgeInsets.all(padding),
child: this);
Widget toContainer({double borderRadius = 8, double paddingAll = 10, EdgeInsetsGeometry? padding, Color backgroundColor = Colors.white, bool isShadowEnabled = false}) => Container(
decoration: BoxDecoration(
color: backgroundColor,
borderRadius: BorderRadius.circular(borderRadius),
boxShadow: !isShadowEnabled
? null
: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
padding: padding ?? EdgeInsets.all(paddingAll),
child: this,
);
Widget toCircle({double borderRadius = 100, double padding = 0}) => Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(borderRadius),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.1),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
clipBehavior: Clip.antiAlias,
padding: EdgeInsets.all(padding),
child: this,
);
Widget toWhiteContainer({double borderRadius = 8, double padding = 12, double? width}) => Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(15),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
padding: EdgeInsets.all(padding),
width: width,
child: this,
);
}

@ -14,11 +14,7 @@ Future<void> main() async {
await EasyLocalization.ensureInitialized();
runApp(
EasyLocalization(
supportedLocales: [
Locale('ar', 'SA'),
Locale('en', 'US')
],
supportedLocales: [Locale('ar', 'SA'), Locale('en', 'US')],
fallbackLocale: Locale('en', 'US'),
// startLocale: Locale('ar', 'SA'),
path: 'resources/langs',
@ -43,7 +39,9 @@ class MyApp extends StatelessWidget {
child: Sizer(
builder: (context, orientation, deviceType) {
AppState().setPostParamsModel(
PostParamsModel(languageID: EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2,),
PostParamsModel(
languageID: EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2,
),
);
return MaterialApp(
theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"),

@ -1,3 +1,4 @@
import 'package:badges/badges.dart' as b;
import 'package:car_provider_app/api/api_client.dart';
import 'package:car_provider_app/api/client/user_api_client.dart';
import 'package:car_provider_app/api/shared_prefrence.dart';
@ -8,6 +9,8 @@ import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/models/m_response.dart';
import 'package:car_provider_app/models/user/image_response.dart';
import 'package:car_provider_app/pages/dashboard/widget/bottom_nav_bar.dart';
import 'package:car_provider_app/pages/settings/branch/branch_list_page.dart';
import 'package:car_provider_app/theme/colors.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/utils/utils.dart';
@ -23,10 +26,12 @@ import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:http/http.dart';
import 'package:image_picker/image_picker.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sizer/sizer.dart';
import 'dart:io';
import '../../generated/locale_keys.g.dart';
import '../../utils/location/Location.dart';
import 'fragments/home_fragment.dart';
class DashboardPage extends StatefulWidget {
@override
@ -36,6 +41,7 @@ class DashboardPage extends StatefulWidget {
enum ImageSourceType { gallery, camera }
class _DashboardPageState extends State<DashboardPage> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
String userName = "";
// void _handleURLButtonPress(BuildContext context, var type) {
@ -43,6 +49,7 @@ class _DashboardPageState extends State<DashboardPage> {
// MaterialPageRoute(builder: (context) => ImageFromGalleryEx(type)));
// }
int _selectedIndex = 2;
File? imagePicked;
String image64 = "";
final _picker = ImagePicker();
@ -68,18 +75,58 @@ class _DashboardPageState extends State<DashboardPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(
context,
title: LocaleKeys.logo_brand.tr(),
isRemoveBackButton: true,
),
drawer: showDrawer(context),
body: Container(
child: Container(
child: Center(
child: LocaleKeys.dashboard_main.tr().toText24(),
key: _scaffoldKey,
appBar: appBar(context,
leadingWidth: 100,
leading: InkWell(
onTap: () => _scaffoldKey.currentState!.openDrawer(),
child: Row(
children: [
21.width,
Image.asset(
"assets/images/bn_car.jpeg",
height: 38,
width: 38,
fit: BoxFit.cover,
).toCircle(),
6.width,
const Icon(Icons.menu),
],
),
),
),
actions: [
IconButton(
onPressed: () {},
icon: const b.Badge(
badgeContent: Text(
'3',
style: TextStyle(
fontSize: 10,
color: Colors.white,
),
),
child: Icon(Icons.notifications_active),
badgeStyle: b.BadgeStyle(
badgeColor: MyColors.primaryColor,
padding: EdgeInsets.all(5),
),
),
),
10.width,
]),
drawer: showDrawer(context),
body: _selectedIndex == 0
? BranchListPage(
isNeedAppBar: false,
)
: const HomeFragment(),
bottomNavigationBar: mBottomNavBar(
_selectedIndex,
(int i) {
setState(() {
_selectedIndex = i;
});
},
),
);
}

@ -0,0 +1,36 @@
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/pages/dashboard/widget/ad_widget.dart';
import 'package:car_provider_app/pages/dashboard/widget/appointment_slider_widget.dart';
import 'package:car_provider_app/pages/dashboard/widget/my_branches_widget.dart';
import 'package:flutter/material.dart';
import '../widget/view_all_widget.dart';
class HomeFragment extends StatelessWidget {
const HomeFragment({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return SizedBox(
width: double.infinity,
height: double.infinity,
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.only(top: 8, left: 21, right: 21, bottom: 21),
child: Column(
children: [
ViewAllWidget("Upcoming Appointment", "View All"),
const AppointmentSliderWidget(),
20.height,
ViewAllWidget("My Branch's", "View All"),
MyBranchesWidget(),
20.height,
ViewAllWidget("Recommended Ads", "View All"),
const AdWidget(),
],
),
),
),
);
}
}

@ -0,0 +1,105 @@
import 'package:car_provider_app/classes/colors.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:flutter/material.dart';
class AdWidget extends StatelessWidget {
const AdWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
showAd(),
12.height,
showAd(),
],
);
}
Widget showAd() {
return Row(
children: [
Image.asset(
"assets/images/bn_car.jpeg",
width: 80,
height: 80,
fit: BoxFit.cover,
),
12.width,
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Toyota Crolla".toText(fontSize: 16, isBold: true),
Row(
children: [
"Model:".toText10(
color: MyColors.lightTextColor,
),
2.width,
"2019".toText10(),
],
),
Row(
children: [
"Mileage:".toText10(
color: MyColors.lightTextColor,
),
2.width,
"73,000 km".toText10(),
],
),
],
),
),
Column(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Riyadh".toText10(
color: MyColors.lightTextColor,
),
"9 Hours Ago".toText10(
color: MyColors.lightTextColor,
),
],
),
],
),
8.height,
Row(
children: [
Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
"30,000".toText(fontSize: 16, isBold: true),
2.width,
"SAR:".toText10(
color: MyColors.lightTextColor,
),
],
),
),
const Icon(Icons.arrow_forward)
],
),
],
),
),
],
).toWhiteContainer(width: double.infinity, padding: 12);
}
}

@ -0,0 +1,89 @@
import 'package:car_provider_app/classes/colors.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:flutter/material.dart';
import 'package:sizer/sizer.dart';
class AppointmentSliderWidget extends StatelessWidget {
const AppointmentSliderWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Olaya Brach".toText12(
color: MyColors.lightTextColor,
isBold: true,
),
"Abdullah Alhbas".toText14(
isBold: true,
),
Row(
children: [
"Appt. On:".toText10(
color: MyColors.lightTextColor,
),
2.width,
"19-Mar-2023 11:48 AM".toText10(),
],
),
],
),
),
"1+ Requests".toText(fontSize: 10).toContainer(
borderRadius: 15,
backgroundColor: MyColors.lightGreyEAColor,
padding: const EdgeInsets.symmetric(
vertical: 6,
horizontal: 12,
),
),
],
),
8.height,
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Expanded(
child: Column(
children: [
showServices("Maintenance"),
2.height,
showServices("Accessories and Modification"),
],
),
),
Icon(
Icons.arrow_forward,
),
],
),
],
).toWhiteContainer(width: double.infinity);
}
Widget showServices(String title) {
return Row(
children: [
Icon(
Icons.ac_unit,
color: MyColors.primaryColor,
size: 18,
),
8.width,
title.toText(
fontSize: 14,
isBold: true,
),
],
);
}
}

@ -0,0 +1,47 @@
import 'package:car_provider_app/classes/colors.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
Widget mBottomNavBar(int selectedIndex, Function(int) onSelected) {
return BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: SvgPicture.asset("assets/icons/ic_branches.svg"),
activeIcon: SvgPicture.asset("assets/icons/ic_branches.svg", color: MyColors.primaryColor),
label: 'Branches',
),
BottomNavigationBarItem(
icon: SvgPicture.asset("assets/icons/ic_appoinments.svg"),
activeIcon: SvgPicture.asset("assets/icons/ic_appoinments.svg", color: MyColors.primaryColor),
label: 'Appointments',
),
BottomNavigationBarItem(
icon: SvgPicture.asset("assets/icons/ic_home.svg"),
activeIcon: SvgPicture.asset("assets/icons/ic_home.svg", color: MyColors.primaryColor),
label: 'Home',
),
BottomNavigationBarItem(
icon: SvgPicture.asset("assets/icons/ic_ads.svg"),
activeIcon: SvgPicture.asset("assets/icons/ic_ads.svg", color: MyColors.primaryColor),
label: 'Ads',
),
BottomNavigationBarItem(
icon: SvgPicture.asset("assets/icons/ic_requests.svg"),
activeIcon: SvgPicture.asset("assets/icons/ic_requests.svg", color: MyColors.primaryColor),
label: 'Requests',
),
],
currentIndex: selectedIndex,
type: BottomNavigationBarType.fixed,
selectedItemColor: Colors.amber[800],
showSelectedLabels: true,
showUnselectedLabels: true,
unselectedItemColor: MyColors.lightTextColor,
unselectedFontSize: 10,
selectedFontSize: 10,
onTap: (i) {
onSelected(i);
},
);
}

@ -0,0 +1,39 @@
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:flutter/material.dart';
class MyBranchesWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
child: Row(
children: [
showBranch("Olaya Branch"),
12.width,
showBranch("Thakhasusi Branch"),
12.width,
],
),
);
}
Widget showBranch(String title) {
return SizedBox(
width: 90,
child: Column(
children: [
Image.asset(
"assets/images/bn_car.jpeg",
width: 80,
height: 80,
fit: BoxFit.cover,
).toCircle(borderRadius: 2000),
8.height,
title.toText(fontSize: 16, isBold: true, textAlign: TextAlign.center),
],
),
);
}
}

@ -0,0 +1,21 @@
import 'package:car_provider_app/classes/colors.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:flutter/cupertino.dart';
Widget ViewAllWidget(String title, String subTitle) {
return Container(
width: double.infinity,
padding: const EdgeInsets.only(bottom: 10),
child: Row(
children: [
Expanded(child: title.toText16(isBold: true)),
subTitle.toText(
fontSize: 12,
isBold: true,
color: MyColors.primaryColor,
decoration: TextDecoration.underline,
)
],
),
);
}

@ -34,7 +34,7 @@ class _BranchDetailPageState extends State<BranchDetailPage> {
super.initState();
widget.branchData.serviceProviderServices!.forEach((element) {
categories.add(
new CategoryData(
CategoryData(
id: element.categoryId,
categoryName: element.categoryName,
categoryNameN: element.categoryName,
@ -61,7 +61,7 @@ class _BranchDetailPageState extends State<BranchDetailPage> {
context,
title: LocaleKeys.branchName.tr(),
),
body: Container(
body: SizedBox(
width: double.infinity,
height: double.infinity,
child: Column(

@ -22,6 +22,10 @@ import '../../../utils/navigator.dart';
import '../../../widgets/button/show_fill_button.dart';
class BranchListPage extends StatefulWidget {
bool isNeedAppBar;
BranchListPage({Key? key, this.isNeedAppBar = true}) : super(key: key);
@override
State<BranchListPage> createState() => _BranchListPageState();
}
@ -35,7 +39,7 @@ class _BranchListPageState extends State<BranchListPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(
appBar:!widget.isNeedAppBar?null: appBar(
context,
title: LocaleKeys.myServiceBranches.tr(),
),
@ -57,106 +61,108 @@ class _BranchListPageState extends State<BranchListPage> {
future: BranchApiClent().getBranchAndServices(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return snapshot.data!.data!.serviceProviderBranch!.length == 0
? Center(child: Text(LocaleKeys.no_branch.tr()))
: ListView.separated(
itemBuilder: (context, index) {
return Row(
children: [
Container(
width: 74,
height: 50,
decoration: BoxDecoration(
color: MyColors.darkPrimaryColor,
borderRadius: BorderRadius.all(Radius.circular(8)),
),
padding: EdgeInsets.all(6),
child: SvgPicture.asset(
"assets/icons/ic_branchs.svg",
color: Colors.white,
),
),
12.width,
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
return snapshot.data!.data == null
? const Center(child: Text("No Branch Found"))
: snapshot.data!.data!.serviceProviderBranch!.isEmpty
? Center(child: Text(LocaleKeys.no_branch.tr()))
: ListView.separated(
itemBuilder: (context, index) {
return Row(
children: [
Container(
width: 74,
height: 50,
decoration: const BoxDecoration(
color: MyColors.darkPrimaryColor,
borderRadius: BorderRadius.all(Radius.circular(8)),
),
padding: EdgeInsets.all(6),
child: SvgPicture.asset(
"assets/icons/ic_branchs.svg",
color: Colors.white,
),
),
12.width,
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Icon(
Icons.place,
size: 12,
color: MyColors.darkPrimaryColor,
),
Geolocator.distanceBetween(
AppState().currentLocation.latitude,
AppState().currentLocation.latitude,
double.parse(snapshot.data!.data!.serviceProviderBranch![index].latitude ?? "0"),
double.parse(snapshot.data!.data!.serviceProviderBranch![index].longitude ?? "0"))
.toStringAsFixed(2)
.toText12(
Row(
children: [
const Icon(
Icons.place,
size: 12,
color: MyColors.darkPrimaryColor,
)
),
Geolocator.distanceBetween(
AppState().currentLocation.latitude,
AppState().currentLocation.latitude,
double.parse(snapshot.data!.data!.serviceProviderBranch![index].latitude ?? "0"),
double.parse(snapshot.data!.data!.serviceProviderBranch![index].longitude ?? "0"))
.toStringAsFixed(2)
.toText12(
color: MyColors.darkPrimaryColor,
)
],
),
Text(
snapshot.data!.data!.serviceProviderBranch![index].branchName ?? "",
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold,
),
),
LocaleKeys.tapToEdit.tr().toText10(color: MyColors.grey70Color),
],
),
Text(
snapshot.data!.data!.serviceProviderBranch![index].branchName ?? "",
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold,
),
),
LocaleKeys.tapToEdit.tr().toText10(color: MyColors.grey70Color),
],
),
),
12.width,
IconButton(
onPressed: () async {
Utils.showLoading(context);
MResponse res = await BranchApiClent().updateBranch(
snapshot.data!.data!.serviceProviderBranch![index].id ?? 0,
snapshot.data!.data!.serviceProviderBranch![index].branchName ?? "",
snapshot.data!.data!.serviceProviderBranch![index].branchDescription ?? "",
snapshot.data!.data!.serviceProviderBranch![index].cityId.toString(),
snapshot.data!.data!.serviceProviderBranch![index].address ?? "",
snapshot.data!.data!.serviceProviderBranch![index].latitude.toString(),
snapshot.data!.data!.serviceProviderBranch![index].longitude.toString(),
isNeedToDelete: false);
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_deleted.tr());
setState(() {});
} else {
Utils.showToast(res.message ?? "");
}
},
icon: Icon(Icons.delete),
color: Colors.red,
),
Icon(
Icons.arrow_forward_rounded,
size: 16,
),
],
).toContainer().onPress(() async {
// await navigateWithName(context, AppRoutes.defineBranch, arguments: snapshot.data!.data![index]);
// setState(() {});
snapshot.data!.data!.serviceProviderBranch![index].countryID = snapshot.data!.data!.countryID;
snapshot.data!.data!.serviceProviderBranch![index].countryName = snapshot.data!.data!.countryName;
await navigateWithName(context, AppRoutes.branchDetail, arguments: snapshot.data!.data!.serviceProviderBranch![index]);
setState(() {});
});
},
separatorBuilder: (context, index) {
return 12.height;
},
itemCount: snapshot.data!.data!.serviceProviderBranch!.length,
padding: EdgeInsets.all(12),
);
),
12.width,
IconButton(
onPressed: () async {
Utils.showLoading(context);
MResponse res = await BranchApiClent().updateBranch(
snapshot.data!.data!.serviceProviderBranch![index].id ?? 0,
snapshot.data!.data!.serviceProviderBranch![index].branchName ?? "",
snapshot.data!.data!.serviceProviderBranch![index].branchDescription ?? "",
snapshot.data!.data!.serviceProviderBranch![index].cityId.toString(),
snapshot.data!.data!.serviceProviderBranch![index].address ?? "",
snapshot.data!.data!.serviceProviderBranch![index].latitude.toString(),
snapshot.data!.data!.serviceProviderBranch![index].longitude.toString(),
isNeedToDelete: false);
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_deleted.tr());
setState(() {});
} else {
Utils.showToast(res.message ?? "");
}
},
icon: const Icon(Icons.delete),
color: Colors.red,
),
const Icon(
Icons.arrow_forward_rounded,
size: 16,
),
],
).toContainer().onPress(() async {
// await navigateWithName(context, AppRoutes.defineBranch, arguments: snapshot.data!.data![index]);
// setState(() {});
snapshot.data!.data!.serviceProviderBranch![index].countryID = snapshot.data!.data!.countryID;
snapshot.data!.data!.serviceProviderBranch![index].countryName = snapshot.data!.data!.countryName;
await navigateWithName(context, AppRoutes.branchDetail, arguments: snapshot.data!.data!.serviceProviderBranch![index]);
setState(() {});
});
},
separatorBuilder: (context, index) {
return 12.height;
},
itemCount: snapshot.data!.data!.serviceProviderBranch!.length,
padding: const EdgeInsets.all(12),
);
} else {
return Center(
return const Center(
child: CircularProgressIndicator(),
);
}

@ -17,6 +17,7 @@ import 'package:car_provider_app/widgets/button/show_fill_button.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:car_provider_app/widgets/tab/role_type_tab.dart';
import 'package:car_provider_app/widgets/txt_field.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@ -37,6 +38,28 @@ class _RegisterPageState extends State<RegisterPage> {
TextEditingController emailController = TextEditingController();
late Future<Role> futureRoles;
late Future<Country> futureCountries;
@override
void initState() {
super.initState();
fetchData();
}
fetchData() {
UserApiClent().getRoles().then((value) {
setState(() {
futureRoles = Future.value(value);
});
});
UserApiClent().getAllCountries().then((value) {
setState(() {
futureCountries = Future.value(value);
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
@ -44,9 +67,9 @@ class _RegisterPageState extends State<RegisterPage> {
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(20),
padding: const EdgeInsets.all(20),
child: SingleChildScrollView(
child: Container(
child: SizedBox(
height: MediaQuery.of(context).size.height,
child: Column(
children: [
@ -59,24 +82,28 @@ class _RegisterPageState extends State<RegisterPage> {
),
30.height,
FutureBuilder<Role>(
future: UserApiClent().getRoles(),
future: futureRoles,
builder: (context, snapshot) {
if (snapshot.hasData) {
List<DropValue> dropList = [];
snapshot.data?.data?.forEach((element) {
dropList.add(DropValue(element.id ?? 0, EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? element.roleNameN ?? "" : element.roleName ?? "", ""));
});
return DropdownField((DropValue value) {
role = value.id;
}, list: dropList, hint: LocaleKeys.selectRole.tr());
return RoleTypeTab(
0,
dropList,
onSelect: (DropValue value) {
role = value.id;
},
);
} else {
return CircularProgressIndicator();
return const CircularProgressIndicator();
}
},
),
18.height,
FutureBuilder<Country>(
future: UserApiClent().getAllCountries(),
future: futureCountries,
builder: (context, snapshot) {
if (snapshot.hasData) {
List<DropValue> dropList = [];
@ -146,8 +173,8 @@ class _RegisterPageState extends State<RegisterPage> {
Flexible(
child: TextField(
controller: emailController,
onChanged: (v){
phoneNum=v;
onChanged: (v) {
phoneNum = v;
},
style: const TextStyle(
fontSize: 20,

@ -17,7 +17,7 @@ class AppTheme {
primaryColor: primaryColor,
primarySwatch: Colors.orange,
backgroundColor: Colors.white,
scaffoldBackgroundColor: Colors.white,
scaffoldBackgroundColor: Color(0xffF8F8F8),
primaryTextTheme: TextTheme(
headline6: TextStyle(color: Colors.white),
),

@ -34,3 +34,33 @@ Future<bool> requestPermissionGranted(
return false;
}
}
class AppPermissions{
static void location(Function(bool) completion) {
Permission.location.isGranted.then((isGranted){
if(!isGranted){
Permission.location.request().then((granted){
completion(granted == PermissionStatus.granted);
});
}
completion(isGranted);
});
}
static void checkAll(Function(bool) completion){
[
Permission.location
].request().then((value){
bool allGranted = false;
value.values.forEach((element) {
allGranted = allGranted && element == PermissionStatus.granted;
});
completion(allGranted);
});
}
}

@ -2,13 +2,14 @@ import 'dart:async';
import 'dart:math';
import 'dart:ui';
import 'package:car_provider_app/utils/AppPermissionHandler.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import '../../classes/app_permissions.dart';
import '../../classes/utils.dart';
// import 'package:geodesy/geodesy.dart' as geodesy;

@ -14,17 +14,22 @@ AppBar appBar(
Color? backIconColor,
List<Widget>? actions,
bool isRemoveBackButton = false,
Widget? leading,
double? leadingWidth,
VoidCallback? onTap,
}) {
return AppBar(
backgroundColor: backgroundColor ?? appBackgroundColor,
elevation: elevation ?? 0,
centerTitle: isTitleCenter ?? true,
leadingWidth: leadingWidth,
leading: isRemoveBackButton
? null
: IconButton(
icon: Icon(Icons.arrow_back_ios, color: Colors.black),
onPressed: () => Navigator.of(context).pop(),
),
: leading ??
IconButton(
icon: const Icon(Icons.arrow_back_ios, color: Colors.black),
onPressed: onTap ?? () => Navigator.of(context).pop(),
),
iconTheme: IconThemeData(
color: backIconColor ?? Colors.black, //change your color here
),

@ -0,0 +1,60 @@
import 'package:car_provider_app/classes/colors.dart';
import 'package:car_provider_app/widgets/dropdown/dropdow_field.dart';
import 'package:car_provider_app/widgets/extensions/int_extensions.dart';
import 'package:flutter/material.dart';
class RoleTypeTab extends StatefulWidget {
int selectedIndex;
List<DropValue> dropList;
Function(DropValue value) onSelect;
RoleTypeTab(this.selectedIndex, this.dropList, {required this.onSelect});
@override
State<RoleTypeTab> createState() => _RoleTypeTabState();
}
class _RoleTypeTabState extends State<RoleTypeTab> {
@override
Widget build(BuildContext context) {
return SizedBox(
width: double.infinity,
height: 45,
child: ListView.separated(
itemBuilder: (context, index) {
return InkWell(
onTap: () {
setState(() {
widget.selectedIndex = index;
widget.onSelect(widget.dropList[index]);
});
},
child: Container(
width: (MediaQuery.of(context).size.width / 2)-30,
height: 45,
decoration: BoxDecoration(
color: widget.selectedIndex == index ? MyColors.darkPrimaryColor : Colors.grey[200],
// border: Border.all(color: type == ClassType.NUMBER ? MyColors.darkPrimaryColor : Colors.transparent, width: 2),
borderRadius: const BorderRadius.all(Radius.circular(0)),
),
child: Center(
child: Text(
widget.dropList[index].value,
style: TextStyle(
color: widget.selectedIndex == index ? MyColors.white : Colors.black,
fontSize: 10,
),
),
),
),
);
},
separatorBuilder: (context, index) {
return 12.width;
},
itemCount: widget.dropList.length,
scrollDirection: Axis.horizontal,
),
);
}
}

@ -5,114 +5,130 @@ packages:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440"
url: "https://pub.dev"
source: hosted
version: "2.3.1"
version: "2.4.0"
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
url: "https://pub.dev"
source: hosted
version: "2.9.0"
version: "2.10.0"
badges:
dependency: "direct main"
description:
name: badges
sha256: "461031a60efbb95276f52107f63d5d45008b5ca1eb7f8ca440cadda9ec2143b0"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.1"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
url: "https://pub.dev"
source: hosted
version: "1.2.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev"
source: hosted
version: "1.1.1"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
url: "https://pub.dev"
source: hosted
version: "1.16.0"
version: "1.17.0"
cross_file:
dependency: transitive
description:
name: cross_file
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.3+1"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
version: "0.3.3+4"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
url: "https://pub.dev"
source: hosted
version: "1.0.5"
easy_localization:
dependency: "direct main"
description:
name: easy_localization
url: "https://pub.dartlang.org"
sha256: "6a2e99fa0bfe5765bf4c6ca9b137d5de2c75593007178c5e4cd2ae985f870080"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
easy_logger:
dependency: transitive
description:
name: easy_logger
url: "https://pub.dartlang.org"
sha256: c764a6e024846f33405a2342caf91c62e357c24b02c04dbc712ef232bf30ffb7
url: "https://pub.dev"
source: hosted
version: "0.0.2"
equatable:
dependency: "direct main"
description:
name: equatable
url: "https://pub.dartlang.org"
sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
url: "https://pub.dev"
source: hosted
version: "2.0.3"
version: "2.0.5"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "2.0.1"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
url: "https://pub.dev"
source: hosted
version: "6.1.2"
version: "6.1.4"
file_picker:
dependency: "direct main"
description:
name: file_picker
url: "https://pub.dartlang.org"
sha256: d8e9ca7e5d1983365c277f12c21b4362df6cf659c99af146ad4d04eb33033013
url: "https://pub.dev"
source: hosted
version: "4.6.1"
version: "5.2.6"
flutter:
dependency: "direct main"
description: flutter
@ -122,7 +138,8 @@ packages:
dependency: "direct dev"
description:
name: flutter_lints
url: "https://pub.dartlang.org"
sha256: b543301ad291598523947dc534aaddc5aaad597b709d2426d3a0e0d44c5cb493
url: "https://pub.dev"
source: hosted
version: "1.0.4"
flutter_localizations:
@ -134,16 +151,18 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
url: "https://pub.dartlang.org"
sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf
url: "https://pub.dev"
source: hosted
version: "2.0.7"
version: "2.0.9"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.dartlang.org"
sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2"
url: "https://pub.dev"
source: hosted
version: "1.1.1+1"
version: "1.1.6"
flutter_test:
dependency: "direct dev"
description: flutter
@ -158,385 +177,456 @@ packages:
dependency: "direct main"
description:
name: fluttertoast
url: "https://pub.dartlang.org"
sha256: "2f9c4d3f4836421f7067a28f8939814597b27614e021da9d63e5d3fb6e212d25"
url: "https://pub.dev"
source: hosted
version: "8.0.9"
version: "8.2.1"
geocoding:
dependency: "direct main"
description:
name: geocoding
url: "https://pub.dartlang.org"
sha256: b34c0501bbbaf3190b85bef3078b27cf66c28a8915c6d3af50d67f356aa7da31
url: "https://pub.dev"
source: hosted
version: "2.1.0"
geocoding_android:
dependency: transitive
description:
name: geocoding_android
sha256: "5a1fc0cec9b0497b44ca31c1fa8d1c891f3aded1053e6bb2eac075d3bd1bf046"
url: "https://pub.dev"
source: hosted
version: "2.0.4"
version: "2.1.0"
geocoding_ios:
dependency: transitive
description:
name: geocoding_ios
sha256: c85495ce8fb34e4fbd2dd8fc5f79263d622d9f88c4af948c965daf6b27a7f3a1
url: "https://pub.dev"
source: hosted
version: "2.1.0"
geocoding_platform_interface:
dependency: transitive
description:
name: geocoding_platform_interface
url: "https://pub.dartlang.org"
sha256: "8848605d307d844d89937cdb4b8ad7dfa880552078f310fa24d8a460f6dddab4"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
geolocator:
dependency: "direct main"
description:
name: geolocator
url: "https://pub.dartlang.org"
sha256: "5c23f3613f50586c0bbb2b8f970240ae66b3bd992088cf60dd5ee2e6f7dde3a8"
url: "https://pub.dev"
source: hosted
version: "9.0.1"
version: "9.0.2"
geolocator_android:
dependency: transitive
description:
name: geolocator_android
url: "https://pub.dartlang.org"
sha256: "2ba24690aee0a3e1b6b7bd47c2711a50c874e95e4c758346589d35194adf6d6a"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.1.7"
geolocator_apple:
dependency: transitive
description:
name: geolocator_apple
url: "https://pub.dartlang.org"
sha256: "22b60ca3b8c0f58e6a9688ff855ee39ab813ca3f0c0609a48d282f6631266f2e"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
version: "2.2.5"
geolocator_platform_interface:
dependency: transitive
description:
name: geolocator_platform_interface
url: "https://pub.dartlang.org"
sha256: af4d69231452f9620718588f41acc4cb58312368716bfff2e92e770b46ce6386
url: "https://pub.dev"
source: hosted
version: "4.0.6"
version: "4.0.7"
geolocator_web:
dependency: transitive
description:
name: geolocator_web
url: "https://pub.dartlang.org"
sha256: f68a122da48fcfff68bbc9846bb0b74ef651afe84a1b1f6ec20939de4d6860e1
url: "https://pub.dev"
source: hosted
version: "2.1.6"
geolocator_windows:
dependency: transitive
description:
name: geolocator_windows
url: "https://pub.dartlang.org"
sha256: f5911c88e23f48b598dd506c7c19eff0e001645bdc03bb6fecb9f4549208354d
url: "https://pub.dev"
source: hosted
version: "0.1.1"
google_maps_flutter:
dependency: "direct main"
description:
name: google_maps_flutter
url: "https://pub.dartlang.org"
sha256: "24392ef192f3b00bcd93151375676805a9933574423a5bd5509a0ead2e8a4215"
url: "https://pub.dev"
source: hosted
version: "2.1.10"
version: "2.2.5"
google_maps_flutter_android:
dependency: transitive
description:
name: google_maps_flutter_android
sha256: a8ee18649a67750cbd477a6867a1bf9c4154c5e9f69d722c8b53a627a6d58303
url: "https://pub.dev"
source: hosted
version: "2.4.9"
google_maps_flutter_ios:
dependency: transitive
description:
name: google_maps_flutter_ios
sha256: e9ad74415a222573625a2c1717adc1e375b18e8ce660fc12db734d1bda1132d4
url: "https://pub.dev"
source: hosted
version: "2.2.1"
google_maps_flutter_platform_interface:
dependency: transitive
description:
name: google_maps_flutter_platform_interface
url: "https://pub.dartlang.org"
sha256: a07811d2b82055815ede75e1fe4b7b76f71a0b4820b26f71bdaddd157d6a3e20
url: "https://pub.dev"
source: hosted
version: "2.2.1"
version: "2.2.6"
http:
dependency: "direct main"
description:
name: http
url: "https://pub.dartlang.org"
sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
url: "https://pub.dev"
source: hosted
version: "0.13.4"
version: "0.13.5"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
url: "https://pub.dev"
source: hosted
version: "4.0.1"
version: "4.0.2"
image_picker:
dependency: "direct main"
description:
name: image_picker
url: "https://pub.dartlang.org"
sha256: "64b21d9f0e065f9ab0e4dde458076226c97382cc0c6949144cb874c62bf8e9f8"
url: "https://pub.dev"
source: hosted
version: "0.8.5+3"
version: "0.8.7"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
url: "https://pub.dartlang.org"
sha256: b81db5f5ed8a69d54d5f0932c2af8120e8c0518a037d8beee494eec671da4d4c
url: "https://pub.dev"
source: hosted
version: "0.8.5+1"
version: "0.8.6+5"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
url: "https://pub.dartlang.org"
sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
version: "2.1.12"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
url: "https://pub.dartlang.org"
sha256: "50e882fe0a06bf0c8f7f5bce78d30975f279213293afc9471dc35f05617c50ff"
url: "https://pub.dev"
source: hosted
version: "0.8.5+6"
version: "0.8.7+1"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
url: "https://pub.dartlang.org"
sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8"
url: "https://pub.dev"
source: hosted
version: "2.6.0"
version: "2.6.3"
injector:
dependency: "direct main"
description:
name: injector
url: "https://pub.dartlang.org"
sha256: "2a683124c716e93b45521794f55bfe770e069cb3d871fc4fbc65b5acef78e832"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
intl:
dependency: transitive
description:
name: intl
url: "https://pub.dartlang.org"
sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91"
url: "https://pub.dev"
source: hosted
version: "0.17.0"
js:
dependency: transitive
description:
name: js
url: "https://pub.dartlang.org"
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
url: "https://pub.dev"
source: hosted
version: "0.6.4"
version: "0.6.5"
lints:
dependency: transitive
description:
name: lints
url: "https://pub.dartlang.org"
sha256: a2c3d198cb5ea2e179926622d433331d8b58374ab8f29cdda6e863bd62fd369c
url: "https://pub.dev"
source: hosted
version: "1.0.1"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
url: "https://pub.dev"
source: hosted
version: "0.12.12"
version: "0.12.13"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
url: "https://pub.dev"
source: hosted
version: "0.1.5"
version: "0.2.0"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
url: "https://pub.dev"
source: hosted
version: "1.8.0"
nested:
dependency: transitive
description:
name: nested
url: "https://pub.dartlang.org"
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
url: "https://pub.dev"
source: hosted
version: "1.8.2"
path_drawing:
dependency: transitive
description:
name: path_drawing
url: "https://pub.dartlang.org"
sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "1.0.1"
path_parsing:
dependency: transitive
description:
name: path_parsing
url: "https://pub.dartlang.org"
sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "1.0.1"
path_provider:
dependency: "direct main"
description:
name: path_provider
url: "https://pub.dartlang.org"
sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9"
url: "https://pub.dev"
source: hosted
version: "2.0.11"
version: "2.0.13"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
url: "https://pub.dartlang.org"
sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7"
url: "https://pub.dev"
source: hosted
version: "2.0.17"
path_provider_ios:
version: "2.0.24"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_ios
url: "https://pub.dartlang.org"
name: path_provider_foundation
sha256: "12eee51abdf4d34c590f043f45073adbb45514a108bd9db4491547a2fd891059"
url: "https://pub.dev"
source: hosted
version: "2.0.11"
version: "2.2.0"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1"
url: "https://pub.dev"
source: hosted
version: "2.1.7"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.6"
version: "2.1.10"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
url: "https://pub.dev"
source: hosted
version: "2.0.4"
version: "2.0.6"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
sha256: f53720498d5a543f9607db4b0e997c4b5438884de25b0f73098cc2671a51b130
url: "https://pub.dev"
source: hosted
version: "2.0.7"
version: "2.1.5"
permission_handler:
dependency: "direct main"
description:
name: permission_handler
url: "https://pub.dartlang.org"
sha256: "33c6a1253d1f95fd06fa74b65b7ba907ae9811f9d5c1d3150e51417d04b8d6a8"
url: "https://pub.dev"
source: hosted
version: "10.0.0"
version: "10.2.0"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
url: "https://pub.dartlang.org"
sha256: "8028362b40c4a45298f1cbfccd227c8dd6caf0e27088a69f2ba2ab15464159e2"
url: "https://pub.dev"
source: hosted
version: "10.0.0"
version: "10.2.0"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
url: "https://pub.dartlang.org"
sha256: "9c370ef6a18b1c4b2f7f35944d644a56aa23576f23abee654cf73968de93f163"
url: "https://pub.dev"
source: hosted
version: "9.0.4"
version: "9.0.7"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
url: "https://pub.dartlang.org"
sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84"
url: "https://pub.dev"
source: hosted
version: "3.7.0"
version: "3.9.0"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
url: "https://pub.dartlang.org"
sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b
url: "https://pub.dev"
source: hosted
version: "0.1.0"
version: "0.1.2"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4"
url: "https://pub.dev"
source: hosted
version: "5.0.0"
version: "5.1.0"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.4"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
url: "https://pub.dev"
source: hosted
version: "4.2.4"
provider:
dependency: "direct main"
description:
name: provider
url: "https://pub.dartlang.org"
sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f
url: "https://pub.dev"
source: hosted
version: "6.0.3"
version: "6.0.5"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
sha256: ee6257848f822b8481691f20c3e6d2bfee2e9eccb2a3d249907fcfb198c55b41
url: "https://pub.dev"
source: hosted
version: "2.0.15"
version: "2.0.18"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
url: "https://pub.dartlang.org"
sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521
url: "https://pub.dev"
source: hosted
version: "2.0.12"
shared_preferences_ios:
version: "2.0.17"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_ios
url: "https://pub.dartlang.org"
name: shared_preferences_foundation
sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.1.5"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707"
url: "https://pub.dev"
source: hosted
version: "2.0.4"
version: "2.1.5"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "2.1.1"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8"
url: "https://pub.dev"
source: hosted
version: "2.0.4"
version: "2.0.6"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
url: "https://pub.dartlang.org"
sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.1.5"
sizer:
dependency: "direct main"
description:
name: sizer
url: "https://pub.dartlang.org"
sha256: d2b3cb6cbc4a637f508dacd786bae55df31e5fc088044248a43e4fd1e050c117
url: "https://pub.dev"
source: hosted
version: "2.0.15"
sky_engine:
@ -548,93 +638,106 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
url: "https://pub.dev"
source: hosted
version: "1.9.0"
version: "1.9.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
url: "https://pub.dev"
source: hosted
version: "1.10.0"
version: "1.11.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.1"
stream_transform:
dependency: transitive
description:
name: stream_transform
url: "https://pub.dartlang.org"
sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.2.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
source: hosted
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
url: "https://pub.dev"
source: hosted
version: "0.4.12"
version: "0.4.16"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
universal_io:
dependency: transitive
description:
name: universal_io
url: "https://pub.dartlang.org"
sha256: "06866290206d196064fd61df4c7aea1ffe9a4e7c4ccaa8fcded42dd41948005d"
url: "https://pub.dev"
source: hosted
version: "2.0.4"
version: "2.2.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.4"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46
url: "https://pub.dev"
source: hosted
version: "2.6.1"
version: "3.1.3"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1
url: "https://pub.dev"
source: hosted
version: "0.2.0+1"
version: "1.0.0"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5"
url: "https://pub.dev"
source: hosted
version: "6.1.0"
version: "6.2.2"
sdks:
dart: ">=2.17.0 <3.0.0"
flutter: ">=2.11.0-0.1.pre"
dart: ">=2.18.0 <3.0.0"
flutter: ">=3.3.0"

@ -44,9 +44,11 @@ dependencies:
sizer: ^2.0.15
fluttertoast: ^8.0.8
shared_preferences: ^2.0.6
file_picker: ^4.4.0
file_picker: any
image_picker: ^0.8.4+4
equatable: ^2.0.3
badges: ^3.0.2

Loading…
Cancel
Save