fix state management

This commit is contained in:
2025-07-23 10:16:00 +02:00
parent 7f072534a7
commit 7dceccc170
12 changed files with 100 additions and 22 deletions

View File

@@ -31,6 +31,16 @@ class BusinessArguments {
); );
} }
class BusinessViewArguments {
final Business business;
final String? startUpSearch;
BusinessViewArguments(
this.business,
this.startUpSearch,
);
}
class HomeArguments { class HomeArguments {
final AppUser signedInUser; final AppUser signedInUser;
final BusinessUser? businessUser; final BusinessUser? businessUser;
@@ -218,6 +228,16 @@ class MzansiAiArguments {
); );
} }
class MzansiDirectoryArguments {
final String? startUpSearch;
final bool personalSearch;
MzansiDirectoryArguments(
this.startUpSearch,
this.personalSearch,
);
}
class TestArguments { class TestArguments {
final AppUser user; final AppUser user;
final Business? business; final Business? business;

View File

@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_print_prevew.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_print_prevew.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/Example/package_test.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/Example/package_test.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_notification_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_notification_message.dart';
import 'package:mzansi_innovation_hub/mih_packages/about_mih/about_mih.dart'; import 'package:mzansi_innovation_hub/mih_packages/about_mih/about_mih.dart';
@@ -122,13 +121,13 @@ class RouteGenerator {
// } // }
// break; // Use break and fall through to _errorRoute if argument type is wrong // break; // Use break and fall through to _errorRoute if argument type is wrong
case AppRoutes.mzansiDirectory: case AppRoutes.mzansiDirectory:
// if (args is AuthArguments) { if (args is MzansiDirectoryArguments) {
return MaterialPageRoute( return MaterialPageRoute(
settings: settings, settings: settings,
builder: (_) => MzansiDirectory(), builder: (_) => MzansiDirectory(arguments: args),
); );
// } }
// break; break;
case AppRoutes.notifications: case AppRoutes.notifications:
if (args is NotificationArguments) { if (args is NotificationArguments) {
return MaterialPageRoute( return MaterialPageRoute(
@@ -188,10 +187,10 @@ class RouteGenerator {
break; break;
case AppRoutes.businessProfileView: case AppRoutes.businessProfileView:
if (args is Business) { if (args is BusinessViewArguments) {
return MaterialPageRoute( return MaterialPageRoute(
settings: settings, settings: settings,
builder: (_) => MzansiBusinessProfileView(business: args), builder: (_) => MzansiBusinessProfileView(arguments: args),
); );
} }
break; break;

View File

@@ -1,15 +1,18 @@
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/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/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_components/mih_package_components/mih_business_profile_preview.dart';
class BuildBusinessSearchResultsList extends StatefulWidget { class BuildBusinessSearchResultsList extends StatefulWidget {
final List<Business> businessList; final List<Business> businessList;
final String myLocation; final String myLocation;
final String? startUpSearch;
const BuildBusinessSearchResultsList({ const BuildBusinessSearchResultsList({
super.key, super.key,
required this.businessList, required this.businessList,
required this.myLocation, required this.myLocation,
required this.startUpSearch,
}); });
@override @override
@@ -37,7 +40,10 @@ class _BuildBusinessSearchResultsListState
onTap: () { onTap: () {
Navigator.of(context).pushNamed( Navigator.of(context).pushNamed(
'/business-profile/view', '/business-profile/view',
arguments: widget.businessList[index], arguments: BusinessViewArguments(
widget.businessList[index],
widget.startUpSearch,
),
); );
}, },
splashColor: MzansiInnovationHub.of(context)! splashColor: MzansiInnovationHub.of(context)!

View File

@@ -1,11 +1,16 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart';
class MzansiDirectory extends StatefulWidget { class MzansiDirectory extends StatefulWidget {
const MzansiDirectory({super.key}); final MzansiDirectoryArguments arguments;
const MzansiDirectory({
super.key,
required this.arguments,
});
@override @override
State<MzansiDirectory> createState() => _MzansiDirectoryState(); State<MzansiDirectory> createState() => _MzansiDirectoryState();
@@ -32,7 +37,10 @@ class _MzansiDirectoryState extends State<MzansiDirectory> {
List<Widget> getToolBody() { List<Widget> getToolBody() {
List<Widget> toolBodies = [ List<Widget> toolBodies = [
MihSearchMzansi(), MihSearchMzansi(
startUpSearch: widget.arguments.startUpSearch,
personalSearch: widget.arguments.personalSearch,
),
// MihContacts(), // MihContacts(),
// MihFavouriteBusinesses(), // MihFavouriteBusinesses(),
]; ];

View File

@@ -1,5 +1,6 @@
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/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart';
@@ -21,7 +22,10 @@ class _MzansiDirectoryTileState extends State<MzansiDirectoryTile> {
onTap: () { onTap: () {
Navigator.of(context).pushNamed( Navigator.of(context).pushNamed(
'/mzansi-directory', '/mzansi-directory',
// arguments: WalletArguments(widget.signedInUser, 0), arguments: MzansiDirectoryArguments(
null, // startUpSearch
true, // personalSearch
),
); );
}, },
appName: "Mzansi Directory", appName: "Mzansi Directory",

View File

@@ -15,7 +15,13 @@ import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart';
class MihSearchMzansi extends StatefulWidget { class MihSearchMzansi extends StatefulWidget {
const MihSearchMzansi({super.key}); final String? startUpSearch;
final bool personalSearch;
const MihSearchMzansi({
super.key,
required this.startUpSearch,
required this.personalSearch,
});
@override @override
State<MihSearchMzansi> createState() => _MihSearchMzansiState(); State<MihSearchMzansi> createState() => _MihSearchMzansiState();
@@ -24,7 +30,7 @@ class MihSearchMzansi extends StatefulWidget {
class _MihSearchMzansiState extends State<MihSearchMzansi> { class _MihSearchMzansiState extends State<MihSearchMzansi> {
final TextEditingController mzansiSearchController = TextEditingController(); final TextEditingController mzansiSearchController = TextEditingController();
final FocusNode searchFocusNode = FocusNode(); final FocusNode searchFocusNode = FocusNode();
bool userSearch = true; late bool userSearch;
Future<List<AppUser>?> futureUserSearchResults = Future.value(); Future<List<AppUser>?> futureUserSearchResults = Future.value();
Future<List<Business>?> futureBusinessSearchResults = Future.value(); Future<List<Business>?> futureBusinessSearchResults = Future.value();
late Future<Position?> futurePosition = late Future<Position?> futurePosition =
@@ -41,6 +47,17 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
setState(() {
userSearch = widget.personalSearch;
mzansiSearchController.text = widget.startUpSearch ?? "";
if (userSearch) {
futureUserSearchResults =
MihUserServices().searchUsers(mzansiSearchController.text, context);
} else {
futureBusinessSearchResults = MihBusinessDetailsServices()
.searchBusinesses(mzansiSearchController.text, context);
}
});
} }
@override @override
@@ -246,6 +263,7 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
BuildBusinessSearchResultsList( BuildBusinessSearchResultsList(
businessList: snapshot.requireData!, businessList: snapshot.requireData!,
myLocation: myLocation, myLocation: myLocation,
startUpSearch: mzansiSearchController.text,
), ),
], ],
); );

View File

@@ -12,6 +12,7 @@ import 'package:url_launcher/url_launcher.dart';
class MihBusinessCard extends StatefulWidget { class MihBusinessCard extends StatefulWidget {
final Business business; final Business business;
final String? startUpSearch;
// final String businessid; // final String businessid;
// final String businessName; // final String businessName;
// final String cellNumber; // final String cellNumber;
@@ -23,6 +24,7 @@ class MihBusinessCard extends StatefulWidget {
const MihBusinessCard({ const MihBusinessCard({
super.key, super.key,
required this.business, required this.business,
required this.startUpSearch,
// required this.businessid, // required this.businessid,
// required this.businessName, // required this.businessName,
// required this.cellNumber, // required this.cellNumber,
@@ -518,6 +520,7 @@ class _MihBusinessCardState extends State<MihBusinessCard> {
businessReview: asyncSnapshot.data, businessReview: asyncSnapshot.data,
screenWidth: width, screenWidth: width,
readOnly: false, readOnly: false,
startUpSearch: widget.startUpSearch,
); );
} else { } else {
return MihPackageAlert( return MihPackageAlert(

View File

@@ -2,6 +2,7 @@ import 'package:custom_rating_bar/custom_rating_bar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart';
@@ -21,12 +22,14 @@ class MihReviewBusinessWindow extends StatefulWidget {
final BusinessReview? businessReview; final BusinessReview? businessReview;
final double screenWidth; final double screenWidth;
final bool readOnly; final bool readOnly;
final String? startUpSearch;
const MihReviewBusinessWindow({ const MihReviewBusinessWindow({
super.key, super.key,
required this.business, required this.business,
required this.businessReview, required this.businessReview,
required this.screenWidth, required this.screenWidth,
required this.readOnly, required this.readOnly,
required this.startUpSearch,
}); });
@override @override
@@ -172,7 +175,16 @@ class _MihReviewBusinessWindowState extends State<MihReviewBusinessWindow> {
.then((statusCode) { .then((statusCode) {
Navigator.of(context).pop(); //Remove loading dialog Navigator.of(context).pop(); //Remove loading dialog
if (statusCode == 200) { if (statusCode == 200) {
Navigator.of(context).pop(); Navigator.of(context).pop(); //pop window
Navigator.of(context).pop(); //pop business profile
Navigator.of(context).pop(); //pop directory
Navigator.of(context).pushNamed(
'/mzansi-directory',
arguments: MzansiDirectoryArguments(
widget.startUpSearch, // startUpSearch
false, // personalSearch
),
);
MihAlertServices().successAlert( MihAlertServices().successAlert(
"Successfully Updated Review!", "Successfully Updated Review!",
"Your review has successfully been updated and will now appear under the business.", "Your review has successfully been updated and will now appear under the business.",

View File

@@ -1,4 +1,4 @@
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart';
@@ -7,10 +7,10 @@ import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profi
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart';
class MzansiBusinessProfileView extends StatefulWidget { class MzansiBusinessProfileView extends StatefulWidget {
final Business business; final BusinessViewArguments arguments;
const MzansiBusinessProfileView({ const MzansiBusinessProfileView({
super.key, super.key,
required this.business, required this.arguments,
}); });
@override @override
@@ -68,8 +68,11 @@ class _MzansiBusinessProfileViewState extends State<MzansiBusinessProfileView> {
List<Widget> getToolBody() { List<Widget> getToolBody() {
List<Widget> toolBodies = [ List<Widget> toolBodies = [
MihBusinessDetailsView(business: widget.business), MihBusinessDetailsView(
MihBusinessReviews(business: widget.business), business: widget.arguments.business,
startUpSearch: widget.arguments.startUpSearch,
),
MihBusinessReviews(business: widget.arguments.business),
]; ];
return toolBodies; return toolBodies;
} }

View File

@@ -690,6 +690,7 @@ class _MihBusinessDetailsState extends State<MihBusinessDetails> {
// : 0, // : 0,
// website: widget.arguments.business!.website, // website: widget.arguments.business!.website,
business: widget.arguments.business!, business: widget.arguments.business!,
startUpSearch: null,
width: width, width: width,
), ),
), ),

View File

@@ -11,9 +11,11 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
class MihBusinessDetailsView extends StatefulWidget { class MihBusinessDetailsView extends StatefulWidget {
final Business business; final Business business;
final String? startUpSearch;
const MihBusinessDetailsView({ const MihBusinessDetailsView({
super.key, super.key,
required this.business, required this.business,
required this.startUpSearch,
}); });
@override @override
@@ -163,6 +165,7 @@ class _MihBusinessDetailsViewState extends State<MihBusinessDetailsView> {
width: 700, width: 700,
child: MihBusinessCard( child: MihBusinessCard(
business: widget.business, business: widget.business,
startUpSearch: widget.startUpSearch,
// businessid: widget.business.business_id, // businessid: widget.business.business_id,
// businessName: widget.business.Name, // businessName: widget.business.Name,
// cellNumber: widget.business.contact_no, // cellNumber: widget.business.contact_no,

View File

@@ -39,6 +39,7 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
businessReview: businessReview, businessReview: businessReview,
screenWidth: width, screenWidth: width,
readOnly: true, readOnly: true,
startUpSearch: null,
); );
}, },
); );