diff --git a/android/app/build.gradle b/android/app/build.gradle
index 09fd0fb..6ac2704 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -44,7 +44,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.car_customer_app"
- minSdkVersion 16
+ minSdkVersion 20
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
diff --git a/assets/icons/anouncement_icon.svg b/assets/icons/anouncement_icon.svg
new file mode 100644
index 0000000..dad55fd
--- /dev/null
+++ b/assets/icons/anouncement_icon.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/appointments_icon.svg b/assets/icons/appointments_icon.svg
new file mode 100644
index 0000000..ebf91e9
--- /dev/null
+++ b/assets/icons/appointments_icon.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/close_icon.svg b/assets/icons/close_icon.svg
new file mode 100644
index 0000000..0230942
--- /dev/null
+++ b/assets/icons/close_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/drawer_icon.svg b/assets/icons/drawer_icon.svg
new file mode 100644
index 0000000..363d413
--- /dev/null
+++ b/assets/icons/drawer_icon.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/home_icon.svg b/assets/icons/home_icon.svg
new file mode 100644
index 0000000..758dd1b
--- /dev/null
+++ b/assets/icons/home_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/mini_clock.svg b/assets/icons/mini_clock.svg
new file mode 100644
index 0000000..d59971c
--- /dev/null
+++ b/assets/icons/mini_clock.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/next_icon.svg b/assets/icons/next_icon.svg
new file mode 100644
index 0000000..0a3dc04
--- /dev/null
+++ b/assets/icons/next_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/notification_bell.svg b/assets/icons/notification_bell.svg
new file mode 100644
index 0000000..dd32254
--- /dev/null
+++ b/assets/icons/notification_bell.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/providers_icon.svg b/assets/icons/providers_icon.svg
new file mode 100644
index 0000000..f4cc334
--- /dev/null
+++ b/assets/icons/providers_icon.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/icons/settings_icon.svg b/assets/icons/settings_icon.svg
new file mode 100644
index 0000000..6fe8da9
--- /dev/null
+++ b/assets/icons/settings_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/config/dependencies.dart b/lib/config/customer_dependencies.dart
similarity index 81%
rename from lib/config/dependencies.dart
rename to lib/config/customer_dependencies.dart
index 7fa12dd..d74aa71 100644
--- a/lib/config/dependencies.dart
+++ b/lib/config/customer_dependencies.dart
@@ -1,7 +1,9 @@
import 'package:mc_common_app/config/dependencies.dart';
-class LocalDependencies {
+class CustomerDependencies {
static void addDependencies() {
AppDependencies.addDependencies();
+
+
}
}
diff --git a/lib/config/customer_routes.dart b/lib/config/customer_routes.dart
new file mode 100644
index 0000000..d6763e9
--- /dev/null
+++ b/lib/config/customer_routes.dart
@@ -0,0 +1,9 @@
+import 'package:car_customer_app/views/dashboard/dashboard_page.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:mc_common_app/config/routes.dart';
+
+class CustomerAppRoutes {
+ static final Map routes = {
+ AppRoutes.dashboard: (context) => DashboardPage(),
+ };
+}
diff --git a/lib/main.dart b/lib/main.dart
index f97caa2..d1cbb8b 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,7 +1,10 @@
-import 'package:car_customer_app/config/dependencies.dart';
+import 'package:car_customer_app/config/customer_dependencies.dart';
+import 'package:car_customer_app/config/customer_routes.dart';
+import 'package:car_customer_app/view_models/dashboard_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state_cm.dart';
+import 'package:mc_common_app/services/services.dart';
import 'package:mc_common_app/theme/app_theme.dart';
import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/config/routes.dart';
@@ -17,8 +20,9 @@ import 'generated/codegen_loader.g.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
- LocalDependencies.addDependencies();
+ CustomerDependencies.addDependencies();
await EasyLocalization.ensureInitialized();
+ CustomerAppRoutes.routes.addAll(AppRoutes.routes);
runApp(
EasyLocalization(
supportedLocales: const [Locale('ar', 'SA'), Locale('en', 'US')],
@@ -31,12 +35,12 @@ Future main() async {
ChangeNotifierProvider(
create: (_) => BaseVM(),
),
- // ChangeNotifierProvider(
- // create: (_) => DashboardVM(
- // userRepo: injector.get(),
- // commonServices: injector.get(),
- // ),
- // ),
+ ChangeNotifierProvider(
+ create: (_) => DashboardVM(
+ userRepo: injector.get(),
+ commonServices: injector.get(),
+ ),
+ ),
ChangeNotifierProvider(
create: (_) => UserVM(userRepo: injector.get()),
),
@@ -72,7 +76,7 @@ class MyApp extends StatelessWidget {
supportedLocales: context.supportedLocales,
locale: context.locale,
initialRoute: AppRoutes.initialRoute,
- routes: AppRoutes.routes,
+ routes: CustomerAppRoutes.routes,
);
},
);
diff --git a/lib/views/dashboard/dashboard_page.dart b/lib/views/dashboard/dashboard_page.dart
index a1eb041..9e54184 100644
--- a/lib/views/dashboard/dashboard_page.dart
+++ b/lib/views/dashboard/dashboard_page.dart
@@ -3,6 +3,7 @@ import 'package:car_customer_app/views/dashboard/fragments/home_fragment.dart';
import 'package:car_customer_app/views/dashboard/widgets/bottom_nav_bar.dart';
import 'package:car_customer_app/views/dashboard/widgets/drawer_widget.dart';
import 'package:flutter/material.dart';
+import 'package:mc_common_app/widgets/app_bar.dart';
import 'package:provider/provider.dart';
class DashboardPage extends StatefulWidget {
diff --git a/lib/views/dashboard/fragments/home_fragment.dart b/lib/views/dashboard/fragments/home_fragment.dart
index 78ece26..4415b19 100644
--- a/lib/views/dashboard/fragments/home_fragment.dart
+++ b/lib/views/dashboard/fragments/home_fragment.dart
@@ -4,6 +4,7 @@ import 'package:car_customer_app/views/dashboard/widgets/my_branches_widget.dart
import 'package:car_customer_app/views/dashboard/widgets/view_all_widget.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
+import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
class HomeFragment extends StatelessWidget {
const HomeFragment({Key? key}) : super(key: key);
@@ -15,22 +16,22 @@ class HomeFragment extends StatelessWidget {
height: double.infinity,
child: SingleChildScrollView(
child: Padding(
- padding: const EdgeInsets.only(top: 8, left: 21, right: 21, bottom: 21),
+ padding: const EdgeInsets.only(top: 8),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
- ViewAllWidget(title: "Upcoming Appointment".toUpperCase(), subTitle: "View All"),
+ ViewAllWidget(title: "Upcoming Appointment".toUpperCase(), subTitle: "View All").horPaddingMain(),
const AppointmentSliderWidget(),
- 20.height,
- ViewAllWidget(title: "My Recent Service Providers".toUpperCase(), subTitle: "View All"),
- const ServiceProviderWidget(),
- 20.height,
- ViewAllWidget(title: "My Active Ads".toUpperCase(), subTitle: "View All"),
+ 7.height,
+ ViewAllWidget(title: "My Recent Service Providers".toUpperCase(), subTitle: "View All").horPaddingMain(),
+ const ServiceProviderWidget().horPaddingMain(),
+ 15.height,
+ ViewAllWidget(title: "My Active Ads".toUpperCase(), subTitle: "View All").horPaddingMain(),
// todo: we will replace this count with the sublist of ads
- const AdWidget(count: 1),
+ const AdWidget(count: 1).horPaddingMain(),
20.height,
- ViewAllWidget(title: "My Recommended Ads".toUpperCase(), subTitle: "View All"),
- const AdWidget(count: 2),
+ ViewAllWidget(title: "My Recommended Ads".toUpperCase(), subTitle: "View All").horPaddingMain(),
+ const AdWidget(count: 2).horPaddingMain(),
],
),
),
diff --git a/lib/views/dashboard/widgets/appointment_slider_widget.dart b/lib/views/dashboard/widgets/appointment_slider_widget.dart
index 3e3b3ec..0af7bed 100644
--- a/lib/views/dashboard/widgets/appointment_slider_widget.dart
+++ b/lib/views/dashboard/widgets/appointment_slider_widget.dart
@@ -1,4 +1,4 @@
-
+import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
@@ -8,67 +8,153 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.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".toText(
- color: MyColors.lightTextColor,
- isBold: true,
- ),
- "Abdullah Alhbas".toText(
- isBold: true,
- fontSize: 14,
- ),
- Row(
- children: [
- "Appt. On:".toText(
- color: MyColors.lightTextColor,
- ),
- 2.width,
- "19-Mar-2023 11:48 AM".toText(),
- ],
+ Widget buildAppointmentContainerForProvider() {
+ return Container(
+ margin: EdgeInsets.only(bottom: 21, left: 21, right: 21, top: 7),
+ child: Column(
+ children: [
+ Row(
+ children: [
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ "Olaya Brach".toText(
+ color: MyColors.lightTextColor,
+ isBold: true,
+ ),
+ "Abdullah Alhbas".toText(
+ isBold: true,
+ fontSize: 14,
+ ),
+ Row(
+ children: [
+ "Appt. On:".toText(
+ color: MyColors.lightTextColor,
+ ),
+ 2.width,
+ "19-Mar-2023 11:48 AM".toText(),
+ ],
+ ),
+ ],
+ ),
+ ),
+ "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"),
+ ],
+ ),
+ ),
+ const Icon(
+ Icons.arrow_forward,
+ ),
+ ],
+ ),
+ ],
+ ).toWhiteContainer(width: double.infinity, allPading: 12),
+ );
+ }
+
+ Widget buildAppointmentSliderForConsumer() {
+ return Container(
+ margin: EdgeInsets.only(bottom: 21, left: 21, right: 21, top: 7),
+ child: Column(
+ children: [
+ Row(
+ children: [
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ "Olaya Brach".toText(
+ color: MyColors.lightTextColor,
+ isBold: true,
+ ),
+ "Abdullah Alhbas".toText(
+ isBold: true,
+ fontSize: 14,
+ ),
+ Row(
+ children: [
+ "Appt. On:".toText(
+ color: MyColors.lightTextColor,
+ ),
+ 2.width,
+ "19-Mar-2023 11:48 AM".toText(),
+ ],
+ ),
+ ],
+ ),
),
- ),
- "1+ Requests".toText(fontSize: 10).toContainer(
- borderRadius: 15,
- backgroundColor: MyColors.lightGreyEAColor,
- padding: const EdgeInsets.symmetric(
- vertical: 6,
- horizontal: 12,
+ "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"),
+ ],
),
- ],
- ),
- 8.height,
- Row(
- crossAxisAlignment: CrossAxisAlignment.end,
- children: [
- Expanded(
- child: Column(
- children: [
- showServices("Maintenance"),
- 2.height,
- showServices("Accessories and Modification"),
- ],
),
- ),
- const Icon(
- Icons.arrow_forward,
- ),
- ],
+ const Icon(
+ Icons.arrow_forward,
+ ),
+ ],
+ ),
+ ],
+ ).toWhiteContainer(width: double.infinity, allPading: 12),
+ );
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return CarouselSlider.builder(
+ options: CarouselOptions(
+ height: 160,
+ viewportFraction: 1.0,
+ enlargeCenterPage: true,
+ enableInfiniteScroll: false,
+
+ // onPageChanged: (index) {
+ // setState(() {
+ // _current = index;
+ // });
+ // },
),
- ],
- ).toWhiteContainer(width: double.infinity, allPading: 0);
+ itemCount: 10,
+ itemBuilder: (BuildContext context, int itemIndex, int pageViewIndex) => buildAppointmentSliderForConsumer());
}
Widget showServices(String title) {
diff --git a/lib/views/dashboard/widgets/my_branches_widget.dart b/lib/views/dashboard/widgets/my_branches_widget.dart
index bb291b2..0f250fe 100644
--- a/lib/views/dashboard/widgets/my_branches_widget.dart
+++ b/lib/views/dashboard/widgets/my_branches_widget.dart
@@ -11,7 +11,7 @@ class ServiceProviderWidget extends StatelessWidget {
Widget build(BuildContext context) {
return SizedBox(
width: double.infinity,
- height: 150,
+ height: 140,
child: ListView.builder(
itemCount: 9,
scrollDirection: Axis.horizontal,
diff --git a/lib/views/dashboard/widgets/view_all_widget.dart b/lib/views/dashboard/widgets/view_all_widget.dart
index 5724eb8..b46d67c 100644
--- a/lib/views/dashboard/widgets/view_all_widget.dart
+++ b/lib/views/dashboard/widgets/view_all_widget.dart
@@ -13,7 +13,7 @@ class ViewAllWidget extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
width: double.infinity,
- padding: const EdgeInsets.only(bottom: 10),
+ padding: const EdgeInsets.only(bottom: 7),
child: Row(
children: [
Expanded(child: title.toText(isBold: true, fontSize: 18)),
diff --git a/pubspec.yaml b/pubspec.yaml
index 340fa59..50481cb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -36,6 +36,8 @@ dependencies:
cupertino_icons: ^1.0.2
flutter_password_strength: ^0.1.6
+ carousel_slider: ^4.2.1
+
mc_common_app:
path: D:/Development/car_common_app