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 {
final AppUser signedInUser;
final BusinessUser? businessUser;
@@ -218,6 +228,16 @@ class MzansiAiArguments {
);
}
class MzansiDirectoryArguments {
final String? startUpSearch;
final bool personalSearch;
MzansiDirectoryArguments(
this.startUpSearch,
this.personalSearch,
);
}
class TestArguments {
final AppUser user;
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_objects/app_user.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_pop_up_messages/mih_notification_message.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
case AppRoutes.mzansiDirectory:
// if (args is AuthArguments) {
return MaterialPageRoute(
settings: settings,
builder: (_) => MzansiDirectory(),
);
// }
// break;
if (args is MzansiDirectoryArguments) {
return MaterialPageRoute(
settings: settings,
builder: (_) => MzansiDirectory(arguments: args),
);
}
break;
case AppRoutes.notifications:
if (args is NotificationArguments) {
return MaterialPageRoute(
@@ -188,10 +187,10 @@ class RouteGenerator {
break;
case AppRoutes.businessProfileView:
if (args is Business) {
if (args is BusinessViewArguments) {
return MaterialPageRoute(
settings: settings,
builder: (_) => MzansiBusinessProfileView(business: args),
builder: (_) => MzansiBusinessProfileView(arguments: args),
);
}
break;

View File

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

View File

@@ -1,11 +1,16 @@
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_action.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';
class MzansiDirectory extends StatefulWidget {
const MzansiDirectory({super.key});
final MzansiDirectoryArguments arguments;
const MzansiDirectory({
super.key,
required this.arguments,
});
@override
State<MzansiDirectory> createState() => _MzansiDirectoryState();
@@ -32,7 +37,10 @@ class _MzansiDirectoryState extends State<MzansiDirectory> {
List<Widget> getToolBody() {
List<Widget> toolBodies = [
MihSearchMzansi(),
MihSearchMzansi(
startUpSearch: widget.arguments.startUpSearch,
personalSearch: widget.arguments.personalSearch,
),
// MihContacts(),
// MihFavouriteBusinesses(),
];

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.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_package_tile.dart';
@@ -21,7 +22,10 @@ class _MzansiDirectoryTileState extends State<MzansiDirectoryTile> {
onTap: () {
Navigator.of(context).pushNamed(
'/mzansi-directory',
// arguments: WalletArguments(widget.signedInUser, 0),
arguments: MzansiDirectoryArguments(
null, // startUpSearch
true, // personalSearch
),
);
},
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';
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
State<MihSearchMzansi> createState() => _MihSearchMzansiState();
@@ -24,7 +30,7 @@ class MihSearchMzansi extends StatefulWidget {
class _MihSearchMzansiState extends State<MihSearchMzansi> {
final TextEditingController mzansiSearchController = TextEditingController();
final FocusNode searchFocusNode = FocusNode();
bool userSearch = true;
late bool userSearch;
Future<List<AppUser>?> futureUserSearchResults = Future.value();
Future<List<Business>?> futureBusinessSearchResults = Future.value();
late Future<Position?> futurePosition =
@@ -41,6 +47,17 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
@override
void 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
@@ -246,6 +263,7 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
BuildBusinessSearchResultsList(
businessList: snapshot.requireData!,
myLocation: myLocation,
startUpSearch: mzansiSearchController.text,
),
],
);

View File

@@ -12,6 +12,7 @@ import 'package:url_launcher/url_launcher.dart';
class MihBusinessCard extends StatefulWidget {
final Business business;
final String? startUpSearch;
// final String businessid;
// final String businessName;
// final String cellNumber;
@@ -23,6 +24,7 @@ class MihBusinessCard extends StatefulWidget {
const MihBusinessCard({
super.key,
required this.business,
required this.startUpSearch,
// required this.businessid,
// required this.businessName,
// required this.cellNumber,
@@ -518,6 +520,7 @@ class _MihBusinessCardState extends State<MihBusinessCard> {
businessReview: asyncSnapshot.data,
screenWidth: width,
readOnly: false,
startUpSearch: widget.startUpSearch,
);
} else {
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_speed_dial/flutter_speed_dial.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_review.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 double screenWidth;
final bool readOnly;
final String? startUpSearch;
const MihReviewBusinessWindow({
super.key,
required this.business,
required this.businessReview,
required this.screenWidth,
required this.readOnly,
required this.startUpSearch,
});
@override
@@ -172,7 +175,16 @@ class _MihReviewBusinessWindowState extends State<MihReviewBusinessWindow> {
.then((statusCode) {
Navigator.of(context).pop(); //Remove loading dialog
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(
"Successfully Updated Review!",
"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_action.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';
class MzansiBusinessProfileView extends StatefulWidget {
final Business business;
final BusinessViewArguments arguments;
const MzansiBusinessProfileView({
super.key,
required this.business,
required this.arguments,
});
@override
@@ -68,8 +68,11 @@ class _MzansiBusinessProfileViewState extends State<MzansiBusinessProfileView> {
List<Widget> getToolBody() {
List<Widget> toolBodies = [
MihBusinessDetailsView(business: widget.business),
MihBusinessReviews(business: widget.business),
MihBusinessDetailsView(
business: widget.arguments.business,
startUpSearch: widget.arguments.startUpSearch,
),
MihBusinessReviews(business: widget.arguments.business),
];
return toolBodies;
}

View File

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

View File

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

View File

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