show list of favorites
This commit is contained in:
@@ -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'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,20 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:mzansi_innovation_hub/main.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_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_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_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 {
|
class MihFavouriteBusinesses extends StatefulWidget {
|
||||||
const MihFavouriteBusinesses({super.key});
|
final String? myLocation;
|
||||||
|
const MihFavouriteBusinesses({
|
||||||
|
super.key,
|
||||||
|
required this.myLocation,
|
||||||
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<MihFavouriteBusinesses> createState() => _MihFavouriteBusinessesState();
|
State<MihFavouriteBusinesses> createState() => _MihFavouriteBusinessesState();
|
||||||
@@ -15,6 +24,18 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
|
|||||||
final TextEditingController businessSearchController =
|
final TextEditingController businessSearchController =
|
||||||
TextEditingController();
|
TextEditingController();
|
||||||
final FocusNode searchFocusNode = FocusNode();
|
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
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@@ -44,6 +65,32 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
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"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user