fix search text alignemnt
This commit is contained in:
@@ -2,6 +2,8 @@ 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/app_user.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.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_button.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.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_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';
|
||||||
@@ -9,6 +11,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
|
|||||||
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.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_business_search_resultsList.dart';
|
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart';
|
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart';
|
import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart';
|
import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart';
|
||||||
|
|
||||||
@@ -29,12 +32,62 @@ class MihSearchMzansi extends StatefulWidget {
|
|||||||
|
|
||||||
class _MihSearchMzansiState extends State<MihSearchMzansi> {
|
class _MihSearchMzansiState extends State<MihSearchMzansi> {
|
||||||
final TextEditingController mzansiSearchController = TextEditingController();
|
final TextEditingController mzansiSearchController = TextEditingController();
|
||||||
|
final TextEditingController businessTypeController = TextEditingController();
|
||||||
final FocusNode searchFocusNode = FocusNode();
|
final FocusNode searchFocusNode = FocusNode();
|
||||||
late bool userSearch;
|
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();
|
||||||
List<AppUser> userSearchResults = [];
|
List<AppUser> userSearchResults = [];
|
||||||
List<Business> businessSearchResults = [];
|
List<Business> businessSearchResults = [];
|
||||||
|
late Future<List<String>> availableBusinessTypes;
|
||||||
|
bool filterOn = false;
|
||||||
|
|
||||||
|
void swapPressed() {
|
||||||
|
setState(() {
|
||||||
|
userSearch = !userSearch;
|
||||||
|
if (filterOn) {
|
||||||
|
filterOn = !filterOn;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (businessTypeController.text.isNotEmpty) {
|
||||||
|
setState(() {
|
||||||
|
futureBusinessSearchResults = Future.value();
|
||||||
|
businessTypeController.clear();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
searchPressed();
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearAll() {
|
||||||
|
setState(() {
|
||||||
|
futureUserSearchResults = Future.value();
|
||||||
|
futureBusinessSearchResults = Future.value();
|
||||||
|
mzansiSearchController.clear();
|
||||||
|
businessSearchResults.clear();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void searchPressed() {
|
||||||
|
setState(() {
|
||||||
|
// userSearch = !userSearch;
|
||||||
|
if (userSearch && mzansiSearchController.text.isNotEmpty) {
|
||||||
|
futureUserSearchResults =
|
||||||
|
MihUserServices().searchUsers(mzansiSearchController.text, context);
|
||||||
|
} else {
|
||||||
|
if (
|
||||||
|
// mzansiSearchController.text.isNotEmpty &&
|
||||||
|
businessTypeController.text.isNotEmpty) {
|
||||||
|
futureBusinessSearchResults = MihBusinessDetailsServices()
|
||||||
|
.searchBusinesses(mzansiSearchController.text,
|
||||||
|
businessTypeController.text, context);
|
||||||
|
} else if (mzansiSearchController.text.isNotEmpty) {
|
||||||
|
futureBusinessSearchResults = MihBusinessDetailsServices()
|
||||||
|
.searchBusinesses(mzansiSearchController.text,
|
||||||
|
businessTypeController.text, context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
@@ -48,12 +101,16 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
|
|||||||
setState(() {
|
setState(() {
|
||||||
userSearch = widget.personalSearch;
|
userSearch = widget.personalSearch;
|
||||||
mzansiSearchController.text = widget.startUpSearch ?? "";
|
mzansiSearchController.text = widget.startUpSearch ?? "";
|
||||||
|
// businessTypeController.text = "All";
|
||||||
|
availableBusinessTypes =
|
||||||
|
MihBusinessDetailsServices().fetchAllBusinessTypes();
|
||||||
if (userSearch) {
|
if (userSearch) {
|
||||||
futureUserSearchResults =
|
futureUserSearchResults =
|
||||||
MihUserServices().searchUsers(mzansiSearchController.text, context);
|
MihUserServices().searchUsers(mzansiSearchController.text, context);
|
||||||
} else {
|
} else {
|
||||||
futureBusinessSearchResults = MihBusinessDetailsServices()
|
futureBusinessSearchResults = MihBusinessDetailsServices()
|
||||||
.searchBusinesses(mzansiSearchController.text, context);
|
.searchBusinesses(mzansiSearchController.text,
|
||||||
|
businessTypeController.text, context);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -74,62 +131,133 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
|
|||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.symmetric(horizontal: width / 20),
|
padding: EdgeInsets.symmetric(horizontal: width / 20),
|
||||||
child: MihSearchBar(
|
child: Row(
|
||||||
controller: mzansiSearchController,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
hintText: "Search Mzansi",
|
children: [
|
||||||
prefixIcon: Icons.search,
|
Expanded(
|
||||||
prefixAltIcon: userSearch ? Icons.person : Icons.business,
|
child: MihSearchBar(
|
||||||
suffixTools: [
|
controller: mzansiSearchController,
|
||||||
IconButton(
|
hintText: "Search Mzansi",
|
||||||
|
prefixIcon: Icons.search,
|
||||||
|
prefixAltIcon: userSearch ? Icons.person : Icons.business,
|
||||||
|
suffixTools: [
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
swapPressed();
|
||||||
|
},
|
||||||
|
icon: Icon(
|
||||||
|
Icons.swap_horiz_rounded,
|
||||||
|
size: 35,
|
||||||
|
color: MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.primaryColor(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
fillColor:
|
||||||
|
MzansiInnovationHub.of(context)!.theme.secondaryColor(),
|
||||||
|
hintColor:
|
||||||
|
MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||||
|
onPrefixIconTap: () {
|
||||||
|
searchPressed();
|
||||||
|
},
|
||||||
|
onClearIconTap: () {
|
||||||
|
clearAll();
|
||||||
|
},
|
||||||
|
searchFocusNode: searchFocusNode,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Visibility(
|
||||||
|
visible: !userSearch,
|
||||||
|
child: const SizedBox(width: 10),
|
||||||
|
),
|
||||||
|
Visibility(
|
||||||
|
visible: !userSearch,
|
||||||
|
child: IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
// searchTypeVisibility = !searchTypeVisibility;
|
filterOn = !filterOn;
|
||||||
userSearch = !userSearch;
|
if (filterOn) {
|
||||||
if (userSearch) {
|
businessTypeController.text = "";
|
||||||
futureUserSearchResults = MihUserServices()
|
|
||||||
.searchUsers(
|
|
||||||
mzansiSearchController.text, context);
|
|
||||||
} else {
|
} else {
|
||||||
futureBusinessSearchResults =
|
businessTypeController.clear();
|
||||||
MihBusinessDetailsServices().searchBusinesses(
|
|
||||||
mzansiSearchController.text, context);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.swap_horiz_rounded,
|
!filterOn
|
||||||
|
? Icons.filter_list_rounded
|
||||||
|
: Icons.filter_list_off_rounded,
|
||||||
size: 35,
|
size: 35,
|
||||||
color:
|
color: MzansiInnovationHub.of(context)!
|
||||||
MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
.theme
|
||||||
))
|
.secondaryColor(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
fillColor:
|
|
||||||
MzansiInnovationHub.of(context)!.theme.secondaryColor(),
|
|
||||||
hintColor: MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
|
||||||
onPrefixIconTap: () {
|
|
||||||
if (userSearch) {
|
|
||||||
setState(() {
|
|
||||||
futureUserSearchResults = MihUserServices()
|
|
||||||
.searchUsers(mzansiSearchController.text, context);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
setState(() {
|
|
||||||
futureBusinessSearchResults = MihBusinessDetailsServices()
|
|
||||||
.searchBusinesses(mzansiSearchController.text, context);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onClearIconTap: () {
|
|
||||||
setState(() {
|
|
||||||
futureUserSearchResults = Future.value();
|
|
||||||
futureBusinessSearchResults = Future.value();
|
|
||||||
mzansiSearchController.clear();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
searchFocusNode: searchFocusNode,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
|
FutureBuilder(
|
||||||
|
future: availableBusinessTypes,
|
||||||
|
builder: (context, asyncSnapshot) {
|
||||||
|
List<String> options = [];
|
||||||
|
if (asyncSnapshot.connectionState == ConnectionState.done) {
|
||||||
|
options.addAll(asyncSnapshot.data!);
|
||||||
|
}
|
||||||
|
return Visibility(
|
||||||
|
visible: filterOn,
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: width / 20),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: MihDropdownField(
|
||||||
|
controller: businessTypeController,
|
||||||
|
hintText: "Business Type Filter",
|
||||||
|
dropdownOptions: options,
|
||||||
|
requiredText: true,
|
||||||
|
editable: true,
|
||||||
|
enableSearch: true,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
MihButton(
|
||||||
|
onPressed: () {
|
||||||
|
if (businessTypeController.text.isNotEmpty) {
|
||||||
|
searchPressed();
|
||||||
|
} else {
|
||||||
|
MihAlertServices().errorAlert(
|
||||||
|
"Business Type Not Selected",
|
||||||
|
"Please ensure you have selected a Business Type before seareching for Businesses of Mzansi",
|
||||||
|
context,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
buttonColor: MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.successColor(),
|
||||||
|
elevation: 10,
|
||||||
|
child: Text(
|
||||||
|
"Search",
|
||||||
|
style: TextStyle(
|
||||||
|
color: MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.primaryColor(),
|
||||||
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
const SizedBox(height: 10),
|
||||||
displaySearchResults(userSearch, widget.myLocation ?? ""),
|
displaySearchResults(userSearch, widget.myLocation ?? ""),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user