BASE: Add Necessary Assets.
BIN
assets/images/click_logo.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/images/cosmetics_img.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
assets/images/delivery_img.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
assets/images/fondex_logo.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
assets/images/fondex_logo_main.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
assets/images/food_img.png
Normal file
|
After Width: | Height: | Size: 175 KiB |
BIN
assets/images/garderob_img.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
assets/images/ic_pick_drop_location.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
assets/images/keys_img.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
assets/images/location_indicatorl
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
assets/images/money_logo.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
assets/images/outer_city_taxi_option.png
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
assets/images/payme_logo.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
assets/images/products_img.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
assets/images/taxi_img.png
Normal file
|
After Width: | Height: | Size: 185 KiB |
BIN
assets/images/taxi_option.png
Normal file
|
After Width: | Height: | Size: 135 KiB |
@@ -6,6 +6,7 @@ import 'package:customer/utils/preferences.dart';
|
|||||||
import 'package:firebase_core/firebase_core.dart';
|
import 'package:firebase_core/firebase_core.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'controllers/global_setting_controller.dart';
|
import 'controllers/global_setting_controller.dart';
|
||||||
import 'controllers/theme_controller.dart';
|
import 'controllers/theme_controller.dart';
|
||||||
@@ -13,7 +14,10 @@ import 'firebase_options.dart';
|
|||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
await Firebase.initializeApp(name: 'default', options: DefaultFirebaseOptions.currentPlatform);
|
await Firebase.initializeApp(
|
||||||
|
name: 'default',
|
||||||
|
options: DefaultFirebaseOptions.currentPlatform,
|
||||||
|
);
|
||||||
|
|
||||||
await Preferences.initPref();
|
await Preferences.initPref();
|
||||||
|
|
||||||
@@ -32,10 +36,18 @@ class MyApp extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
Get.put(ThemeController());
|
Get.put(ThemeController());
|
||||||
return Obx(
|
return Obx(
|
||||||
() => GetMaterialApp(
|
() => ScreenUtilInit(
|
||||||
|
designSize: Size(375, 812),
|
||||||
|
minTextAdapt: true,
|
||||||
|
splitScreenMode: true,
|
||||||
|
child: GetMaterialApp(
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
builder: (context, child) {
|
builder: (context, child) {
|
||||||
return SafeArea(bottom: true, top: false, child: EasyLoading.init()(context, child));
|
return SafeArea(
|
||||||
|
bottom: true,
|
||||||
|
top: false,
|
||||||
|
child: EasyLoading.init()(context, child),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
translations: LocalizationService(),
|
translations: LocalizationService(),
|
||||||
locale: LocalizationService.locale,
|
locale: LocalizationService.locale,
|
||||||
@@ -43,7 +55,9 @@ class MyApp extends StatelessWidget {
|
|||||||
themeMode: themeController.themeMode,
|
themeMode: themeController.themeMode,
|
||||||
theme: ThemeData(
|
theme: ThemeData(
|
||||||
scaffoldBackgroundColor: AppThemeData.surface,
|
scaffoldBackgroundColor: AppThemeData.surface,
|
||||||
textTheme: TextTheme(bodyLarge: TextStyle(color: AppThemeData.grey900)),
|
textTheme: TextTheme(
|
||||||
|
bodyLarge: TextStyle(color: AppThemeData.grey900),
|
||||||
|
),
|
||||||
appBarTheme: AppBarTheme(
|
appBarTheme: AppBarTheme(
|
||||||
backgroundColor: AppThemeData.surface,
|
backgroundColor: AppThemeData.surface,
|
||||||
foregroundColor: AppThemeData.grey900,
|
foregroundColor: AppThemeData.grey900,
|
||||||
@@ -53,14 +67,22 @@ class MyApp extends StatelessWidget {
|
|||||||
backgroundColor: AppThemeData.surface,
|
backgroundColor: AppThemeData.surface,
|
||||||
selectedItemColor: AppThemeData.primary300,
|
selectedItemColor: AppThemeData.primary300,
|
||||||
unselectedItemColor: AppThemeData.grey600,
|
unselectedItemColor: AppThemeData.grey600,
|
||||||
selectedLabelStyle: TextStyle(fontFamily: AppThemeData.bold, fontSize: 12),
|
selectedLabelStyle: TextStyle(
|
||||||
unselectedLabelStyle: TextStyle(fontFamily: AppThemeData.bold, fontSize: 12),
|
fontFamily: AppThemeData.bold,
|
||||||
|
fontSize: 12,
|
||||||
|
),
|
||||||
|
unselectedLabelStyle: TextStyle(
|
||||||
|
fontFamily: AppThemeData.bold,
|
||||||
|
fontSize: 12,
|
||||||
|
),
|
||||||
type: BottomNavigationBarType.fixed,
|
type: BottomNavigationBarType.fixed,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
darkTheme: ThemeData(
|
darkTheme: ThemeData(
|
||||||
scaffoldBackgroundColor: AppThemeData.surfaceDark,
|
scaffoldBackgroundColor: AppThemeData.surfaceDark,
|
||||||
textTheme: TextTheme(bodyLarge: TextStyle(color: AppThemeData.greyDark900)),
|
textTheme: TextTheme(
|
||||||
|
bodyLarge: TextStyle(color: AppThemeData.greyDark900),
|
||||||
|
),
|
||||||
appBarTheme: AppBarTheme(
|
appBarTheme: AppBarTheme(
|
||||||
backgroundColor: AppThemeData.surfaceDark,
|
backgroundColor: AppThemeData.surfaceDark,
|
||||||
foregroundColor: AppThemeData.greyDark900,
|
foregroundColor: AppThemeData.greyDark900,
|
||||||
@@ -70,8 +92,14 @@ class MyApp extends StatelessWidget {
|
|||||||
backgroundColor: AppThemeData.grey900,
|
backgroundColor: AppThemeData.grey900,
|
||||||
selectedItemColor: AppThemeData.primary300,
|
selectedItemColor: AppThemeData.primary300,
|
||||||
unselectedItemColor: AppThemeData.grey300,
|
unselectedItemColor: AppThemeData.grey300,
|
||||||
selectedLabelStyle: TextStyle(fontFamily: AppThemeData.bold, fontSize: 12),
|
selectedLabelStyle: TextStyle(
|
||||||
unselectedLabelStyle: TextStyle(fontFamily: AppThemeData.bold, fontSize: 12),
|
fontFamily: AppThemeData.bold,
|
||||||
|
fontSize: 12,
|
||||||
|
),
|
||||||
|
unselectedLabelStyle: TextStyle(
|
||||||
|
fontFamily: AppThemeData.bold,
|
||||||
|
fontSize: 12,
|
||||||
|
),
|
||||||
type: BottomNavigationBarType.fixed,
|
type: BottomNavigationBarType.fixed,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -82,6 +110,7 @@ class MyApp extends StatelessWidget {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
|
import 'dart:developer';
|
||||||
|
|
||||||
import 'package:customer/constant/constant.dart';
|
import 'package:customer/constant/constant.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import '../../controllers/service_list_controller.dart';
|
import '../../controllers/service_list_controller.dart';
|
||||||
import '../../controllers/theme_controller.dart';
|
import '../../controllers/theme_controller.dart';
|
||||||
@@ -25,8 +28,8 @@ class ServiceListScreen extends StatelessWidget {
|
|||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text("eMart".tr, style: AppThemeData.semiBoldTextStyle(fontSize: 22, color: themeController.isDark.value ? AppThemeData.grey50 : AppThemeData.grey900)),
|
Image.asset("assets/images/fondex_logo.png",
|
||||||
Text("All Your Needs in One App!".tr, style: AppThemeData.regularTextStyle(fontSize: 14, color: themeController.isDark.value ? AppThemeData.grey100 : AppThemeData.grey700)),
|
height: 32.r, width: 124.r, fit: BoxFit.contain),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -37,45 +40,140 @@ class ServiceListScreen extends StatelessWidget {
|
|||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
|
controller.serviceListBanner.isEmpty
|
||||||
|
? SizedBox()
|
||||||
|
: Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 16.r),
|
||||||
|
child: BannerView(
|
||||||
|
bannerList: controller.serviceListBanner,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// Main Cards Section
|
||||||
|
_mainCardsSection(),
|
||||||
|
|
||||||
|
SizedBox(height: 15.h),
|
||||||
|
|
||||||
|
// Other Services Section Title
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 16.r),
|
||||||
|
child: Text(
|
||||||
|
"Другие услуги",
|
||||||
|
style: TextStyle(
|
||||||
|
fontFamily: AppThemeData.bold,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
fontSize: 20.sp,
|
||||||
|
color: AppThemeData.darkGrey,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
SizedBox(height: 10.h),
|
||||||
|
|
||||||
|
_otherServicesCardMaker(
|
||||||
|
image: "assets/images/delivery_img.png",
|
||||||
|
title: "Курьерская доставка",
|
||||||
|
subtitle: "Доставляем безопасно",
|
||||||
|
),
|
||||||
|
_otherServicesCardMaker(
|
||||||
|
image: "assets/images/keys_img.png",
|
||||||
|
title: "Аренда",
|
||||||
|
subtitle: "Огромный выбор объявлений!",
|
||||||
|
),
|
||||||
|
_otherServicesCardMaker(
|
||||||
|
image: "assets/images/cosmetics_img.png",
|
||||||
|
title: "Косметика",
|
||||||
|
subtitle: "Более 1000 товаров",
|
||||||
|
),
|
||||||
|
_otherServicesCardMaker(
|
||||||
|
image: "assets/images/products_img.png",
|
||||||
|
title: "Продукты питания",
|
||||||
|
subtitle: "Более 1000 товаров",
|
||||||
|
),
|
||||||
|
|
||||||
|
SizedBox(height: 45.h),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
controller.serviceListBanner.isEmpty ? SizedBox() : BannerView(bannerList: controller.serviceListBanner),
|
controller.serviceListBanner.isEmpty
|
||||||
|
? SizedBox()
|
||||||
|
: BannerView(
|
||||||
|
bannerList: controller.serviceListBanner,
|
||||||
|
),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text("Explore Our Services".tr, style: AppThemeData.semiBoldTextStyle(fontSize: 20, color: themeController.isDark.value ? AppThemeData.grey50 : AppThemeData.grey900)),
|
Text(
|
||||||
|
"Explore Our Services".tr,
|
||||||
|
style: AppThemeData.semiBoldTextStyle(
|
||||||
|
fontSize: 20,
|
||||||
|
color:
|
||||||
|
themeController.isDark.value
|
||||||
|
? AppThemeData.grey50
|
||||||
|
: AppThemeData.grey900,
|
||||||
|
),
|
||||||
|
),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
GridView.builder(
|
GridView.builder(
|
||||||
itemCount: controller.sectionList.length,
|
itemCount: controller.sectionList.length,
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, mainAxisSpacing: 12, crossAxisSpacing: 12, mainAxisExtent: 130),
|
gridDelegate:
|
||||||
|
const SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
|
crossAxisCount: 3,
|
||||||
|
mainAxisSpacing: 12,
|
||||||
|
crossAxisSpacing: 12,
|
||||||
|
mainAxisExtent: 130,
|
||||||
|
),
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final section = controller.sectionList[index];
|
final section = controller.sectionList[index];
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () => controller.onServiceTap(context, section),
|
onTap:
|
||||||
|
() => controller.onServiceTap(
|
||||||
|
context,
|
||||||
|
section,
|
||||||
|
),
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
gradient: LinearGradient(colors: Constant.sectionColor[index % Constant.sectionColor.length], begin: Alignment.topCenter, end: Alignment.bottomCenter),
|
gradient: LinearGradient(
|
||||||
|
colors:
|
||||||
|
Constant.sectionColor[index %
|
||||||
|
Constant.sectionColor.length],
|
||||||
|
begin: Alignment.topCenter,
|
||||||
|
end: Alignment.bottomCenter,
|
||||||
|
),
|
||||||
borderRadius: BorderRadius.circular(12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(top: 10, left: 5, right: 5),
|
padding: const EdgeInsets.only(
|
||||||
|
top: 10,
|
||||||
|
left: 5,
|
||||||
|
right: 5,
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
section.name ?? '',
|
section.name ?? '',
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: AppThemeData.semiBoldTextStyle(fontSize: 14, color: AppThemeData.grey900),
|
style:
|
||||||
|
AppThemeData.semiBoldTextStyle(
|
||||||
|
fontSize: 14,
|
||||||
|
color: AppThemeData.grey900,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
NetworkImageWidget(imageUrl: section.sectionImage ?? '', width: 80, height: 60, fit: BoxFit.contain),
|
NetworkImageWidget(
|
||||||
|
imageUrl:
|
||||||
|
section.sectionImage ?? '',
|
||||||
|
width: 80,
|
||||||
|
height: 60,
|
||||||
|
fit: BoxFit.contain,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -92,6 +190,238 @@ class ServiceListScreen extends StatelessWidget {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _otherServicesCardMaker({
|
||||||
|
required String image,
|
||||||
|
required String title,
|
||||||
|
required String subtitle,
|
||||||
|
}) {
|
||||||
|
return InkWell(
|
||||||
|
onTap: () {
|
||||||
|
log("Other Service Card Tapped: $title");
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: EdgeInsets.symmetric(horizontal: 16.r).copyWith(bottom: 10.r),
|
||||||
|
padding: EdgeInsets.only(left: 6.r, right: 12.r, top: 6.r, bottom: 6.r),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(16.r),
|
||||||
|
color: AppThemeData.grey50,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
spacing: 15.r,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Row(
|
||||||
|
spacing: 10.r,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
height: 52.r,
|
||||||
|
width: 52.r,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppThemeData.cardColor,
|
||||||
|
borderRadius: BorderRadius.circular(14.r),
|
||||||
|
),
|
||||||
|
child: Image.asset(
|
||||||
|
image,
|
||||||
|
height: 62.r,
|
||||||
|
width: 62.r,
|
||||||
|
fit: BoxFit.contain,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
spacing: 2.r,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
title,
|
||||||
|
style: TextStyle(
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
fontFamily: AppThemeData.semiBold,
|
||||||
|
fontSize: 16.sp,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
color: AppThemeData.darkGrey,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
subtitle,
|
||||||
|
style: TextStyle(
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
fontFamily: AppThemeData.semiBold,
|
||||||
|
fontSize: 13.sp,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: AppThemeData.darkGrey,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Icon(
|
||||||
|
Icons.arrow_forward_ios,
|
||||||
|
size: 18.r,
|
||||||
|
color: AppThemeData.darkGrey,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _mainCardsSection() {
|
||||||
|
return Container(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 16.r, horizontal: 16.r),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppThemeData.grey50,
|
||||||
|
borderRadius: BorderRadius.circular(16.r),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
spacing: 12.r,
|
||||||
|
children: [
|
||||||
|
// Food & Garderobe Cards
|
||||||
|
Column(
|
||||||
|
spacing: 12.r,
|
||||||
|
children: [
|
||||||
|
_mainCardsMaker(
|
||||||
|
title: "Еда и доставка",
|
||||||
|
image: "assets/images/food_img.png",
|
||||||
|
// onTap: () {
|
||||||
|
// log("Main Card Tapped");
|
||||||
|
onTap: () async {},
|
||||||
|
// },
|
||||||
|
),
|
||||||
|
_mainCardsMaker(
|
||||||
|
title: "Обновить гардероб",
|
||||||
|
image: "assets/images/garderob_img.png",
|
||||||
|
onTap: () {
|
||||||
|
log("Main Card Tapped");
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
// Taxi Card
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
log("Taxi Card Tapped");
|
||||||
|
// push(context, DashBoardCabService(user: null));
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 192.h,
|
||||||
|
width: 166.w,
|
||||||
|
padding: EdgeInsets.only(top: 12.r, right: 12.r),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppThemeData.yellow,
|
||||||
|
borderRadius: BorderRadius.circular(16.r),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.only(left: 12.r),
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
maxLines: 2,
|
||||||
|
"Позвать такси",
|
||||||
|
style: TextStyle(
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
fontFamily: AppThemeData.bold,
|
||||||
|
fontSize: 18.sp,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
color: AppThemeData.grey50,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 36.r,
|
||||||
|
width: 36.r,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppThemeData.grey50.withValues(alpha: 0.3),
|
||||||
|
borderRadius: BorderRadius.circular(8.r),
|
||||||
|
),
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_outward_rounded,
|
||||||
|
size: 20.r,
|
||||||
|
color: AppThemeData.grey50,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
"assets/images/taxi_img.png",
|
||||||
|
height: 119.r,
|
||||||
|
width: 156.r,
|
||||||
|
fit: BoxFit.contain,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _mainCardsMaker({
|
||||||
|
required String title,
|
||||||
|
required String image,
|
||||||
|
required VoidCallback onTap,
|
||||||
|
}) {
|
||||||
|
return InkWell(
|
||||||
|
onTap: onTap,
|
||||||
|
child: Container(
|
||||||
|
height: 93.h,
|
||||||
|
width: 165.w,
|
||||||
|
padding: EdgeInsets.only(left: 12.r),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppThemeData.cardColor,
|
||||||
|
borderRadius: BorderRadius.circular(16.r),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.only(bottom: 12.r, top: 12.r),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
maxLines: 2,
|
||||||
|
title,
|
||||||
|
style: TextStyle(
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
fontFamily: AppThemeData.bold,
|
||||||
|
fontSize: 14.sp,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
color: AppThemeData.darkGrey,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Icon(
|
||||||
|
Icons.arrow_outward_rounded,
|
||||||
|
size: 24.r,
|
||||||
|
color: AppThemeData.darkGrey,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Image.asset(image, height: 71.r, width: 71.r, fit: BoxFit.contain),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class BannerView extends StatelessWidget {
|
class BannerView extends StatelessWidget {
|
||||||
@@ -132,7 +462,13 @@ class BannerView extends StatelessWidget {
|
|||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
return ClipRRect(
|
return ClipRRect(
|
||||||
borderRadius: BorderRadius.circular(12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
child: SizedBox(width: MediaQuery.of(context).size.width * 0.8, child: NetworkImageWidget(imageUrl: bannerList[index].toString(), fit: BoxFit.fill)),
|
child: SizedBox(
|
||||||
|
width: MediaQuery.of(context).size.width * 0.8,
|
||||||
|
child: NetworkImageWidget(
|
||||||
|
imageUrl: bannerList[index].toString(),
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -142,7 +478,18 @@ class BannerView extends StatelessWidget {
|
|||||||
return Row(
|
return Row(
|
||||||
children: List.generate(bannerList.length, (index) {
|
children: List.generate(bannerList.length, (index) {
|
||||||
final isSelected = currentPage.value == index;
|
final isSelected = currentPage.value == index;
|
||||||
return Expanded(child: Container(height: 4, decoration: BoxDecoration(color: isSelected ? AppThemeData.grey300 : AppThemeData.grey100, borderRadius: BorderRadius.circular(5))));
|
return Expanded(
|
||||||
|
child: Container(
|
||||||
|
height: 4,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color:
|
||||||
|
isSelected
|
||||||
|
? AppThemeData.grey300
|
||||||
|
: AppThemeData.grey100,
|
||||||
|
borderRadius: BorderRadius.circular(5),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -199,6 +199,12 @@ class AppThemeData {
|
|||||||
static const Color warningDark500 = Color(0xFFFFE9AB);
|
static const Color warningDark500 = Color(0xFFFFE9AB);
|
||||||
static const Color warningDark600 = Color(0xFFFFF8E5);
|
static const Color warningDark600 = Color(0xFFFFF8E5);
|
||||||
|
|
||||||
|
static const Color yellow = Color(0xFFE5AE3E);
|
||||||
|
static const Color cardColor = Color(0xFFEEEFF2);
|
||||||
|
static const Color darkGrey = Color(0xFF1F2937);
|
||||||
|
static const Color mainColor = Color(0xFFFF6839);
|
||||||
|
static const lightGrey = Color(0xFF8E8E93);
|
||||||
|
|
||||||
static const Color primary50 = Color(0xFFFFEBE5);
|
static const Color primary50 = Color(0xFFFFEBE5);
|
||||||
static const Color primary100 = Color(0xFFFFC0AB);
|
static const Color primary100 = Color(0xFFFFC0AB);
|
||||||
static const Color primary200 = Color(0xFFFF9472);
|
static const Color primary200 = Color(0xFFFF9472);
|
||||||
|
|||||||
@@ -678,6 +678,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.1"
|
version: "4.0.1"
|
||||||
|
flutter_screenutil:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_screenutil
|
||||||
|
sha256: "8239210dd68bee6b0577aa4a090890342d04a136ce1c81f98ee513fc0ce891de"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.9.3"
|
||||||
flutter_spinkit:
|
flutter_spinkit:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ dependencies:
|
|||||||
intl: ^0.20.2
|
intl: ^0.20.2
|
||||||
uuid: ^4.5.2
|
uuid: ^4.5.2
|
||||||
flutter_google_places_hoc081098: ^2.0.0
|
flutter_google_places_hoc081098: ^2.0.0
|
||||||
|
flutter_screenutil: ^5.9.3
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
webview_flutter: ^4.9.0
|
webview_flutter: ^4.9.0
|
||||||
|
|||||||