Common Setup 1

pull/1/head
mirza.shafique 3 years ago
parent 908e9efe58
commit 237911d711

@ -1,8 +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());
}
}

@ -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';
@ -56,6 +57,7 @@ Future<void> main() async {
create: (_) => ProvidersVM(
commonServices: injector.get<CommonAppServices>(),
commonRepo: injector.get<CommonRepo>(),
providerRepo: injector.get<ProviderRepo>(),
),
),
ChangeNotifierProvider<AppointmentsVM>(

@ -0,0 +1,30 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
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:mc_common_app/models/m_response.dart';
import 'package:mc_common_app/models/model/branch2.dart';
import 'package:mc_common_app/models/profile/branch.dart';
import 'package:mc_common_app/models/profile/categroy.dart';
import 'package:mc_common_app/models/profile/document.dart';
import 'package:mc_common_app/models/profile/services.dart';
import 'package:flutter/cupertino.dart';
abstract class ProviderRepo {
Future<Branch2> getBranchAndServices();
}
class ProviderRepoImp implements ProviderRepo {
@override
Future<Branch2> getBranchAndServices() async {
// var postParams = {"serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => Branch2.fromJson(json), ApiConsts.BranchesAndServices, token: t);
}
}

@ -1,15 +1,21 @@
import 'package:car_customer_app/repositories/provider_repo.dart';
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/models/model/branch2.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 = [];
Branch2? branches;
populateProvidersFilterList() {
providersFilterOptions.clear();
@ -32,4 +38,12 @@ class ProvidersVM extends ChangeNotifier {
providersFilterOptions[index].isSelected = true;
notifyListeners();
}
//Create new branch
getAllNearBranches() async {
//TODO: needs to lat,long into API
branches = null;
branches = await providerRepo.getBranchAndServices();
setState(ViewState.idle);
}
}

@ -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,167 @@
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/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/widgets/common_widgets/categories_list.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:geolocator/geolocator.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: Container(
// child: ListView.builder(
// shrinkWrap: true,
// itemCount: 30,
// itemBuilder: (BuildContext context, int index) {
// return ProviderDetailsCard(
// onCardTapped: () {
// if (context.read<AppointmentsVM>().providerCategories.isEmpty) {
// context.read<AppointmentsVM>().getProviderCategories();
// }
// navigateWithName(context, AppRoutes.bookAppointmenServicesView);
// },
// providerImageUrl: MyAssets.bnCar,
// providerLocation: " 3km",
// providerName: "Al Ahmed Maintenance",
// providerRatings: "4.9",
// );
// },
// ),
// ),
// ),
Expanded(
child: RefreshIndicator(
onRefresh: () async {
context.read<ProvidersVM>().getAllNearBranches();
},
child: SizedBox(
width: double.infinity,
height: double.infinity,
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!.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: const EdgeInsets.all(6),
child: SvgPicture.asset(
MyAssets.icBranches,
color: Colors.white,
),
),
12.width,
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
children: [
const Icon(
Icons.place,
size: 12,
color: MyColors.darkPrimaryColor,
),
//TODO: needs to implement get user location after login
Geolocator.distanceBetween(
// AppState().currentLocation.latitude,
// AppState().currentLocation.latitude,
24.700590,
46.670110,
double.parse(model.branches!.data!.serviceProviderBranch![index].latitude ?? "0"),
double.parse(model.branches!.data!.serviceProviderBranch![index].longitude ?? "0"))
.toStringAsFixed(2)
.toText(
fontSize: 12,
color: MyColors.darkPrimaryColor,
)
],
),
Text(
model.branches!.data!.serviceProviderBranch![index].branchName ?? "",
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold,
),
),
LocaleKeys.tapToEdit.tr().toText(fontSize: 10, color: MyColors.grey70Color),
],
),
),
12.width,
const Icon(
Icons.arrow_forward_rounded,
size: 16,
),
],
).toContainer().onPress(() async {
// await navigateWithName(context, AppRoutes.defineBranch, arguments: snapshot.data!.data![index]);
// setState(() {});
// model.branchs!.data!.serviceProviderBranch![index].countryID = model.branchs!.data!.countryID;
// model.branchs!.data!.serviceProviderBranch![index].countryName = model.branchs!.data!.countryName;
// navigateWithName(context, ProviderAppRoutes.branchDetail, arguments: model.branchs!.data!.serviceProviderBranch![index]);
});
},
separatorBuilder: (context, index) {
return 12.height;
},
itemCount: model.branches!.data!.serviceProviderBranch!.length,
padding: const EdgeInsets.all(12),
);
}
},
),
),
),
),
],
);
},
),
);
}
}

@ -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),

@ -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