Merge branch 'master' of http://34.17.52.79/Haroon6138/car_customer_app into faiz_development

 Conflicts:
	lib/config/customer_dependencies.dart
pull/3/head
FaizHashmiCS22 3 years ago
commit 86c9419484

@ -1,7 +1,10 @@
import 'package:car_customer_app/repositories/provider_repo.dart';
import 'package:mc_common_app/config/dependencies.dart';
class CustomerDependencies {
static void addDependencies() {
AppDependencies.addDependencies();
injector.registerSingleton<ProviderRepo>(() => ProviderRepoImp());
}
}

@ -4,10 +4,13 @@ import 'package:car_customer_app/views/appointments/book_appointments_item_view.
import 'package:car_customer_app/views/appointments/pick_items_view.dart';
import 'package:car_customer_app/views/appointments/review_appointment_view.dart';
import 'package:car_customer_app/views/dashboard/dashboard_page.dart';
import 'package:car_customer_app/views/provider/branch_detail_page.dart';
import 'package:car_customer_app/views/provider/provider_profile_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart';
import 'package:mc_common_app/models/services/branch_model.dart';
import 'package:mc_common_app/views/advertisement/ads_detail_view.dart';
import 'package:mc_common_app/views/advertisement/create_ad_view.dart';
import 'package:mc_common_app/views/payments/payment_methods_view.dart';
@ -23,5 +26,7 @@ class CustomerAppRoutes {
AppRoutes.bookAppointmentsItemView: (context) => BookAppointmentsItemView(),
AppRoutes.reviewAppointmentView: (context) => ReviewAppointment(),
AppRoutes.paymentMethodsView: (context) => PaymentMethodsView(),
AppRoutes.branchDetailPage: (context) => BranchDetailPage(branchModel: ModalRoute.of(context)!.settings.arguments as BranchModel),
AppRoutes.providerProfilePage: (context) => ProviderProfilePage(providerId: ModalRoute.of(context)!.settings.arguments as int),
};
}

@ -1,5 +1,6 @@
import 'package:car_customer_app/config/customer_dependencies.dart';
import 'package:car_customer_app/config/customer_routes.dart';
import 'package:car_customer_app/repositories/provider_repo.dart';
import 'package:car_customer_app/view_models/appointments_view_model.dart';
import 'package:car_customer_app/view_models/dashboard_view_model.dart';
import 'package:car_customer_app/view_models/providers_view_model.dart';
@ -58,6 +59,7 @@ Future<void> main() async {
create: (_) => ProvidersVM(
commonServices: injector.get<CommonAppServices>(),
commonRepo: injector.get<CommonRepo>(),
providerRepo: injector.get<ProviderRepo>(),
),
),
ChangeNotifierProvider<AppointmentsVM>(

@ -0,0 +1,51 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:mc_common_app/models/model/provider_model.dart';
import 'package:mc_common_app/models/services/item_model.dart';
import 'package:mc_common_app/models/services/near_branch_model.dart';
import 'package:http/http.dart' as http;
import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependencies.dart';
import 'package:flutter/cupertino.dart';
abstract class ProviderRepo {
Future<NearBrancheModel> getAllNearBranchAndServices();
Future<ItemModel> getServiceItems(int serviceId);
Future<ProviderModel> getBranchAndServices(int providerId);
}
class ProviderRepoImp implements ProviderRepo {
@override
Future<NearBrancheModel> getAllNearBranchAndServices() async {
// var postParams = {"serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => NearBrancheModel.fromJson(json), ApiConsts.GetAllNearBranches, token: t);
}
@override
Future<ItemModel> getServiceItems(int serviceId) async {
var queryParameters = {
"ServiceProviderServiceID": serviceId.toString(),
};
String? token = AppState().getUser.data?.accessToken;
debugPrint(token);
return await injector
.get<ApiClient>()
.getJsonForObject((json) => ItemModel.fromJson(json), ApiConsts.getServiceItems, queryParameters: queryParameters, token: AppState().getUser.data!.accessToken ?? "");
}
@override
Future<ProviderModel> getBranchAndServices(int providerId) async {
var postParams = {"serviceProviderID": providerId.toString()};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => ProviderModel.fromJson(json), ApiConsts.BranchesAndServices, queryParameters: postParams, token: t);
}
}

@ -1,15 +1,25 @@
import 'package:mc_common_app/models/model/provider_model.dart';
import 'package:mc_common_app/models/services/item_model.dart';
import 'package:mc_common_app/models/services/near_branch_model.dart';
import 'package:car_customer_app/repositories/provider_repo.dart';
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/models/widgets_models.dart';
import 'package:mc_common_app/repositories/common_repo.dart';
import 'package:mc_common_app/services/common_services.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/view_models/base_view_model.dart';
class ProvidersVM extends ChangeNotifier {
class ProvidersVM extends BaseVM {
final CommonRepo commonRepo;
final CommonAppServices commonServices;
final ProviderRepo providerRepo;
ProvidersVM({required this.commonServices, required this.commonRepo});
ProvidersVM({required this.commonServices, required this.commonRepo, required this.providerRepo});
List<FilterListModel> providersFilterOptions = [];
NearBrancheModel? branches;
ItemModel? serviceItems;
ProviderModel? providerModel;
populateProvidersFilterList() {
providersFilterOptions.clear();
@ -32,4 +42,26 @@ class ProvidersVM extends ChangeNotifier {
providersFilterOptions[index].isSelected = true;
notifyListeners();
}
//Create new branch
getAllNearBranches({bool isNeedToRebuild = false}) async {
//TODO: needs to lat,long into API
branches = null;
if (isNeedToRebuild) setState(ViewState.busy);
branches = await providerRepo.getAllNearBranchAndServices();
setState(ViewState.idle);
}
Future<ItemModel?> getServiceItems(int serviceId) async {
serviceItems = null;
serviceItems = await providerRepo.getServiceItems(serviceId);
setState(ViewState.idle);
return serviceItems;
}
getBranchAndServices(int providerId) async {
providerModel = null;
providerModel = await providerRepo.getBranchAndServices(providerId);
setState(ViewState.idle);
}
}

@ -42,7 +42,7 @@ class _BookProviderAppViewState extends State<BookProviderAppView> {
onCardTapped: () {},
providerImageUrl: MyAssets.bnCar,
providerLocation: "3km",
providerName: "Al Ahmed Maintenance",
title: "Al Ahmed Maintenance",
providerRatings: "4.9",
),
12.height,
@ -90,19 +90,19 @@ class ServicesSelectionSection extends StatelessWidget {
"Select services you want".toText(fontSize: 18, isBold: true),
8.height,
DropdownField(
(DropValue value) {},
(DropValue value) {},
list: dropList,
hint: "Select service type",
),
8.height,
DropdownField(
(DropValue value) {},
(DropValue value) {},
list: dropList,
hint: "Select service type",
),
8.height,
DropdownField(
(DropValue value) {},
(DropValue value) {},
list: dropList,
hint: "Select service type",
),
@ -110,7 +110,7 @@ class ServicesSelectionSection extends StatelessWidget {
"Select date and time".toText(fontSize: 18, isBold: true),
8.height,
DropdownField(
(DropValue value) {},
(DropValue value) {},
list: dropList,
hint: "Select service type",
),

@ -17,6 +17,8 @@ import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
import 'fragments/branches_fragment.dart';
class DashboardPage extends StatefulWidget {
const DashboardPage({Key? key}) : super(key: key);
@ -36,6 +38,7 @@ class _DashboardPageState extends State<DashboardPage> {
context.read<AppointmentsVM>().populateAppointmentsFilterList();
context.read<ProvidersVM>().populateProvidersFilterList();
context.read<AdVM>().populateAdsFilterList();
context.read<ProvidersVM>().getAllNearBranches();
_onRefresh();
});
}
@ -57,7 +60,7 @@ class _DashboardPageState extends State<DashboardPage> {
fetchUsername() async {}
List<Widget> fragments = [
const ProvidersFragment(),
const BranchesFragment(),
const AppointmentsFragment(),
const HomeFragment(),
AdsFragment(),
@ -66,7 +69,7 @@ class _DashboardPageState extends State<DashboardPage> {
String getPageTitle(int index) {
if (index == 0) {
return "Providers";
return "Branchs";
}
if (index == 1) {
return "Appointments";

@ -0,0 +1,86 @@
import 'package:car_customer_app/view_models/providers_view_model.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/widgets/common_widgets/categories_list.dart';
import 'package:mc_common_app/widgets/common_widgets/provider_details_card.dart';
import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart';
class BranchesFragment extends StatelessWidget {
const BranchesFragment({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
color: MyColors.backgroundColor,
width: double.infinity,
height: double.infinity,
child: Consumer(
builder: (BuildContext context, ProvidersVM providersVM, Widget? child) {
return Column(
children: [
16.height,
FiltersList(
filterList: providersVM.providersFilterOptions,
onFilterTapped: (index, selectedFilterId) => providersVM.applyFilterOnProviders(index: index),
),
16.height,
Expanded(
child: RefreshIndicator(
onRefresh: () async {
context.read<ProvidersVM>().getAllNearBranches(isNeedToRebuild: true);
},
child: SingleChildScrollView(
child: Container(
width: double.infinity,
height: MediaQuery.of(context).size.height / 1.37,
child: Consumer<ProvidersVM>(
builder: (context, model, _) {
if (model.state == ViewState.busy) {
return const Center(child: CircularProgressIndicator());
} else {
return model.branches?.data == null
? const Center(child: Text("No Branch Found"))
: model.branches!.data!.isEmpty
? Center(child: Text(LocaleKeys.no_branch.tr()))
: ListView.separated(
itemBuilder: (context, index) {
return ProviderDetailsCard(
onCardTapped: () {
navigateWithName(context, AppRoutes.branchDetailPage, arguments: model.branches!.data![index]);
},
providerImageUrl: MyAssets.bnCar,
title: model.branches!.data![index].branchName ?? "",
providerLocation: model.branches!.data![index].distanceKm.toString() + " KM",
providerName: model.branches!.data![index].serviceProviderName ?? "",
providerRatings: "4.9",
items: model.branches!.data![index].branchServices,
);
},
separatorBuilder: (context, index) {
return 12.height;
},
itemCount: model.branches!.data!.length,
padding: const EdgeInsets.all(12),
);
}
},
),
),
),
),
),
],
);
},
),
);
}
}

@ -43,6 +43,7 @@ class ProvidersFragment extends StatelessWidget {
navigateWithName(context, AppRoutes.bookAppointmenServicesView);
},
providerImageUrl: MyAssets.bnCar,
title:"",
providerLocation: " 3km",
providerName: "Al Ahmed Maintenance",
providerRatings: "4.9",

@ -17,9 +17,9 @@ class CustomBottomNavbar extends StatelessWidget {
return BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: SvgPicture.asset(MyAssets.providersIcon).paddingAll(5),
activeIcon: SvgPicture.asset(MyAssets.providersIcon, color: MyColors.darkIconColor).paddingAll(5),
label: LocaleKeys.providers.tr(),
icon: SvgPicture.asset(MyAssets.branchesIcon).paddingAll(5),
activeIcon: SvgPicture.asset(MyAssets.branchesIcon, color: MyColors.darkIconColor).paddingAll(5),
label: LocaleKeys.branches.tr(),
),
BottomNavigationBarItem(
icon: SvgPicture.asset(MyAssets.appointmentsIcon).paddingAll(5),

@ -0,0 +1,225 @@
import 'package:car_customer_app/views/provider/sheet/items_list_sheet.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/services/branch_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:mc_common_app/models/services/service_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/widgets/bottom_sheet.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
class BranchDetailPage extends StatefulWidget {
BranchModel branchModel;
BranchDetailPage({required this.branchModel});
@override
State<BranchDetailPage> createState() => _BranchDetailPageState();
}
class _BranchDetailPageState extends State<BranchDetailPage> {
@override
void initState() {
// TODO: implement initState
super.initState();
if (widget.branchModel.branchServices!.length > 0) widget.branchModel.branchServices?.first.isExpanded = true;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
title: "Branch Detail",
),
body: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Container(
width: double.infinity,
padding: EdgeInsets.all(21),
child: Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.asset(MyAssets.bnCar),
12.height,
"${widget.branchModel.branchName} | ${widget.branchModel.serviceProviderName}".toString().toText(
fontSize: 16,
isBold: true,
),
Row(
children: [
(LocaleKeys.location.tr() + ":").toText(color: MyColors.lightTextColor, fontSize: 12),
4.width,
(widget.branchModel.distanceKm.toString() + " km").toText(fontSize: 12, isBold: true),
],
),
Row(
children: [
("Time" + ":").toText(color: MyColors.lightTextColor, fontSize: 12),
4.width,
"${widget.branchModel.openTime} - ${widget.branchModel.closeTime}".toText(fontSize: 12, isBold: true),
],
),
2.height,
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
//TODO: Needs to implement url launcher
"Open Map Location".toText(
fontSize: 12,
isBold: true,
color: MyColors.primaryColor,
isUnderLine: true,
),
4.width,
Image.asset(
MyAssets.icRightUpPng,
height: 6,
width: 6,
color: MyColors.primaryColor,
),
],
)
.padding(
EdgeInsets.symmetric(vertical: 6, horizontal: 2),
)
.onPress(
() {},
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
"Provider Profile".toText(
fontSize: 12,
isBold: true,
color: MyColors.primaryColor,
isUnderLine: true,
),
2.width,
Icon(
Icons.arrow_forward,
size: 12,
color: MyColors.primaryColor,
),
],
)
.padding(
EdgeInsets.symmetric(vertical: 6, horizontal: 2),
)
.onPress(
() {
navigateWithName(context, AppRoutes.providerProfilePage, arguments: widget.branchModel.serviceProviderId);
},
),
],
),
20.height,
"Services Offer".toText(
fontSize: 16,
color: MyColors.lightTextColor,
isBold: true,
),
if (widget.branchModel.branchServices!.length == 0) "No Services Available".toText(fontSize: 12, isBold: true),
showServicesList(),
],
).toWhiteContainer(
width: double.infinity,
allPading: 12,
),
],
),
),
),
),
ShowFillButton(
title: "Book Appointment",
maxWidth: double.infinity,
margin: EdgeInsets.all(21),
onPressed: () {},
).toContainer(
paddingAll: 0,
backgroundColor: Colors.white,
),
],
),
);
}
Widget showServicesList() {
return ListView.separated(
itemBuilder: (context, index) {
return ExpansionTile(
tilePadding: EdgeInsets.zero,
title: (widget.branchModel.branchServices![index].serviceDescription ?? "").toText(
fontSize: 16,
isBold: true,
),
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
showItem("Allowing home service:", (widget.branchModel.branchServices![index].isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("Home service range", widget.branchModel.branchServices![index].customerLocationRange.toString() + "KM"),
showItem("Charges per KM", widget.branchModel.branchServices![index].customerLocationRange.toString() + "SAR"),
8.height,
(widget.branchModel.branchServices![index].itemsCount.toString() + "+ items").toText(
fontSize: 12,
isBold: true,
color: MyColors.primaryColor,
isUnderLine: true,
),
20.height,
],
).onPress(() {
showMyBottomSheet(context, child: ItemsListSheet(widget.branchModel.branchServices![index].providerBranchServiceId ?? 0));
}),
],
onExpansionChanged: (value) {
setState(() {
widget.branchModel.branchServices![index].isExpanded = value;
});
},
backgroundColor: Colors.transparent,
collapsedBackgroundColor: Colors.transparent,
initiallyExpanded: widget.branchModel.branchServices![index].isExpanded,
trailing: widget.branchModel.branchServices![index].isExpanded ? Icon(Icons.keyboard_arrow_up) : Icon(Icons.keyboard_arrow_down),
);
},
separatorBuilder: (context, index) {
return Divider(
height: 1,
);
},
itemCount: widget.branchModel.branchServices!.length,
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
);
}
Widget showItem(String item, String value, {Color valueColor = Colors.black}) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
item.toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
4.width,
value.toText(fontSize: 12, color: valueColor, isBold: true),
],
);
}
}

@ -0,0 +1,80 @@
import 'package:car_customer_app/view_models/providers_view_model.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/empty_widget.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
class ProviderProfilePage extends StatefulWidget {
int providerId;
ProviderProfilePage({required this.providerId});
@override
State<ProviderProfilePage> createState() => _ProviderProfilePageState();
}
class _ProviderProfilePageState extends State<ProviderProfilePage> {
@override
void initState() {
super.initState();
context.read<ProvidersVM>().getBranchAndServices(widget.providerId ?? 0);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
title: "Provider Details",
),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(21),
child: Consumer<ProvidersVM>(
builder: (context, model, _) {
return model.providerModel == null
? const Center(child: CircularProgressIndicator())
: model.providerModel!.data == null
? const EmptyWidget()
: Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
//TODO: company logo/banner not added form provider app yet
Image.asset(MyAssets.bnCar),
12.height,
model.providerModel!.data!.companyName.toString().toText(
fontSize: 16,
isBold: true,
),
Row(
children: [
("Mowater Member Since:").toText(color: MyColors.lightTextColor, fontSize: 12),
4.width,
//TODO: date is missing from API side
"2023".toText(fontSize: 12, isBold: true),
],
),
4.height,
//TODO: company description not added form provider app yet
// model.providerModel!.data!.companyDescription!.toText(color: MyColors.lightTextColor, fontSize: 12),
"Some description about the provider and their years of experience and their reputation".toText(color: MyColors.lightTextColor, fontSize: 12),
],
).toWhiteContainer(
width: double.infinity,
allPading: 12,
),
],
);
},
),
),
);
}
}

@ -0,0 +1,112 @@
import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/widgets/empty_widget.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
import '../../../view_models/providers_view_model.dart';
class ItemsListSheet extends StatefulWidget {
int serviceId;
ItemsListSheet(this.serviceId);
@override
State<ItemsListSheet> createState() => _ItemsListSheetState();
}
class _ItemsListSheetState extends State<ItemsListSheet> {
@override
void initState() {
super.initState();
context.read<ProvidersVM>().getServiceItems(widget.serviceId ?? 0);
}
@override
Widget build(BuildContext context) {
return SizedBox(
height: MediaQuery.of(context).size.height / 1.2,
child: Consumer<ProvidersVM>(
builder: (context, model, _) {
return model.serviceItems == null
? const Center(child: CircularProgressIndicator())
: model.serviceItems!.data!.isEmpty
? const EmptyWidget()
: ListView.separated(
itemBuilder: (BuildContext context, int index) {
return SizedBox(
width: double.infinity,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
model.serviceItems!.data![index].name.toString().toText(fontSize: 16, isBold: true),
4.height,
showItem("Available for appointment:", (model.serviceItems!.data![index].isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("Allowing Workshop service:", (model.serviceItems!.data![index].isAppointmentCompanyLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("Allowing home service:", (model.serviceItems!.data![index].isAppointmentCustomerLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
12.height,
"Service Amount".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
model.serviceItems!.data![index].price!.toText(fontSize: 22, isBold: true),
2.width,
Padding(
padding: const EdgeInsets.only(bottom: 4),
child: "SAR".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
),
],
),
],
),
),
// Padding(
// padding: const EdgeInsets.all(4.0),
// child: SvgPicture.asset(
// MyAssets.icEdit,
// width: 16,
// height: 16,
// ),
// )
],
),
).toWhiteContainer(
width: double.infinity,
allPading: 12,
);
},
separatorBuilder: (BuildContext context, int index) {
return 12.height;
},
padding: const EdgeInsets.all(20),
itemCount: model.serviceItems!.data!.length,
);
},
),
);
}
Widget showItem(String item, String value, {Color valueColor = Colors.black}) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
item.toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
4.width,
value.toText(fontSize: 12, color: valueColor, isBold: true),
],
);
}
}

@ -36,7 +36,7 @@ dependencies:
cupertino_icons: ^1.0.2
mc_common_app:
path: D:/Development/car_common_app
path: C:/Users/mirza.shafique/AndroidStudioProjects/mc_common_app
dev_dependencies:
flutter_test:

Loading…
Cancel
Save