show list of favorites

This commit is contained in:
2025-07-29 13:09:33 +02:00
parent 499925327c
commit 739ab51e6b
2 changed files with 111 additions and 1 deletions

View File

@@ -0,0 +1,63 @@
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/bookmarked_business.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_business_profile_preview.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart';
class BuildFavouriteBusinessesList extends StatefulWidget {
final List<BookmarkedBusiness> favouriteBusinesses;
final String? myLocation;
const BuildFavouriteBusinessesList({
super.key,
required this.favouriteBusinesses,
required this.myLocation,
});
@override
State<BuildFavouriteBusinessesList> createState() =>
_BuildFavouriteBusinessesListState();
}
class _BuildFavouriteBusinessesListState
extends State<BuildFavouriteBusinessesList> {
@override
Widget build(BuildContext context) {
return ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: widget.favouriteBusinesses.length,
separatorBuilder: (BuildContext context, index) {
return Divider(
color: Theme.of(context).colorScheme.secondary,
);
},
itemBuilder: (context, index) {
Future<Business?> businessDetails =
MihBusinessDetailsServices().getBusinessDetailsByBusinessId(
widget.favouriteBusinesses[index].business_id,
);
return FutureBuilder<Business?>(
future: businessDetails,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(
child: Text(
'Error: ${snapshot.error}',
style: TextStyle(color: Colors.red),
),
);
} else if (snapshot.hasData && snapshot.data != null) {
Business business = snapshot.data!;
return MihBusinessProfilePreview(
business: business, myLocation: widget.myLocation);
} else {
return const Center(child: Text('No business found'));
}
},
);
},
);
}
}

View File

@@ -1,11 +1,20 @@
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/bookmarked_business.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
import 'package:supertokens_flutter/supertokens.dart';
class MihFavouriteBusinesses extends StatefulWidget {
const MihFavouriteBusinesses({super.key});
final String? myLocation;
const MihFavouriteBusinesses({
super.key,
required this.myLocation,
});
@override
State<MihFavouriteBusinesses> createState() => _MihFavouriteBusinessesState();
@@ -15,6 +24,18 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
final TextEditingController businessSearchController =
TextEditingController();
final FocusNode searchFocusNode = FocusNode();
late Future<List<BookmarkedBusiness>> boookmarkedBusinessListFuture;
Future<List<BookmarkedBusiness>> getAllBookmarkedBusinessesForUser() async {
String user_id = await SuperTokens.getUserId();
return MihMzansiDirectoryServices().getAllUserBookmarkedBusiness(user_id);
}
@override
void initState() {
super.initState();
boookmarkedBusinessListFuture = getAllBookmarkedBusinessesForUser();
}
@override
Widget build(BuildContext context) {
@@ -44,6 +65,32 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
),
),
const SizedBox(height: 10),
FutureBuilder(
future: boookmarkedBusinessListFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Mihloadingcircle(
message: "Getting your favourites",
);
} else if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasData && snapshot.data!.isNotEmpty) {
List<BookmarkedBusiness> bookmarkedBusinesses =
snapshot.data!;
return BuildFavouriteBusinessesList(
favouriteBusinesses: bookmarkedBusinesses,
myLocation: widget.myLocation,
);
} else {
return Center(
child: Text("No bookmarked businesses found"),
);
}
} else {
return Center(
child: Text("Error loading bookmarked businesses"),
);
}
}),
],
),
);