search business bookmarks

This commit is contained in:
2025-07-30 13:37:56 +02:00
parent b700ae9cfb
commit 98381800fc
2 changed files with 74 additions and 9 deletions

View File

@@ -9,10 +9,12 @@ import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services
class BuildFavouriteBusinessesList extends StatefulWidget {
final List<BookmarkedBusiness> favouriteBusinesses;
final String? myLocation;
final String? searchQuery;
const BuildFavouriteBusinessesList({
super.key,
required this.favouriteBusinesses,
required this.myLocation,
required this.searchQuery,
});
@override
@@ -22,6 +24,28 @@ class BuildFavouriteBusinessesList extends StatefulWidget {
class _BuildFavouriteBusinessesListState
extends State<BuildFavouriteBusinessesList> {
List<Business?> businesses = [];
List<Business?> getListOfBusinesses() {
List<Business?> businesses = [];
for (var item in widget.favouriteBusinesses) {
MihBusinessDetailsServices()
.getBusinessDetailsByBusinessId(item.business_id)
.then((business) {
if (business != null) {
businesses.add(business);
}
});
}
return businesses;
}
@override
void initState() {
super.initState();
businesses = getListOfBusinesses();
}
@override
Widget build(BuildContext context) {
return ListView.separated(
@@ -42,7 +66,14 @@ class _BuildFavouriteBusinessesListState
future: businessDetails,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
return Row(
children: [
Padding(
padding: const EdgeInsets.only(left: 25.0),
child: CircularProgressIndicator(),
),
],
);
} else if (snapshot.hasError) {
return Center(
child: Text(
@@ -80,7 +111,8 @@ class _BuildFavouriteBusinessesListState
),
);
} else {
return const Center(child: Text('No business found'));
print(snapshot.data);
return SizedBox();
}
},
);

View File

@@ -25,16 +25,44 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
TextEditingController();
final FocusNode searchFocusNode = FocusNode();
late Future<List<BookmarkedBusiness>> boookmarkedBusinessListFuture;
List<BookmarkedBusiness> listBookmarkedBusinesses = [];
final ValueNotifier<List<BookmarkedBusiness>> searchBookmarkedBusinesses =
ValueNotifier([]);
Future<List<BookmarkedBusiness>> getAllBookmarkedBusinessesForUser() async {
String user_id = await SuperTokens.getUserId();
return MihMzansiDirectoryServices().getAllUserBookmarkedBusiness(user_id);
}
void searchBookmarkedBusinessByName() {
if (businessSearchController.text.isEmpty) {
searchBookmarkedBusinesses.value = listBookmarkedBusinesses;
} else {
List<BookmarkedBusiness> temp = [];
for (var item in listBookmarkedBusinesses) {
if (item.business_name
.toLowerCase()
.contains(businessSearchController.text.toLowerCase())) {
temp.add(item);
}
}
searchBookmarkedBusinesses.value = temp;
}
}
@override
void dispose() {
super.dispose();
businessSearchController.removeListener(searchBookmarkedBusinessByName);
businessSearchController.dispose();
searchFocusNode.dispose();
searchBookmarkedBusinesses.dispose();
}
@override
void initState() {
super.initState();
boookmarkedBusinessListFuture = getAllBookmarkedBusinessesForUser();
businessSearchController.addListener(searchBookmarkedBusinessByName);
}
@override
@@ -74,12 +102,17 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
);
} else if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasData && snapshot.data!.isNotEmpty) {
List<BookmarkedBusiness> bookmarkedBusinesses =
snapshot.data!;
return BuildFavouriteBusinessesList(
favouriteBusinesses: bookmarkedBusinesses,
myLocation: widget.myLocation,
);
listBookmarkedBusinesses = snapshot.data!;
searchBookmarkedBusinessByName();
return ValueListenableBuilder(
valueListenable: searchBookmarkedBusinesses,
builder: (context, value, child) {
return BuildFavouriteBusinessesList(
favouriteBusinesses: value,
myLocation: widget.myLocation,
searchQuery: businessSearchController.text,
);
});
} else {
return Column(
children: [