Compare commits
19 Commits
V.1.2.5
...
27639cb964
| Author | SHA1 | Date | |
|---|---|---|---|
| 27639cb964 | |||
| 1143d11054 | |||
| 213f3d418d | |||
| e33a62b909 | |||
| ebab9bae52 | |||
| 82c25c5406 | |||
| 3f0fc08a5c | |||
| f137ea41ac | |||
| a7effa3576 | |||
| 74341a9cc6 | |||
| c5267c0540 | |||
| d4ba3aaa03 | |||
| 103ccdc022 | |||
| f8a722eb50 | |||
| fdb28080e3 | |||
| 8a384921c5 | |||
| 4b47bf5288 | |||
| 141611b84d | |||
| a29d0afeb8 |
11
.vscode/launch.json
vendored
11
.vscode/launch.json
vendored
@@ -11,6 +11,17 @@
|
|||||||
"type": "dart",
|
"type": "dart",
|
||||||
"program": "lib/main_dev.dart"
|
"program": "lib/main_dev.dart"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Debug (web)",
|
||||||
|
"cwd": "mih_ui",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"program": "lib/main_dev.dart",
|
||||||
|
"args": [
|
||||||
|
"--web-port",
|
||||||
|
"1995"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Profile",
|
"name": "Profile",
|
||||||
"cwd": "mih_ui",
|
"cwd": "mih_ui",
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ st_api_key = os.getenv("SUPERTOKENS_API_KEY")
|
|||||||
origins = [
|
origins = [
|
||||||
"http://localhost",
|
"http://localhost",
|
||||||
"http://localhost:80",
|
"http://localhost:80",
|
||||||
|
"http://localhost:1995",
|
||||||
"http://localhost:8080",
|
"http://localhost:8080",
|
||||||
"http://MIH-API-Hub:80",
|
"http://MIH-API-Hub:80",
|
||||||
"http://MIH-API-Hub",
|
"http://MIH-API-Hub",
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ watchfiles
|
|||||||
python-multipart
|
python-multipart
|
||||||
python-dotenv
|
python-dotenv
|
||||||
xlrd
|
xlrd
|
||||||
supertokens-python
|
supertokens-python==0.24.0
|
||||||
sniffio
|
sniffio
|
||||||
@@ -5,5 +5,6 @@
|
|||||||
<item>@drawable/mzansi_wallet_sc</item>
|
<item>@drawable/mzansi_wallet_sc</item>
|
||||||
<item>@drawable/mzansi_ai_sc</item>
|
<item>@drawable/mzansi_ai_sc</item>
|
||||||
<item>@drawable/mih_calculator_sc</item>
|
<item>@drawable/mih_calculator_sc</item>
|
||||||
|
<item>@drawable/mzansi_directory_sc</item>
|
||||||
</array>
|
</array>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -9,7 +9,7 @@ class MihTheme {
|
|||||||
late String loadingAssetText;
|
late String loadingAssetText;
|
||||||
late TargetPlatform platform;
|
late TargetPlatform platform;
|
||||||
bool kIsWeb = const bool.fromEnvironment('dart.library.js_util');
|
bool kIsWeb = const bool.fromEnvironment('dart.library.js_util');
|
||||||
String latestVersion = "1.2.5";
|
String latestVersion = "1.2.6";
|
||||||
MihTheme() {
|
MihTheme() {
|
||||||
mode = "Dark";
|
mode = "Dark";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ class _PackageToolOneState extends State<PackageToolOne> {
|
|||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
MihSingleChildScroll(
|
MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
@@ -773,6 +774,7 @@ class _PackageToolOneState extends State<PackageToolOne> {
|
|||||||
MihCircleAvatar(
|
MihCircleAvatar(
|
||||||
imageFile: imagePreview,
|
imageFile: imagePreview,
|
||||||
width: 50,
|
width: 50,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: _fileNameController,
|
fileNameController: _fileNameController,
|
||||||
userSelectedfile: file,
|
userSelectedfile: file,
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ class _PackageToolThreeState extends State<PackageToolThree> {
|
|||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
MihSingleChildScroll(
|
MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ class _PackageToolTwoState extends State<PackageToolTwo> {
|
|||||||
|
|
||||||
Widget getBody() {
|
Widget getBody() {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ class _PackageToolZeroState extends State<PackageToolZero> {
|
|||||||
|
|
||||||
Widget getBody() {
|
Widget getBody() {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
|
|||||||
659
mih_ui/lib/mih_package_components/mih_business_info_card_v2.dart
Normal file
659
mih_ui/lib/mih_package_components/mih_business_info_card_v2.dart
Normal file
@@ -0,0 +1,659 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/main.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_objects/bookmarked_business.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_objects/business.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_objects/business_review.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.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_file_services.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:redacted/redacted.dart';
|
||||||
|
import 'package:supertokens_flutter/supertokens.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
|
class MihBusinessCardV2 extends StatefulWidget {
|
||||||
|
final Business business;
|
||||||
|
final double width;
|
||||||
|
const MihBusinessCardV2({
|
||||||
|
super.key,
|
||||||
|
required this.business,
|
||||||
|
required this.width,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<MihBusinessCardV2> createState() => _MihBusinessCardV2State();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MihBusinessCardV2State extends State<MihBusinessCardV2> {
|
||||||
|
Future<BusinessReview?>? _businessReviewFuture;
|
||||||
|
Future<BookmarkedBusiness?>? _bookmarkedBusinessFuture;
|
||||||
|
bool _isUserSignedIn = false;
|
||||||
|
|
||||||
|
Future<void> _checkUserSession() async {
|
||||||
|
final doesSessionExist = await SuperTokens.doesSessionExist();
|
||||||
|
setState(() {
|
||||||
|
_isUserSignedIn = doesSessionExist;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
RedactedConfiguration getRedactedConfiguration() {
|
||||||
|
return RedactedConfiguration(
|
||||||
|
// redactedColor: Colors.pink,
|
||||||
|
redactedColor: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _makePhoneCall(String phoneNumber) async {
|
||||||
|
String formattedNumber = phoneNumber.replaceAll("-", "");
|
||||||
|
final Uri url = Uri(scheme: 'tel', path: formattedNumber);
|
||||||
|
if (await canLaunchUrl(url)) {
|
||||||
|
await launchUrl(url);
|
||||||
|
} else {
|
||||||
|
MihAlertServices().errorBasicAlert(
|
||||||
|
"Error Making Call",
|
||||||
|
"We couldn't open your phone app to call $formattedNumber. To fix this, make sure you have a phone application installed and it's set as your default dialer.",
|
||||||
|
context,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String? _encodeQueryParameters(Map<String, String> params) {
|
||||||
|
return params.entries
|
||||||
|
.map((MapEntry<String, String> e) =>
|
||||||
|
'${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value)}')
|
||||||
|
.join('&');
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _launchEmail(
|
||||||
|
String recipient, String subject, String body) async {
|
||||||
|
final Uri emailLaunchUri = Uri(
|
||||||
|
scheme: 'mailto',
|
||||||
|
path: recipient,
|
||||||
|
query: _encodeQueryParameters(<String, String>{
|
||||||
|
'subject': subject,
|
||||||
|
'body': body,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (await canLaunchUrl(emailLaunchUri)) {
|
||||||
|
await launchUrl(emailLaunchUri);
|
||||||
|
} else {
|
||||||
|
MihAlertServices().errorBasicAlert(
|
||||||
|
"Error Creating Email",
|
||||||
|
"We couldn't launch your email app to send a message to $recipient. To fix this, please confirm that you have an email application installed and that it's set as your default.",
|
||||||
|
context,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _launchGoogleMapsWithUrl({
|
||||||
|
required double latitude,
|
||||||
|
required double longitude,
|
||||||
|
String? label,
|
||||||
|
}) async {
|
||||||
|
final Uri googleMapsUrl = Uri.parse(
|
||||||
|
'https://www.google.com/maps/search/?api=1&query=$latitude,$longitude${label != null ? '&query_place_id=' : ''}',
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
if (await canLaunchUrl(googleMapsUrl)) {
|
||||||
|
await launchUrl(googleMapsUrl);
|
||||||
|
} else {
|
||||||
|
MihAlertServices().errorBasicAlert(
|
||||||
|
"Error Opening Maps",
|
||||||
|
"There was an issue opening maps for ${widget.business.Name}. This usually happens if you don't have a maps app installed or it's not set as your default. Please install one to proceed.",
|
||||||
|
context,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
MihAlertServices().errorBasicAlert(
|
||||||
|
"Error Opening Maps",
|
||||||
|
"There was an issue opening maps for ${widget.business.Name}. This usually happens if you don't have a maps app installed or it's not set as your default. Please install one to proceed.",
|
||||||
|
context,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _launchWebsite(String urlString) async {
|
||||||
|
String newUrl = urlString;
|
||||||
|
if (!newUrl.startsWith("https://")) {
|
||||||
|
newUrl = "https://$urlString";
|
||||||
|
}
|
||||||
|
final Uri url = Uri.parse(newUrl);
|
||||||
|
try {
|
||||||
|
if (await canLaunchUrl(url)) {
|
||||||
|
await launchUrl(url);
|
||||||
|
} else {
|
||||||
|
MihAlertServices().errorBasicAlert(
|
||||||
|
"Error Opening Website",
|
||||||
|
"We couldn't open the link to $newUrl. To view this website, please ensure you have a web browser installed and set as your default.",
|
||||||
|
context,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
MihAlertServices().errorBasicAlert(
|
||||||
|
"Error Opening Website",
|
||||||
|
"We couldn't open the link to $newUrl. To view this website, please ensure you have a web browser installed and set as your default.",
|
||||||
|
context,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<BusinessReview?> getUserReview() async {
|
||||||
|
String user_id = await SuperTokens.getUserId();
|
||||||
|
return await MihMzansiDirectoryServices().getUserReviewOfBusiness(
|
||||||
|
user_id,
|
||||||
|
widget.business.business_id,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<BookmarkedBusiness?> getUserBookmark() async {
|
||||||
|
String user_id = await SuperTokens.getUserId();
|
||||||
|
return await MihMzansiDirectoryServices().getUserBookmarkOfBusiness(
|
||||||
|
user_id,
|
||||||
|
widget.business.business_id,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isValidGps(String coordinateString) {
|
||||||
|
final RegExp gpsRegex = RegExp(
|
||||||
|
r"^-?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*-?(1[0-7]\d(\.\d+)?|180(\.0+)?|\d{1,2}(\.\d+)?)$");
|
||||||
|
return gpsRegex.hasMatch(coordinateString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_checkUserSession();
|
||||||
|
_businessReviewFuture = getUserReview();
|
||||||
|
_bookmarkedBusinessFuture = getUserBookmark();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
// double screenWidth = MediaQuery.of(context).size.width;
|
||||||
|
return Consumer2<MzansiProfileProvider, MzansiDirectoryProvider>(
|
||||||
|
builder: (BuildContext context, MzansiProfileProvider profileProvider,
|
||||||
|
MzansiDirectoryProvider directoryProvider, Widget? child) {
|
||||||
|
double iconSize = 50.0;
|
||||||
|
return Wrap(
|
||||||
|
alignment: WrapAlignment.center,
|
||||||
|
runSpacing: 10,
|
||||||
|
spacing: 10,
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
MihButton(
|
||||||
|
width: 80,
|
||||||
|
height: 80,
|
||||||
|
onPressed: () {
|
||||||
|
_makePhoneCall(widget.business.contact_no);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getGreenColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
child: Icon(
|
||||||
|
Icons.phone,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
size: iconSize,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
FittedBox(
|
||||||
|
child: Text(
|
||||||
|
"Call",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
MihButton(
|
||||||
|
width: 80,
|
||||||
|
height: 80,
|
||||||
|
onPressed: () {
|
||||||
|
_launchEmail(
|
||||||
|
widget.business.bus_email,
|
||||||
|
"Inquiery about ${widget.business.Name}",
|
||||||
|
"Dear ${widget.business.Name},\n\nI would like to inquire about your services.\n\nBest regards,\n",
|
||||||
|
);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getPinkColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
child: Icon(
|
||||||
|
Icons.email,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
size: iconSize,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
FittedBox(
|
||||||
|
child: Text(
|
||||||
|
"Email",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
if (isValidGps(widget.business.gps_location))
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
MihButton(
|
||||||
|
width: 80,
|
||||||
|
height: 80,
|
||||||
|
onPressed: () {
|
||||||
|
final latitude = double.parse(
|
||||||
|
widget.business.gps_location.split(',')[0]);
|
||||||
|
final longitude = double.parse(
|
||||||
|
widget.business.gps_location.split(',')[1]);
|
||||||
|
_launchGoogleMapsWithUrl(
|
||||||
|
latitude: latitude,
|
||||||
|
longitude: longitude,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getOrangeColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
child: Icon(
|
||||||
|
Icons.location_on,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
size: iconSize,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
FittedBox(
|
||||||
|
child: Text(
|
||||||
|
"Maps",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
if (widget.business.website.isNotEmpty &&
|
||||||
|
widget.business.website != "")
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
MihButton(
|
||||||
|
width: 80,
|
||||||
|
height: 80,
|
||||||
|
onPressed: () {
|
||||||
|
_launchWebsite(widget.business.website);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getRedColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
child: Icon(
|
||||||
|
Icons.language,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
size: iconSize,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
FittedBox(
|
||||||
|
child: Text(
|
||||||
|
"Website",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
FutureBuilder(
|
||||||
|
future: _businessReviewFuture,
|
||||||
|
builder: (context, asyncSnapshot) {
|
||||||
|
if (asyncSnapshot.connectionState == ConnectionState.waiting) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
MihButton(
|
||||||
|
width: 80,
|
||||||
|
height: 80,
|
||||||
|
onPressed: () {},
|
||||||
|
buttonColor: MihColors.getGreyColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
child: Icon(
|
||||||
|
Icons.star_rate_rounded,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
size: iconSize,
|
||||||
|
),
|
||||||
|
).redacted(context: context, redact: true),
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
FittedBox(
|
||||||
|
child: Text(
|
||||||
|
"Rate Us",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
),
|
||||||
|
).redacted(context: context, redact: true),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
BusinessReview? businessReview = asyncSnapshot.data;
|
||||||
|
String ratingTitle = "";
|
||||||
|
if (businessReview == null) {
|
||||||
|
ratingTitle = "Rate Us";
|
||||||
|
} else {
|
||||||
|
ratingTitle = "Edit";
|
||||||
|
}
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
MihButton(
|
||||||
|
width: 80,
|
||||||
|
height: 80,
|
||||||
|
onPressed: () {
|
||||||
|
businessReviewRatingWindow(directoryProvider,
|
||||||
|
businessReview, true, widget.width);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getYellowColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
child: Icon(
|
||||||
|
Icons.star_rate_rounded,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
size: iconSize,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
FittedBox(
|
||||||
|
child: Text(
|
||||||
|
ratingTitle,
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
FutureBuilder(
|
||||||
|
future: _bookmarkedBusinessFuture,
|
||||||
|
builder: (context, asyncSnapshot) {
|
||||||
|
if (asyncSnapshot.connectionState == ConnectionState.waiting) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
MihButton(
|
||||||
|
width: 80,
|
||||||
|
height: 80,
|
||||||
|
onPressed: () {},
|
||||||
|
buttonColor: MihColors.getGreyColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
child: Icon(
|
||||||
|
Icons.bookmark_add_rounded,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
size: iconSize,
|
||||||
|
),
|
||||||
|
).redacted(context: context, redact: true),
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
FittedBox(
|
||||||
|
child: Text(
|
||||||
|
"bookmark",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
),
|
||||||
|
).redacted(context: context, redact: true),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
BookmarkedBusiness? bookmarkBusiness = asyncSnapshot.data;
|
||||||
|
String bookmarkDisplayTitle = "";
|
||||||
|
if (bookmarkBusiness == null) {
|
||||||
|
bookmarkDisplayTitle = "Bookmark";
|
||||||
|
} else {
|
||||||
|
bookmarkDisplayTitle = "Remove";
|
||||||
|
}
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
MihButton(
|
||||||
|
width: 80,
|
||||||
|
height: 80,
|
||||||
|
onPressed: () {
|
||||||
|
if (bookmarkBusiness == null) {
|
||||||
|
showAddBookmarkAlert();
|
||||||
|
} else {
|
||||||
|
showDeleteBookmarkAlert(bookmarkBusiness);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getBluishPurpleColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
child: Icon(
|
||||||
|
bookmarkBusiness == null
|
||||||
|
? Icons.bookmark_add_rounded
|
||||||
|
: Icons.bookmark_remove_rounded,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
size: iconSize,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
FittedBox(
|
||||||
|
child: Text(
|
||||||
|
bookmarkDisplayTitle,
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> businessReviewRatingWindow(
|
||||||
|
MzansiDirectoryProvider directoryProvider,
|
||||||
|
BusinessReview? myReview,
|
||||||
|
bool previouslyRated,
|
||||||
|
double width) async {
|
||||||
|
if (_isUserSignedIn) {
|
||||||
|
showDialog(
|
||||||
|
barrierDismissible: false,
|
||||||
|
context: context,
|
||||||
|
builder: (context) => MihReviewBusinessWindow(
|
||||||
|
business: widget.business,
|
||||||
|
businessReview: myReview,
|
||||||
|
screenWidth: width,
|
||||||
|
readOnly: false,
|
||||||
|
onSuccessDismissPressed: () async {
|
||||||
|
List<Business>? businessSearchResults = [];
|
||||||
|
businessSearchResults = await MihBusinessDetailsServices()
|
||||||
|
.searchBusinesses(directoryProvider.searchTerm,
|
||||||
|
directoryProvider.businessTypeFilter, context);
|
||||||
|
Map<String, Future<String>> busImagesUrl = {};
|
||||||
|
Future<String> businessLogoUrl;
|
||||||
|
for (var bus in businessSearchResults) {
|
||||||
|
businessLogoUrl = MihFileApi.getMinioFileUrl(bus.logo_path);
|
||||||
|
busImagesUrl[bus.business_id] = businessLogoUrl;
|
||||||
|
}
|
||||||
|
directoryProvider.setSearchedBusinesses(
|
||||||
|
searchedBusinesses: businessSearchResults,
|
||||||
|
businessesImagesUrl: busImagesUrl,
|
||||||
|
);
|
||||||
|
setState(() {
|
||||||
|
_businessReviewFuture = getUserReview();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
showSignInRequiredAlert();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void showAddBookmarkAlert() {
|
||||||
|
if (_isUserSignedIn) {
|
||||||
|
showDialog(
|
||||||
|
barrierDismissible: false,
|
||||||
|
context: context,
|
||||||
|
builder: (context) => MihAddBookmarkAlert(
|
||||||
|
business: widget.business,
|
||||||
|
onSuccessDismissPressed: () async {
|
||||||
|
_bookmarkedBusinessFuture = getUserBookmark();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
showSignInRequiredAlert();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void showDeleteBookmarkAlert(BookmarkedBusiness? bookmarkBusiness) {
|
||||||
|
if (_isUserSignedIn) {
|
||||||
|
showDialog(
|
||||||
|
barrierDismissible: false,
|
||||||
|
context: context,
|
||||||
|
builder: (context) => MihDeleteBookmarkAlert(
|
||||||
|
business: widget.business,
|
||||||
|
bookmarkBusiness: bookmarkBusiness,
|
||||||
|
onSuccessDismissPressed: () {
|
||||||
|
_bookmarkedBusinessFuture = getUserBookmark();
|
||||||
|
},
|
||||||
|
// startUpSearch: widget.startUpSearch,
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
showSignInRequiredAlert();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void showSignInRequiredAlert() {
|
||||||
|
showDialog(
|
||||||
|
barrierDismissible: false,
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return MihPackageWindow(
|
||||||
|
fullscreen: false,
|
||||||
|
windowTitle: null,
|
||||||
|
onWindowTapClose: () {
|
||||||
|
context.pop();
|
||||||
|
},
|
||||||
|
windowBody: Column(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
MihIcons.mihLogo,
|
||||||
|
size: 125,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
Text(
|
||||||
|
"Let's Get Started",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
fontSize: 25,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15),
|
||||||
|
Text(
|
||||||
|
"Ready to dive in to the world of MIH?\nSign in or create a free MIH account to unlock all the powerful features of the MIH app. It's quick and easy!",
|
||||||
|
style: TextStyle(
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
fontSize: 15,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 25),
|
||||||
|
Center(
|
||||||
|
child: MihButton(
|
||||||
|
onPressed: () {
|
||||||
|
context.goNamed(
|
||||||
|
'mihHome',
|
||||||
|
extra: true,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getGreenColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
elevation: 10,
|
||||||
|
width: 300,
|
||||||
|
child: Text(
|
||||||
|
"Sign In/ Create Account",
|
||||||
|
style: TextStyle(
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -68,6 +68,7 @@ class _MihBusinessProfilePreviewState extends State<MihBusinessProfilePreview> {
|
|||||||
: MihCircleAvatar(
|
: MihCircleAvatar(
|
||||||
imageFile: widget.imageFile,
|
imageFile: widget.imageFile,
|
||||||
width: profilePictureWidth,
|
width: profilePictureWidth,
|
||||||
|
expandable: false,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: TextEditingController(),
|
fileNameController: TextEditingController(),
|
||||||
userSelectedfile: null,
|
userSelectedfile: null,
|
||||||
|
|||||||
@@ -2,13 +2,17 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:ken_logger/ken_logger.dart';
|
||||||
import 'package:mzansi_innovation_hub/main.dart';
|
import 'package:mzansi_innovation_hub/main.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart';
|
||||||
|
|
||||||
class MihCircleAvatar extends StatefulWidget {
|
class MihCircleAvatar extends StatefulWidget {
|
||||||
final ImageProvider<Object>? imageFile;
|
final ImageProvider<Object>? imageFile;
|
||||||
final double width;
|
final double width;
|
||||||
|
final bool expandable;
|
||||||
final bool editable;
|
final bool editable;
|
||||||
final TextEditingController? fileNameController;
|
final TextEditingController? fileNameController;
|
||||||
final onChange;
|
final onChange;
|
||||||
@@ -19,6 +23,7 @@ class MihCircleAvatar extends StatefulWidget {
|
|||||||
super.key,
|
super.key,
|
||||||
required this.imageFile,
|
required this.imageFile,
|
||||||
required this.width,
|
required this.width,
|
||||||
|
required this.expandable,
|
||||||
required this.editable,
|
required this.editable,
|
||||||
required this.fileNameController,
|
required this.fileNameController,
|
||||||
required this.userSelectedfile,
|
required this.userSelectedfile,
|
||||||
@@ -35,23 +40,30 @@ class _MihCircleAvatarState extends State<MihCircleAvatar> {
|
|||||||
late ImageProvider<Object>? imagePreview;
|
late ImageProvider<Object>? imagePreview;
|
||||||
|
|
||||||
ImageProvider<Object>? getAvatar() {
|
ImageProvider<Object>? getAvatar() {
|
||||||
// Color dark = const Color(0XFF3A4454);
|
|
||||||
if (widget.imageFile == null) {
|
if (widget.imageFile == null) {
|
||||||
return null;
|
return null;
|
||||||
// if (widget.backgroundColor == dark) {
|
|
||||||
// print("here in light icon");
|
|
||||||
// return const AssetImage(
|
|
||||||
// 'lib/mih_package_components/assets/images/i-dont-know-light.png');
|
|
||||||
// } else {
|
|
||||||
// print("here in dark icon");
|
|
||||||
// return const AssetImage(
|
|
||||||
// 'lib/mih_package_components/assets/images/i-dont-know-dark.png');
|
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
return widget.imageFile;
|
return widget.imageFile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void expandAvatar() {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return MihPackageWindow(
|
||||||
|
fullscreen: false,
|
||||||
|
windowTitle: "",
|
||||||
|
onWindowTapClose: () {
|
||||||
|
context.pop();
|
||||||
|
},
|
||||||
|
windowBody: InteractiveViewer(
|
||||||
|
child: Image(image: imagePreview!),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -62,8 +74,14 @@ class _MihCircleAvatarState extends State<MihCircleAvatar> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return GestureDetector(
|
||||||
// color: Colors.white,
|
onTap: widget.expandable
|
||||||
|
? () {
|
||||||
|
KenLogger.success("Avatar tapped");
|
||||||
|
expandAvatar();
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
child: Container(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
width: widget.width,
|
width: widget.width,
|
||||||
height: widget.width,
|
height: widget.width,
|
||||||
@@ -106,7 +124,8 @@ class _MihCircleAvatarState extends State<MihCircleAvatar> {
|
|||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
backgroundColor: WidgetStateProperty.all<Color>(
|
backgroundColor: WidgetStateProperty.all<Color>(
|
||||||
MihColors.getGreenColor(
|
MihColors.getGreenColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
@@ -116,7 +135,9 @@ class _MihCircleAvatarState extends State<MihCircleAvatar> {
|
|||||||
type: FileType.image,
|
type: FileType.image,
|
||||||
);
|
);
|
||||||
// print("Here 1");
|
// print("Here 1");
|
||||||
if (MzansiInnovationHub.of(context)!.theme.getPlatform() ==
|
if (MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.getPlatform() ==
|
||||||
"Web") {
|
"Web") {
|
||||||
// print("Here 2");
|
// print("Here 2");
|
||||||
if (result == null) return;
|
if (result == null) return;
|
||||||
@@ -168,6 +189,7 @@ class _MihCircleAvatarState extends State<MihCircleAvatar> {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,6 +103,18 @@ class _MihDropdownFieldState extends State<MihDropdownField> {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: Theme(
|
child: Theme(
|
||||||
data: Theme.of(context).copyWith(
|
data: Theme.of(context).copyWith(
|
||||||
|
scrollbarTheme: ScrollbarThemeData(
|
||||||
|
thumbColor: WidgetStatePropertyAll(
|
||||||
|
MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
|
"Dark")),
|
||||||
|
thickness: const WidgetStatePropertyAll(6),
|
||||||
|
radius: const Radius.circular(10),
|
||||||
|
thumbVisibility: const WidgetStatePropertyAll(
|
||||||
|
true), // Always show when scrolling
|
||||||
|
),
|
||||||
textSelectionTheme: TextSelectionThemeData(
|
textSelectionTheme: TextSelectionThemeData(
|
||||||
cursorColor: MihColors.getPrimaryColor(
|
cursorColor: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
|||||||
@@ -19,9 +19,6 @@ class _MihloadingcircleState extends State<Mihloadingcircle>
|
|||||||
late AnimationController _controller;
|
late AnimationController _controller;
|
||||||
late Animation<double> _animation;
|
late Animation<double> _animation;
|
||||||
|
|
||||||
late double width;
|
|
||||||
late double height;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -82,16 +79,15 @@ class _MihloadingcircleState extends State<Mihloadingcircle>
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
widget.message != null
|
if (widget.message != null)
|
||||||
? Text(
|
Text(
|
||||||
widget.message!,
|
widget.message!,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
: SizedBox(),
|
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -197,7 +197,10 @@ class _MihPackageWindowState extends State<MihPackageWindow> {
|
|||||||
maxHeight: windowHeight * 0.85,
|
maxHeight: windowHeight * 0.85,
|
||||||
maxWidth: windowWidth * 0.85,
|
maxWidth: windowWidth * 0.85,
|
||||||
),
|
),
|
||||||
child: MihSingleChildScroll(child: widget.windowBody),
|
child: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
|
child: widget.windowBody,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ class _MihPersonalProfilePreviewState extends State<MihPersonalProfilePreview> {
|
|||||||
: MihCircleAvatar(
|
: MihCircleAvatar(
|
||||||
imageFile: widget.imageFile,
|
imageFile: widget.imageFile,
|
||||||
width: profilePictureWidth,
|
width: profilePictureWidth,
|
||||||
|
expandable: false,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: TextEditingController(),
|
fileNameController: TextEditingController(),
|
||||||
userSelectedfile: null,
|
userSelectedfile: null,
|
||||||
|
|||||||
@@ -3,19 +3,17 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
|||||||
import 'package:mzansi_innovation_hub/main.dart';
|
import 'package:mzansi_innovation_hub/main.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_objects/profile_link.dart';
|
import 'package:mzansi_innovation_hub/mih_objects/profile_link.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart';
|
import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
class MihProfileLinks extends StatefulWidget {
|
class MihProfileLinks extends StatefulWidget {
|
||||||
final List<ProfileLink> links;
|
final List<ProfileLink> links;
|
||||||
final double? buttonSize;
|
|
||||||
final bool? paddingOn;
|
final bool? paddingOn;
|
||||||
const MihProfileLinks({
|
const MihProfileLinks({
|
||||||
super.key,
|
super.key,
|
||||||
required this.links,
|
required this.links,
|
||||||
this.buttonSize,
|
|
||||||
this.paddingOn,
|
this.paddingOn,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -26,72 +24,89 @@ class MihProfileLinks extends StatefulWidget {
|
|||||||
class _MihProfileLinksState extends State<MihProfileLinks> {
|
class _MihProfileLinksState extends State<MihProfileLinks> {
|
||||||
Widget displayLinkButton(ProfileLink link) {
|
Widget displayLinkButton(ProfileLink link) {
|
||||||
IconData iconData;
|
IconData iconData;
|
||||||
Color iconColor;
|
Color btnColor;
|
||||||
|
Color iconColor = Colors.white;
|
||||||
switch (link.destination.toLowerCase()) {
|
switch (link.destination.toLowerCase()) {
|
||||||
case "youtube":
|
case "youtube":
|
||||||
iconData = FontAwesomeIcons.youtube;
|
iconData = FontAwesomeIcons.youtube;
|
||||||
iconColor = const Color(0xFFFF0000);
|
btnColor = const Color(0xFFFF0000);
|
||||||
break;
|
break;
|
||||||
case "tiktok":
|
case "tiktok":
|
||||||
iconData = FontAwesomeIcons.tiktok;
|
iconData = FontAwesomeIcons.tiktok;
|
||||||
iconColor = const Color(0xFF000000);
|
btnColor = const Color(0xFF000000);
|
||||||
break;
|
break;
|
||||||
case "twitch":
|
case "twitch":
|
||||||
iconData = FontAwesomeIcons.twitch;
|
iconData = FontAwesomeIcons.twitch;
|
||||||
iconColor = const Color(0xFF6441a5);
|
btnColor = const Color(0xFF6441a5);
|
||||||
break;
|
break;
|
||||||
case "threads":
|
case "threads":
|
||||||
iconData = FontAwesomeIcons.threads;
|
iconData = FontAwesomeIcons.threads;
|
||||||
iconColor = const Color(0xFF000000);
|
btnColor = const Color(0xFF000000);
|
||||||
break;
|
break;
|
||||||
case "whatsapp":
|
case "whatsapp":
|
||||||
iconData = FontAwesomeIcons.whatsapp;
|
iconData = FontAwesomeIcons.whatsapp;
|
||||||
iconColor = const Color(0xFF25D366);
|
btnColor = const Color(0xFF25D366);
|
||||||
break;
|
break;
|
||||||
case "instagram":
|
case "instagram":
|
||||||
iconData = FontAwesomeIcons.instagram;
|
iconData = FontAwesomeIcons.instagram;
|
||||||
iconColor = const Color(0xFFF56040);
|
btnColor = const Color(0xFFF56040);
|
||||||
break;
|
break;
|
||||||
case "x":
|
case "x":
|
||||||
iconData = FontAwesomeIcons.xTwitter;
|
iconData = FontAwesomeIcons.xTwitter;
|
||||||
iconColor = const Color(0xFF000000);
|
btnColor = const Color(0xFF000000);
|
||||||
break;
|
break;
|
||||||
case "linkedin":
|
case "linkedin":
|
||||||
iconData = FontAwesomeIcons.linkedin;
|
iconData = FontAwesomeIcons.linkedin;
|
||||||
iconColor = const Color(0xFF0a66c2);
|
btnColor = const Color(0xFF0a66c2);
|
||||||
break;
|
break;
|
||||||
case "facebook":
|
case "facebook":
|
||||||
iconData = FontAwesomeIcons.facebook;
|
iconData = FontAwesomeIcons.facebook;
|
||||||
iconColor = const Color(0xFF4267B2);
|
btnColor = const Color(0xFF4267B2);
|
||||||
break;
|
break;
|
||||||
case "reddit":
|
case "reddit":
|
||||||
iconData = FontAwesomeIcons.reddit;
|
iconData = FontAwesomeIcons.reddit;
|
||||||
iconColor = const Color(0xFFFF4500);
|
btnColor = const Color(0xFFFF4500);
|
||||||
break;
|
break;
|
||||||
case "discord":
|
case "discord":
|
||||||
iconData = FontAwesomeIcons.discord;
|
iconData = FontAwesomeIcons.discord;
|
||||||
iconColor = const Color(0xFF5865F2);
|
btnColor = const Color(0xFF5865F2);
|
||||||
|
break;
|
||||||
|
case "git":
|
||||||
|
iconData = FontAwesomeIcons.git;
|
||||||
|
btnColor = const Color(0xFF73A952);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
iconData = FontAwesomeIcons.link;
|
iconData = FontAwesomeIcons.link;
|
||||||
iconColor = MihColors.getPrimaryColor(
|
btnColor = MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark");
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark");
|
||||||
}
|
}
|
||||||
|
return MihButton(
|
||||||
return MihPackageTile(
|
width: 80,
|
||||||
onTap: () {
|
height: 80,
|
||||||
|
onPressed: () {
|
||||||
launchSocialUrl(Uri.parse(link.web_link));
|
launchSocialUrl(Uri.parse(link.web_link));
|
||||||
},
|
},
|
||||||
appName: link.destination,
|
buttonColor: btnColor,
|
||||||
appIcon: Icon(
|
child: FaIcon(
|
||||||
iconData,
|
iconData,
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
|
size: 40,
|
||||||
),
|
),
|
||||||
iconSize: 200,
|
|
||||||
textColor: Colors.black,
|
|
||||||
// MihColors.getPrimaryColor(
|
|
||||||
// MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
|
||||||
);
|
);
|
||||||
|
// return MihPackageTile(
|
||||||
|
// onTap: () {
|
||||||
|
// launchSocialUrl(Uri.parse(link.web_link));
|
||||||
|
// },
|
||||||
|
// appName: link.destination,
|
||||||
|
// appIcon: Icon(
|
||||||
|
// iconData,
|
||||||
|
// color: btnColor,
|
||||||
|
// ),
|
||||||
|
// iconSize: 200,
|
||||||
|
// textColor: Colors.black,
|
||||||
|
// // MihColors.getPrimaryColor(
|
||||||
|
// // MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
// );
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> launchSocialUrl(Uri linkUrl) async {
|
Future<void> launchSocialUrl(Uri linkUrl) async {
|
||||||
@@ -110,23 +125,8 @@ class _MihProfileLinksState extends State<MihProfileLinks> {
|
|||||||
padding: widget.paddingOn == null || widget.paddingOn!
|
padding: widget.paddingOn == null || widget.paddingOn!
|
||||||
? MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
? MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
||||||
: EdgeInsets.symmetric(horizontal: width * 0.075)
|
: EdgeInsets.symmetric(horizontal: width * 0)
|
||||||
: EdgeInsetsGeometry.all(0),
|
: EdgeInsetsGeometry.all(0),
|
||||||
child: Material(
|
|
||||||
color: MihColors.getSecondaryColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark")
|
|
||||||
.withValues(alpha: 0.6),
|
|
||||||
borderRadius: BorderRadius.circular(25),
|
|
||||||
elevation: 10,
|
|
||||||
shadowColor: Colors.black,
|
|
||||||
child: Container(
|
|
||||||
width: 500,
|
|
||||||
padding: EdgeInsets.all(10),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: MihColors.getSecondaryColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
|
||||||
borderRadius: BorderRadius.circular(10),
|
|
||||||
),
|
|
||||||
child: widget.links.isEmpty
|
child: widget.links.isEmpty
|
||||||
? SizedBox(
|
? SizedBox(
|
||||||
height: 35,
|
height: 35,
|
||||||
@@ -144,20 +144,14 @@ class _MihProfileLinksState extends State<MihProfileLinks> {
|
|||||||
)
|
)
|
||||||
: Wrap(
|
: Wrap(
|
||||||
alignment: WrapAlignment.center,
|
alignment: WrapAlignment.center,
|
||||||
runSpacing: 15,
|
runSpacing: 10,
|
||||||
spacing: 15,
|
spacing: 10,
|
||||||
children: widget.links.map(
|
children: widget.links.map(
|
||||||
(link) {
|
(link) {
|
||||||
return SizedBox(
|
return displayLinkButton(link);
|
||||||
width: widget.buttonSize ?? 80,
|
|
||||||
height: widget.buttonSize ?? 80,
|
|
||||||
child: displayLinkButton(link),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
).toList(),
|
).toList(),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,7 +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_package_components/mih_single_child_scroll.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
@@ -21,72 +20,30 @@ class _MihAttributesState extends State<MihAttributes> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TableRow displayIcon(IconData icon, String creator, String link) {
|
Widget displayAttribution(IconData resource, String creator, String link) {
|
||||||
return TableRow(
|
return GestureDetector(
|
||||||
children: [
|
onTap: () {
|
||||||
TableCell(
|
|
||||||
verticalAlignment: TableCellVerticalAlignment.middle,
|
|
||||||
child: SizedBox(
|
|
||||||
height: 150,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 15.0),
|
|
||||||
child: FittedBox(
|
|
||||||
child: Center(
|
|
||||||
child: Icon(
|
|
||||||
icon,
|
|
||||||
// size: 125,
|
|
||||||
color: MihColors.getSecondaryColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TableCell(
|
|
||||||
verticalAlignment: TableCellVerticalAlignment.middle,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.all(15.0),
|
|
||||||
child: Center(
|
|
||||||
child: Text(
|
|
||||||
creator,
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 20,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TableCell(
|
|
||||||
verticalAlignment: TableCellVerticalAlignment.middle,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 15.0),
|
|
||||||
child: MihButton(
|
|
||||||
onPressed: () {
|
|
||||||
launchUrlLink(
|
launchUrlLink(
|
||||||
Uri.parse(
|
Uri.parse(
|
||||||
link,
|
link,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
buttonColor: MihColors.getGreenColor(
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
resource,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
width: 100,
|
size: 100,
|
||||||
child: Text(
|
|
||||||
"Visit",
|
|
||||||
style: TextStyle(
|
|
||||||
color: MihColors.getPrimaryColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
|
||||||
fontSize: 20,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
|
const SizedBox(height: 5),
|
||||||
|
Text(
|
||||||
|
creator,
|
||||||
|
style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,157 +89,50 @@ class _MihAttributesState extends State<MihAttributes> {
|
|||||||
height: 10,
|
height: 10,
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: 700,
|
width: 900,
|
||||||
child: Table(
|
child: Wrap(
|
||||||
defaultVerticalAlignment: TableCellVerticalAlignment.middle,
|
alignment: WrapAlignment.center,
|
||||||
columnWidths: const {
|
runSpacing: 10,
|
||||||
0: FlexColumnWidth(1),
|
spacing: 10,
|
||||||
1: FlexColumnWidth(1),
|
|
||||||
2: FlexColumnWidth(1),
|
|
||||||
},
|
|
||||||
children: [
|
children: [
|
||||||
const TableRow(
|
displayAttribution(MihIcons.mihRing, "Tarah Meth",
|
||||||
children: [
|
|
||||||
TableCell(
|
|
||||||
verticalAlignment: TableCellVerticalAlignment.middle,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 15.0),
|
|
||||||
child: Center(
|
|
||||||
child: Text(
|
|
||||||
"Resources",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 25,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TableCell(
|
|
||||||
verticalAlignment: TableCellVerticalAlignment.middle,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 15.0),
|
|
||||||
child: Center(
|
|
||||||
child: Text(
|
|
||||||
"Creator",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 25,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TableCell(
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 15.0),
|
|
||||||
child: Center(
|
|
||||||
child: Text(
|
|
||||||
"Link",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 25,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
displayIcon(MihIcons.mihRing, "Tarah Meth",
|
|
||||||
"https://www.linkedin.com/in/tarah-meth-3b6309254/"),
|
"https://www.linkedin.com/in/tarah-meth-3b6309254/"),
|
||||||
displayIcon(MihIcons.mihLogo, "Tarah Meth",
|
displayAttribution(MihIcons.mihLogo, "Tarah Meth",
|
||||||
"https://www.linkedin.com/in/tarah-meth-3b6309254/"),
|
"https://www.linkedin.com/in/tarah-meth-3b6309254/"),
|
||||||
displayIcon(
|
displayAttribution(
|
||||||
MihIcons.mzansiAi, "Ollama", "https://ollama.com/"),
|
MihIcons.mzansiAi, "Ollama", "https://ollama.com/"),
|
||||||
displayIcon(MihIcons.mzansiWallet, "Freepik",
|
displayAttribution(MihIcons.mzansiWallet, "Freepik",
|
||||||
"https://www.flaticon.com/free-icon/wallet-passes-app_3884407?term=wallet&page=1&position=21&origin=search&related_id=3884407"),
|
"https://www.flaticon.com/free-icon/wallet-passes-app_3884407?term=wallet&page=1&position=21&origin=search&related_id=3884407"),
|
||||||
displayIcon(MihIcons.patientProfile, "RaftelDesign",
|
displayAttribution(MihIcons.patientProfile, "RaftelDesign",
|
||||||
"https://www.flaticon.com/free-icon/patient_2376100?term=medication&page=1&position=6&origin=search&related_id=2376100"),
|
"https://www.flaticon.com/free-icon/patient_2376100?term=medication&page=1&position=6&origin=search&related_id=2376100"),
|
||||||
displayIcon(MihIcons.patientProfile, "Srip",
|
displayAttribution(MihIcons.patientProfile, "Srip",
|
||||||
"https://www.flaticon.com/free-icon/hospital_1233930?term=medical+snake&page=1&position=7&origin=search&related_id=1233930"),
|
"https://www.flaticon.com/free-icon/hospital_1233930?term=medical+snake&page=1&position=7&origin=search&related_id=1233930"),
|
||||||
displayIcon(MihIcons.calendar, "Freepik",
|
displayAttribution(MihIcons.calendar, "Freepik",
|
||||||
"https://www.flaticon.com/free-icon/calendar_2278049?term=calendar&page=1&position=5&origin=search&related_id=2278049"),
|
"https://www.flaticon.com/free-icon/calendar_2278049?term=calendar&page=1&position=5&origin=search&related_id=2278049"),
|
||||||
displayIcon(MihIcons.calculator, "Freepik",
|
displayAttribution(MihIcons.calculator, "Freepik",
|
||||||
"https://www.flaticon.com/free-icon/calculator_2374409?term=calculator&page=1&position=20&origin=search&related_id=2374409"),
|
"https://www.flaticon.com/free-icon/calculator_2374409?term=calculator&page=1&position=20&origin=search&related_id=2374409"),
|
||||||
displayIcon(MihIcons.aboutMih, "Chanut",
|
displayAttribution(MihIcons.aboutMih, "Chanut",
|
||||||
"https://www.flaticon.com/free-icon/info_151776?term=about&page=1&position=8&origin=search&related_id=151776"),
|
"https://www.flaticon.com/free-icon/info_151776?term=about&page=1&position=8&origin=search&related_id=151776"),
|
||||||
displayIcon(MihIcons.personalProfile, "Freepik",
|
displayAttribution(MihIcons.personalProfile, "Freepik",
|
||||||
"https://www.flaticon.com/free-icon/user_1077063?term=profile&page=1&position=6&origin=search&related_id=1077063"),
|
"https://www.flaticon.com/free-icon/user_1077063?term=profile&page=1&position=6&origin=search&related_id=1077063"),
|
||||||
displayIcon(MihIcons.businessProfile, "Gravisio",
|
displayAttribution(MihIcons.businessProfile, "Gravisio",
|
||||||
"https://www.flaticon.com/free-icon/contractor_11813336?term=company+profile&page=1&position=2&origin=search&related_id=11813336"),
|
"https://www.flaticon.com/free-icon/contractor_11813336?term=company+profile&page=1&position=2&origin=search&related_id=11813336"),
|
||||||
displayIcon(MihIcons.patientManager, "Vector Tank",
|
displayAttribution(MihIcons.patientManager, "Vector Tank",
|
||||||
"https://www.flaticon.com/free-icon/doctor_10215061?term=doctor&page=1&position=73&origin=search&related_id=10215061"),
|
"https://www.flaticon.com/free-icon/doctor_10215061?term=doctor&page=1&position=73&origin=search&related_id=10215061"),
|
||||||
displayIcon(MihIcons.profileSetup, "Freepik",
|
displayAttribution(MihIcons.profileSetup, "Freepik",
|
||||||
"https://www.flaticon.com/free-icon/add-user_748137?term=profile+add&page=1&position=1&origin=search&related_id=748137"),
|
"https://www.flaticon.com/free-icon/add-user_748137?term=profile+add&page=1&position=1&origin=search&related_id=748137"),
|
||||||
displayIcon(MihIcons.businessSetup, "kerismaker",
|
displayAttribution(MihIcons.businessSetup, "kerismaker",
|
||||||
"https://www.flaticon.com/free-icon/business_13569850?term=company+add&page=1&position=25&origin=search&related_id=13569850"),
|
"https://www.flaticon.com/free-icon/business_13569850?term=company+add&page=1&position=25&origin=search&related_id=13569850"),
|
||||||
displayIcon(MihIcons.calculator, "fawazahmed0",
|
displayAttribution(MihIcons.calculator, "fawazahmed0",
|
||||||
"https://github.com/fawazahmed0/exchange-api"),
|
"https://github.com/fawazahmed0/exchange-api"),
|
||||||
displayIcon(MihIcons.iDontKnow, "Freepik",
|
displayAttribution(MihIcons.iDontKnow, "Freepik",
|
||||||
"https://www.flaticon.com/free-icon/i-dont-know_5359909?term=i+dont+know&page=1&position=7&origin=search&related_id=5359909"),
|
"https://www.flaticon.com/free-icon/i-dont-know_5359909?term=i+dont+know&page=1&position=7&origin=search&related_id=5359909"),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// SizedBox(
|
const SizedBox(
|
||||||
// width: 500,
|
height: 30,
|
||||||
// child: Column(
|
),
|
||||||
// children: [
|
|
||||||
// const SizedBox(
|
|
||||||
// width: double.infinity,
|
|
||||||
// child: Row(
|
|
||||||
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
||||||
// mainAxisSize: MainAxisSize.max,
|
|
||||||
// children: [
|
|
||||||
// Flexible(
|
|
||||||
// child: Text(
|
|
||||||
// "Icon",
|
|
||||||
// style: TextStyle(
|
|
||||||
// fontSize: 25,
|
|
||||||
// fontWeight: FontWeight.bold,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// Flexible(
|
|
||||||
// child: Text(
|
|
||||||
// "Creator",
|
|
||||||
// style: TextStyle(
|
|
||||||
// fontSize: 25,
|
|
||||||
// fontWeight: FontWeight.bold,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// Flexible(
|
|
||||||
// child: Text(
|
|
||||||
// "Link",
|
|
||||||
// style: TextStyle(
|
|
||||||
// fontSize: 25,
|
|
||||||
// fontWeight: FontWeight.bold,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// const Padding(
|
|
||||||
// padding: EdgeInsets.symmetric(vertical: 10.0),
|
|
||||||
// child: Divider(),
|
|
||||||
// ),
|
|
||||||
// displayIcon(MihIcons.mihLogo, "Tarah Meth",
|
|
||||||
// "https://app.mzansi-innovation-hub.co.za/"),
|
|
||||||
// const SizedBox(height: 10),
|
|
||||||
// displayIcon(MihIcons.mihLogo, "Test",
|
|
||||||
// "https://www.flaticon.com/free-icons/mih"),
|
|
||||||
// const SizedBox(height: 10),
|
|
||||||
// displayIcon(MihIcons.mihLogo, "Test",
|
|
||||||
// "https://www.flaticon.com/free-icons/mih"),
|
|
||||||
// const SizedBox(height: 10),
|
|
||||||
// displayIcon(MihIcons.mihLogo, "Test",
|
|
||||||
// "https://www.flaticon.com/free-icons/mih"),
|
|
||||||
// const SizedBox(height: 10),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
// )
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
|
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
|
||||||
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:mzansi_innovation_hub/main.dart';
|
import 'package:mzansi_innovation_hub/main.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_objects/profile_link.dart';
|
import 'package:mzansi_innovation_hub/mih_objects/profile_link.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_profile_links.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_profile_links.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_install_services.dart';
|
import 'package:mzansi_innovation_hub/mih_services/mih_install_services.dart';
|
||||||
@@ -432,7 +434,119 @@ class _MihInfoState extends State<MihInfo> {
|
|||||||
children: [
|
children: [
|
||||||
MihButton(
|
MihButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
if (MzansiInnovationHub.of(context)!.theme.getPlatform() ==
|
||||||
|
"Android") {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return MihPackageWindow(
|
||||||
|
fullscreen: false,
|
||||||
|
windowTitle: "Select Option",
|
||||||
|
onWindowTapClose: () {
|
||||||
|
context.pop();
|
||||||
|
},
|
||||||
|
windowBody: Column(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"Please select the platform you want to install/ Update MIH from",
|
||||||
|
style: TextStyle(
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 25),
|
||||||
|
MihButton(
|
||||||
|
onPressed: () {
|
||||||
|
launchSocialUrl(
|
||||||
|
Uri.parse(
|
||||||
|
"https://play.google.com/store/apps/details?id=za.co.mzansiinnovationhub.mih",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getGreenColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
FaIcon(
|
||||||
|
FontAwesomeIcons.googlePlay,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
|
"Dark"),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
Text(
|
||||||
|
"Play Store",
|
||||||
|
style: TextStyle(
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
|
MihButton(
|
||||||
|
onPressed: () {
|
||||||
|
launchSocialUrl(
|
||||||
|
Uri.parse(
|
||||||
|
"https://appgallery.huawei.com/app/C113315335?pkgName=za.co.mzansiinnovationhub.mih",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getGreenColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
FaIcon(
|
||||||
|
Icons.store,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
|
"Dark"),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
Text(
|
||||||
|
"App Gallery",
|
||||||
|
style: TextStyle(
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} else {
|
||||||
MihInstallServices().installMihTrigger(context);
|
MihInstallServices().installMihTrigger(context);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
buttonColor: MihColors.getGreenColor(
|
buttonColor: MihColors.getGreenColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
@@ -736,6 +850,14 @@ class _MihInfoState extends State<MihInfo> {
|
|||||||
destination: "Reddit",
|
destination: "Reddit",
|
||||||
web_link: "https://www.reddit.com/r/Mzani_Innovation_Hub/",
|
web_link: "https://www.reddit.com/r/Mzani_Innovation_Hub/",
|
||||||
),
|
),
|
||||||
|
ProfileLink(
|
||||||
|
idprofile_links: 1,
|
||||||
|
app_id: "1234",
|
||||||
|
business_id: "",
|
||||||
|
destination: "Git",
|
||||||
|
web_link:
|
||||||
|
"https://git.mzansi-innovation-hub.co.za/yaso_meth/mih-project",
|
||||||
|
),
|
||||||
];
|
];
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
@@ -752,7 +874,7 @@ class _MihInfoState extends State<MihInfo> {
|
|||||||
),
|
),
|
||||||
MihProfileLinks(links: links),
|
MihProfileLinks(links: links),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 25,
|
height: 75,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -290,6 +290,7 @@ class _CurrencyExchangeRateState extends State<CurrencyExchangeRate> {
|
|||||||
return Consumer<MihCalculatorProvider>(
|
return Consumer<MihCalculatorProvider>(
|
||||||
builder: (context, calculatorProvider, child) {
|
builder: (context, calculatorProvider, child) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ class _SimpleCalcState extends State<SimpleCalc> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
|||||||
@@ -259,6 +259,7 @@ class _TipCalcState extends State<TipCalc> {
|
|||||||
|
|
||||||
Widget getBody(double width) {
|
Widget getBody(double width) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
padding: MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:mzansi_innovation_hub/main.dart';
|
|||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
@@ -139,9 +140,8 @@ class _MihForgotPasswordState extends State<MihForgotPassword> {
|
|||||||
validateInput();
|
validateInput();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: SafeArea(
|
child: MihSingleChildScroll(
|
||||||
child: SingleChildScrollView(
|
scrollbarOn: true,
|
||||||
physics: const BouncingScrollPhysics(),
|
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
||||||
"desktop"
|
"desktop"
|
||||||
@@ -177,11 +177,9 @@ class _MihForgotPasswordState extends State<MihForgotPassword> {
|
|||||||
formFields: [
|
formFields: [
|
||||||
MihTextFormField(
|
MihTextFormField(
|
||||||
fillColor: MihColors.getSecondaryColor(
|
fillColor: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
"Dark"),
|
|
||||||
inputColor: MihColors.getPrimaryColor(
|
inputColor: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
"Dark"),
|
|
||||||
controller: emailController,
|
controller: emailController,
|
||||||
multiLineInput: false,
|
multiLineInput: false,
|
||||||
requiredText: true,
|
requiredText: true,
|
||||||
@@ -224,7 +222,6 @@ class _MihForgotPasswordState extends State<MihForgotPassword> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -205,6 +205,7 @@ class _MihRegisterState extends State<MihRegister> {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: MihSingleChildScroll(
|
child: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:mzansi_innovation_hub/main.dart';
|
|||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_text_form_field.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
@@ -104,9 +105,8 @@ class _MihResetPasswordState extends State<MihResetPassword> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: SafeArea(
|
child: MihSingleChildScroll(
|
||||||
child: SingleChildScrollView(
|
scrollbarOn: true,
|
||||||
physics: const BouncingScrollPhysics(),
|
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
@@ -142,11 +142,9 @@ class _MihResetPasswordState extends State<MihResetPassword> {
|
|||||||
formFields: [
|
formFields: [
|
||||||
MihTextFormField(
|
MihTextFormField(
|
||||||
fillColor: MihColors.getSecondaryColor(
|
fillColor: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
"Dark"),
|
|
||||||
inputColor: MihColors.getPrimaryColor(
|
inputColor: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
"Dark"),
|
|
||||||
controller: passwordController,
|
controller: passwordController,
|
||||||
multiLineInput: false,
|
multiLineInput: false,
|
||||||
requiredText: true,
|
requiredText: true,
|
||||||
@@ -161,11 +159,9 @@ class _MihResetPasswordState extends State<MihResetPassword> {
|
|||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
MihTextFormField(
|
MihTextFormField(
|
||||||
fillColor: MihColors.getSecondaryColor(
|
fillColor: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
"Dark"),
|
|
||||||
inputColor: MihColors.getPrimaryColor(
|
inputColor: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
"Dark"),
|
|
||||||
controller: confirmPasswordController,
|
controller: confirmPasswordController,
|
||||||
multiLineInput: false,
|
multiLineInput: false,
|
||||||
requiredText: true,
|
requiredText: true,
|
||||||
@@ -210,7 +206,6 @@ class _MihResetPasswordState extends State<MihResetPassword> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -202,6 +202,7 @@ class _MihSignInState extends State<MihSignIn> {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: MihSingleChildScroll(
|
child: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ class _MIHAppDrawerState extends State<MIHAppDrawer> {
|
|||||||
? mzansiProfileProvider.userProfilePicture
|
? mzansiProfileProvider.userProfilePicture
|
||||||
: mzansiProfileProvider.businessProfilePicture,
|
: mzansiProfileProvider.businessProfilePicture,
|
||||||
width: 60,
|
width: 60,
|
||||||
|
expandable: false,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: proPicController,
|
fileNameController: proPicController,
|
||||||
onChange: (_) {},
|
onChange: (_) {},
|
||||||
|
|||||||
@@ -353,6 +353,7 @@ class _MihHomeState extends State<MihHome> {
|
|||||||
key: Key(imageKey),
|
key: Key(imageKey),
|
||||||
imageFile: currentImage,
|
imageFile: currentImage,
|
||||||
width: 50,
|
width: 50,
|
||||||
|
expandable: false,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: null,
|
fileNameController: null,
|
||||||
userSelectedfile: null,
|
userSelectedfile: null,
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ class _BuildMinesweeperLeaderboardListState
|
|||||||
key: UniqueKey(),
|
key: UniqueKey(),
|
||||||
imageFile: imageFile,
|
imageFile: imageFile,
|
||||||
width: 80,
|
width: 80,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: null,
|
fileNameController: null,
|
||||||
userSelectedfile: null,
|
userSelectedfile: null,
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ class LeaderboardUserRanking extends StatelessWidget {
|
|||||||
.toString()), // Use ValueKey for stable identity
|
.toString()), // Use ValueKey for stable identity
|
||||||
imageFile: asyncSnapshot.data,
|
imageFile: asyncSnapshot.data,
|
||||||
width: 60,
|
width: 60,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: null,
|
fileNameController: null,
|
||||||
userSelectedfile: null,
|
userSelectedfile: null,
|
||||||
|
|||||||
@@ -626,6 +626,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
alignment: Alignment.topCenter,
|
alignment: Alignment.topCenter,
|
||||||
children: [
|
children: [
|
||||||
MihSingleChildScroll(
|
MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: board.isEmpty && squaresLeft < 0
|
child: board.isEmpty && squaresLeft < 0
|
||||||
// Start Up Message before setting up game
|
// Start Up Message before setting up game
|
||||||
? Padding(
|
? Padding(
|
||||||
|
|||||||
@@ -845,6 +845,7 @@ class _MineSweeperQuickStartGuideState
|
|||||||
|
|
||||||
Widget getBody(double width) {
|
Widget getBody(double width) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.symmetric(horizontal: width / 20),
|
padding: EdgeInsets.symmetric(horizontal: width / 20),
|
||||||
child: Column(
|
child: Column(
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ class _MihMineSweeperLeaderBoardState extends State<MyScoreBoard> {
|
|||||||
child: MihCircleAvatar(
|
child: MihCircleAvatar(
|
||||||
imageFile: profileProvider.userProfilePicture,
|
imageFile: profileProvider.userProfilePicture,
|
||||||
width: 150,
|
width: 150,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: null,
|
fileNameController: null,
|
||||||
userSelectedfile: null,
|
userSelectedfile: null,
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ class _MihContactsState extends State<MihContacts> {
|
|||||||
|
|
||||||
Widget getBody(double width) {
|
Widget getBody(double width) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
|
|||||||
@@ -330,6 +330,7 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
|
|||||||
} else if (directoryProvider.searchedBusinesses.isEmpty &&
|
} else if (directoryProvider.searchedBusinesses.isEmpty &&
|
||||||
directoryProvider.searchTerm.isNotEmpty) {
|
directoryProvider.searchTerm.isNotEmpty) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 50),
|
const SizedBox(height: 50),
|
||||||
@@ -357,6 +358,7 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
|
|||||||
} else if (directoryProvider.searchedBusinesses.isEmpty &&
|
} else if (directoryProvider.searchedBusinesses.isEmpty &&
|
||||||
directoryProvider.searchTerm.isEmpty) {
|
directoryProvider.searchTerm.isEmpty) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
||||||
child: Column(
|
child: Column(
|
||||||
@@ -472,6 +474,7 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
|
|||||||
} else if (directoryProvider.searchedUsers.isEmpty &&
|
} else if (directoryProvider.searchedUsers.isEmpty &&
|
||||||
directoryProvider.searchTerm.isEmpty) {
|
directoryProvider.searchTerm.isEmpty) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
||||||
child: Column(
|
child: Column(
|
||||||
@@ -533,6 +536,7 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
|
|||||||
} else if (directoryProvider.searchedUsers.isEmpty &&
|
} else if (directoryProvider.searchedUsers.isEmpty &&
|
||||||
directoryProvider.searchTerm.isNotEmpty) {
|
directoryProvider.searchTerm.isNotEmpty) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 50),
|
const SizedBox(height: 50),
|
||||||
|
|||||||
@@ -316,6 +316,7 @@ class _MihReviewBusinessWindowState extends State<MihReviewBusinessWindow> {
|
|||||||
]
|
]
|
||||||
: null,
|
: null,
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
||||||
"desktop"
|
"desktop"
|
||||||
|
|||||||
@@ -251,12 +251,15 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
context.pop();
|
context.pop();
|
||||||
},
|
},
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
? EdgeInsets.symmetric(horizontal: widget.width * 0.05)
|
? EdgeInsets.symmetric(horizontal: widget.width * 0.05)
|
||||||
: EdgeInsets.symmetric(horizontal: widget.width * 0),
|
: EdgeInsets.symmetric(horizontal: widget.width * 0),
|
||||||
child: Column(
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
children: [
|
children: [
|
||||||
MihForm(
|
MihForm(
|
||||||
formKey: _formKey,
|
formKey: _formKey,
|
||||||
@@ -265,8 +268,10 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
child: MihCircleAvatar(
|
child: MihCircleAvatar(
|
||||||
imageFile: newSelectedLogoPic != null
|
imageFile: newSelectedLogoPic != null
|
||||||
? MemoryImage(newSelectedLogoPic!.bytes!)
|
? MemoryImage(newSelectedLogoPic!.bytes!)
|
||||||
: mzansiProfileProvider.businessProfilePicture,
|
: mzansiProfileProvider
|
||||||
|
.businessProfilePicture,
|
||||||
width: 150,
|
width: 150,
|
||||||
|
expandable: false,
|
||||||
editable: true,
|
editable: true,
|
||||||
fileNameController: fileNameController,
|
fileNameController: fileNameController,
|
||||||
userSelectedfile: newSelectedLogoPic,
|
userSelectedfile: newSelectedLogoPic,
|
||||||
@@ -345,7 +350,8 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
requiredText: true,
|
requiredText: true,
|
||||||
hintText: "Business Email",
|
hintText: "Business Email",
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
return MihValidationServices().validateEmail(value);
|
return MihValidationServices()
|
||||||
|
.validateEmail(value);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
@@ -376,20 +382,29 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
initialSelection: countryCodeController.text,
|
initialSelection: countryCodeController.text,
|
||||||
showDropDownButton: false,
|
showDropDownButton: false,
|
||||||
pickerStyle: PickerStyle.bottomSheet,
|
pickerStyle: PickerStyle.bottomSheet,
|
||||||
dialogBackgroundColor: MihColors.getPrimaryColor(
|
dialogBackgroundColor:
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
barrierColor: MihColors.getPrimaryColor(
|
barrierColor: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: MihTextFormField(
|
child: MihTextFormField(
|
||||||
fillColor: MihColors.getSecondaryColor(
|
fillColor: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
inputColor: MihColors.getPrimaryColor(
|
inputColor: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
controller: contactController,
|
controller: contactController,
|
||||||
numberMode: true,
|
numberMode: true,
|
||||||
@@ -397,7 +412,8 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
requiredText: true,
|
requiredText: true,
|
||||||
hintText: null,
|
hintText: null,
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
return MihValidationServices().isEmpty(value);
|
return MihValidationServices()
|
||||||
|
.isEmpty(value);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -425,8 +441,8 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
height: 15,
|
height: 15,
|
||||||
child: ValueListenableBuilder(
|
child: ValueListenableBuilder(
|
||||||
valueListenable: _counter,
|
valueListenable: _counter,
|
||||||
builder:
|
builder: (BuildContext context, int value,
|
||||||
(BuildContext context, int value, Widget? child) {
|
Widget? child) {
|
||||||
return Row(
|
return Row(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
@@ -525,10 +541,14 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
Flexible(
|
Flexible(
|
||||||
child: MihTextFormField(
|
child: MihTextFormField(
|
||||||
fillColor: MihColors.getSecondaryColor(
|
fillColor: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
inputColor: MihColors.getPrimaryColor(
|
inputColor: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
controller: locationController,
|
controller: locationController,
|
||||||
multiLineInput: false,
|
multiLineInput: false,
|
||||||
@@ -562,7 +582,9 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
buttonColor: MihColors.getSecondaryColor(
|
buttonColor: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
width: 100,
|
width: 100,
|
||||||
child: Text(
|
child: Text(
|
||||||
@@ -598,7 +620,9 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
"Update",
|
"Update",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: MihColors.getPrimaryColor(
|
color: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
fontSize: 20,
|
fontSize: 20,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
@@ -611,6 +635,39 @@ class _MihUpdateBusinessDetailsWindowState
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
Positioned(
|
||||||
|
right: 0,
|
||||||
|
top: 0,
|
||||||
|
child: MihButton(
|
||||||
|
onPressed: () {
|
||||||
|
//Add validation here
|
||||||
|
if (_formKey.currentState!.validate()) {
|
||||||
|
submitForm(mzansiProfileProvider);
|
||||||
|
} else {
|
||||||
|
MihAlertServices().inputErrorAlert(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getGreenColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
width: 100,
|
||||||
|
height: 25,
|
||||||
|
child: Text(
|
||||||
|
mzansiProfileProvider.user!.username.isEmpty
|
||||||
|
? "Setup Profile"
|
||||||
|
: "Update",
|
||||||
|
style: TextStyle(
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import 'package:mzansi_innovation_hub/main.dart';
|
|||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_env.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_env.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_image_display.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_image_display.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart';
|
||||||
@@ -127,32 +126,35 @@ class _MihUpdateMyBusinessUserDetailsState
|
|||||||
builder: (BuildContext context,
|
builder: (BuildContext context,
|
||||||
MzansiProfileProvider mzansiProfileProvider, Widget? child) {
|
MzansiProfileProvider mzansiProfileProvider, Widget? child) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
||||||
: EdgeInsets.symmetric(horizontal: width * 0.075),
|
: EdgeInsets.symmetric(horizontal: width * 0.075),
|
||||||
child: Column(
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
children: [
|
children: [
|
||||||
MihForm(
|
MihForm(
|
||||||
formKey: _formKey,
|
formKey: _formKey,
|
||||||
formFields: [
|
formFields: [
|
||||||
Center(
|
// Center(
|
||||||
child: MihCircleAvatar(
|
// child: MihCircleAvatar(
|
||||||
imageFile: mzansiProfileProvider.userProfilePicture,
|
// imageFile: mzansiProfileProvider.userProfilePicture,
|
||||||
width: 150,
|
// width: 150,
|
||||||
editable: false,
|
// editable: false,
|
||||||
fileNameController: fileNameController,
|
// fileNameController: fileNameController,
|
||||||
userSelectedfile: userPicFile,
|
// userSelectedfile: userPicFile,
|
||||||
frameColor: MihColors.getSecondaryColor(
|
// frameColor: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
// MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
"Dark"),
|
// "Dark"),
|
||||||
backgroundColor: MihColors.getPrimaryColor(
|
// backgroundColor: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
// MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
"Dark"),
|
// "Dark"),
|
||||||
onChange: (_) {},
|
// onChange: (_) {},
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: false,
|
visible: false,
|
||||||
child: MihTextFormField(
|
child: MihTextFormField(
|
||||||
@@ -301,7 +303,9 @@ class _MihUpdateMyBusinessUserDetailsState
|
|||||||
"Update",
|
"Update",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: MihColors.getPrimaryColor(
|
color: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
fontSize: 20,
|
fontSize: 20,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
@@ -314,6 +318,35 @@ class _MihUpdateMyBusinessUserDetailsState
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 0,
|
||||||
|
right: 0,
|
||||||
|
child: MihButton(
|
||||||
|
onPressed: () {
|
||||||
|
if (_formKey.currentState!.validate()) {
|
||||||
|
submitForm(mzansiProfileProvider);
|
||||||
|
} else {
|
||||||
|
MihAlertServices().inputErrorAlert(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getGreenColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
width: 100,
|
||||||
|
height: 25,
|
||||||
|
child: Text(
|
||||||
|
"Update",
|
||||||
|
style: TextStyle(
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
|
import 'package:custom_rating_bar/custom_rating_bar.dart';
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
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_package_components/mih_business_info_card_v2.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart';
|
import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_business_info_card.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart';
|
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart';
|
||||||
@@ -60,18 +61,23 @@ class _MihBusinessDetailsState extends State<MihBusinessDetails> {
|
|||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
MihSingleChildScroll(
|
MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
||||||
"desktop"
|
"desktop"
|
||||||
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
||||||
: EdgeInsets.symmetric(horizontal: width * 0.075),
|
: EdgeInsets.symmetric(horizontal: width * 0),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Center(
|
Center(
|
||||||
child: MihCircleAvatar(
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
MihCircleAvatar(
|
||||||
key: UniqueKey(),
|
key: UniqueKey(),
|
||||||
imageFile: mzansiProfileProvider.businessProfilePicture,
|
imageFile:
|
||||||
|
mzansiProfileProvider.businessProfilePicture,
|
||||||
width: 150,
|
width: 150,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: fileNameController,
|
fileNameController: fileNameController,
|
||||||
userSelectedfile: newSelectedLogoPic,
|
userSelectedfile: newSelectedLogoPic,
|
||||||
@@ -87,6 +93,32 @@ class _MihBusinessDetailsState extends State<MihBusinessDetails> {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 5,
|
||||||
|
right: 5,
|
||||||
|
child: MihButton(
|
||||||
|
onPressed: () {
|
||||||
|
// editProfileWindow(width);
|
||||||
|
editBizProfileWindow(
|
||||||
|
mzansiProfileProvider, width);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getGreenColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
width: 35,
|
||||||
|
height: 35,
|
||||||
|
child: Icon(
|
||||||
|
Icons.edit,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
|
"Dark"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
FittedBox(
|
FittedBox(
|
||||||
child: Text(
|
child: Text(
|
||||||
@@ -112,6 +144,30 @@ class _MihBusinessDetailsState extends State<MihBusinessDetails> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
RatingBar.readOnly(
|
||||||
|
size: 50,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
filledIcon: Icons.star,
|
||||||
|
emptyIcon: Icons.star_border,
|
||||||
|
halfFilledIcon: Icons.star_half,
|
||||||
|
filledColor: MihColors.getYellowColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
// MihColors.getPrimaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
emptyColor: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
halfFilledColor: MihColors.getYellowColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
// MihColors.getPrimaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
isHalfAllowed: true,
|
||||||
|
initialRating: mzansiProfileProvider
|
||||||
|
.business!.rating.isNotEmpty
|
||||||
|
? double.parse(mzansiProfileProvider.business!.rating)
|
||||||
|
: 0,
|
||||||
|
maxRating: 5,
|
||||||
|
),
|
||||||
const SizedBox(height: 5),
|
const SizedBox(height: 5),
|
||||||
Center(
|
Center(
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
@@ -133,68 +189,16 @@ class _MihBusinessDetailsState extends State<MihBusinessDetails> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
SizedBox(
|
MihBusinessCardV2(
|
||||||
width: 700,
|
|
||||||
child: MihBusinessCard(
|
|
||||||
business: mzansiProfileProvider.business!,
|
business: mzansiProfileProvider.business!,
|
||||||
// startUpSearch: null,
|
// startUpSearch: null,
|
||||||
width: width,
|
width: width,
|
||||||
),
|
),
|
||||||
),
|
|
||||||
const SizedBox(height: 30.0),
|
const SizedBox(height: 30.0),
|
||||||
Center(
|
|
||||||
child: MihButton(
|
|
||||||
onPressed: () {
|
|
||||||
// Connect with the user
|
|
||||||
editBizProfileWindow(mzansiProfileProvider, width);
|
|
||||||
},
|
|
||||||
buttonColor: MihColors.getGreenColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
|
||||||
"Dark"),
|
|
||||||
width: 300,
|
|
||||||
child: Text(
|
|
||||||
"Edit Profile",
|
|
||||||
style: TextStyle(
|
|
||||||
color: MihColors.getPrimaryColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
|
||||||
"Dark"),
|
|
||||||
fontSize: 20,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// Positioned(
|
|
||||||
// right: 5,
|
|
||||||
// bottom: 10,
|
|
||||||
// child: MihFloatingMenu(
|
|
||||||
// animatedIcon: AnimatedIcons.menu_close,
|
|
||||||
// children: [
|
|
||||||
// SpeedDialChild(
|
|
||||||
// child: Icon(
|
|
||||||
// Icons.edit,
|
|
||||||
// color: MihColors.getPrimaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
|
||||||
// ),
|
|
||||||
// label: "Edit Profile",
|
|
||||||
// labelBackgroundColor:
|
|
||||||
// MihColors.getGreenColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
|
||||||
// labelStyle: TextStyle(
|
|
||||||
// color: MihColors.getPrimaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
|
||||||
// fontWeight: FontWeight.bold,
|
|
||||||
// ),
|
|
||||||
// backgroundColor:
|
|
||||||
// MihColors.getGreenColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
|
||||||
// onTap: () {
|
|
||||||
// editBizProfileWindow(width);
|
|
||||||
// },
|
|
||||||
// )
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -330,6 +330,7 @@ class _MihBusinessDetailsSetUpState extends State<MihBusinessDetailsSetUp> {
|
|||||||
? MemoryImage(newSelectedLogoPic!.bytes!)
|
? MemoryImage(newSelectedLogoPic!.bytes!)
|
||||||
: mzansiProfileProvider.businessProfilePicture,
|
: mzansiProfileProvider.businessProfilePicture,
|
||||||
width: 150,
|
width: 150,
|
||||||
|
expandable: false,
|
||||||
editable: true,
|
editable: true,
|
||||||
fileNameController: logoFileNameController,
|
fileNameController: logoFileNameController,
|
||||||
userSelectedfile: newSelectedLogoPic,
|
userSelectedfile: newSelectedLogoPic,
|
||||||
@@ -765,7 +766,7 @@ class _MihBusinessDetailsSetUpState extends State<MihBusinessDetailsSetUp> {
|
|||||||
"Dark"),
|
"Dark"),
|
||||||
width: 300,
|
width: 300,
|
||||||
child: Text(
|
child: Text(
|
||||||
"Add",
|
"Set Up Buasiness",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: MihColors.getPrimaryColor(
|
color: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ import 'package:custom_rating_bar/custom_rating_bar.dart';
|
|||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
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_package_components/mih_business_info_card_v2.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart';
|
import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_business_info_card.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart';
|
import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart';
|
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart';
|
||||||
@@ -58,11 +58,12 @@ class _MihBusinessDetailsViewState extends State<MihBusinessDetailsView> {
|
|||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
MihSingleChildScroll(
|
MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
||||||
"desktop"
|
"desktop"
|
||||||
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
? EdgeInsets.symmetric(horizontal: width * 0.2)
|
||||||
: EdgeInsets.symmetric(horizontal: width * 0.075),
|
: EdgeInsets.symmetric(horizontal: width * 0),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
FutureBuilder(
|
FutureBuilder(
|
||||||
@@ -76,6 +77,7 @@ class _MihBusinessDetailsViewState extends State<MihBusinessDetailsView> {
|
|||||||
imageFile: CachedNetworkImageProvider(
|
imageFile: CachedNetworkImageProvider(
|
||||||
asyncSnapshot.requireData),
|
asyncSnapshot.requireData),
|
||||||
width: profilePictureWidth,
|
width: profilePictureWidth,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: TextEditingController(),
|
fileNameController: TextEditingController(),
|
||||||
userSelectedfile: file,
|
userSelectedfile: file,
|
||||||
@@ -154,40 +156,6 @@ class _MihBusinessDetailsViewState extends State<MihBusinessDetailsView> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 5),
|
|
||||||
// FittedBox(
|
|
||||||
// child: Text(
|
|
||||||
// "Mission & Vision",
|
|
||||||
// style: TextStyle(
|
|
||||||
// fontSize: 15,
|
|
||||||
// fontWeight: FontWeight.bold,
|
|
||||||
// color: MzansiInnovationHub.of(context)!
|
|
||||||
// .theme
|
|
||||||
// .secondaryColor(),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
Center(
|
|
||||||
child: SizedBox(
|
|
||||||
width: 700,
|
|
||||||
child: Text(
|
|
||||||
directoryProvider
|
|
||||||
.selectedBusiness!.mission_vision.isNotEmpty
|
|
||||||
? directoryProvider
|
|
||||||
.selectedBusiness!.mission_vision
|
|
||||||
: "No Mission & Vision added yet",
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 15,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
color: MihColors.getSecondaryColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
|
||||||
"Dark"),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 10),
|
|
||||||
RatingBar.readOnly(
|
RatingBar.readOnly(
|
||||||
size: 50,
|
size: 50,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
@@ -213,14 +181,32 @@ class _MihBusinessDetailsViewState extends State<MihBusinessDetailsView> {
|
|||||||
: 0,
|
: 0,
|
||||||
maxRating: 5,
|
maxRating: 5,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 5),
|
||||||
SizedBox(
|
Center(
|
||||||
|
child: SizedBox(
|
||||||
width: 700,
|
width: 700,
|
||||||
child: MihBusinessCard(
|
child: Text(
|
||||||
|
directoryProvider
|
||||||
|
.selectedBusiness!.mission_vision.isNotEmpty
|
||||||
|
? directoryProvider
|
||||||
|
.selectedBusiness!.mission_vision
|
||||||
|
: "No Mission & Vision added yet",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
MihBusinessCardV2(
|
||||||
business: directoryProvider.selectedBusiness!,
|
business: directoryProvider.selectedBusiness!,
|
||||||
width: width,
|
width: width,
|
||||||
),
|
),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -211,6 +211,7 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
|
|||||||
imageFile: CachedNetworkImageProvider(
|
imageFile: CachedNetworkImageProvider(
|
||||||
asyncSnapshot.requireData),
|
asyncSnapshot.requireData),
|
||||||
width: profilePictureWidth,
|
width: profilePictureWidth,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: TextEditingController(),
|
fileNameController: TextEditingController(),
|
||||||
userSelectedfile: file,
|
userSelectedfile: file,
|
||||||
@@ -298,7 +299,9 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
|
|||||||
height: 300,
|
height: 300,
|
||||||
child: CachedNetworkImage(
|
child: CachedNetworkImage(
|
||||||
imageUrl: getQrCodeData(qrSize.toInt()),
|
imageUrl: getQrCodeData(qrSize.toInt()),
|
||||||
placeholder: (context, url) => const Mihloadingcircle(),
|
placeholder: (context, url) => FittedBox(
|
||||||
|
child: const Mihloadingcircle(),
|
||||||
|
),
|
||||||
errorWidget: (context, url, error) =>
|
errorWidget: (context, url, error) =>
|
||||||
const Icon(Icons.error),
|
const Icon(Icons.error),
|
||||||
),
|
),
|
||||||
@@ -367,6 +370,7 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
|
|||||||
alignment: Alignment.topCenter,
|
alignment: Alignment.topCenter,
|
||||||
children: [
|
children: [
|
||||||
MihSingleChildScroll(
|
MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 15.0),
|
padding: const EdgeInsets.symmetric(horizontal: 15.0),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ class _MihMyBusinessUserState extends State<MihMyBusinessUser> {
|
|||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
MihSingleChildScroll(
|
MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
padding: MzansiInnovationHub.of(context)!.theme.screenType ==
|
||||||
"desktop"
|
"desktop"
|
||||||
@@ -183,9 +184,12 @@ class _MihMyBusinessUserState extends State<MihMyBusinessUser> {
|
|||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Center(
|
Center(
|
||||||
child: MihCircleAvatar(
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
MihCircleAvatar(
|
||||||
imageFile: mzansiProfileProvider.userProfilePicture,
|
imageFile: mzansiProfileProvider.userProfilePicture,
|
||||||
width: 150,
|
width: 150,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: fileNameController,
|
fileNameController: fileNameController,
|
||||||
userSelectedfile: userPicFile,
|
userSelectedfile: userPicFile,
|
||||||
@@ -197,6 +201,31 @@ class _MihMyBusinessUserState extends State<MihMyBusinessUser> {
|
|||||||
"Dark"),
|
"Dark"),
|
||||||
onChange: (_) {},
|
onChange: (_) {},
|
||||||
),
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 5,
|
||||||
|
right: 5,
|
||||||
|
child: MihButton(
|
||||||
|
onPressed: () {
|
||||||
|
editBizUserProfileWindow(
|
||||||
|
mzansiProfileProvider, width);
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getGreenColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
width: 35,
|
||||||
|
height: 35,
|
||||||
|
child: Icon(
|
||||||
|
Icons.edit,
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
|
"Dark"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
buildEmployeeInfoCard(mzansiProfileProvider),
|
buildEmployeeInfoCard(mzansiProfileProvider),
|
||||||
@@ -245,28 +274,6 @@ class _MihMyBusinessUserState extends State<MihMyBusinessUser> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
Center(
|
|
||||||
child: MihButton(
|
|
||||||
onPressed: () {
|
|
||||||
editBizUserProfileWindow(
|
|
||||||
mzansiProfileProvider, width);
|
|
||||||
},
|
|
||||||
buttonColor: MihColors.getGreenColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
|
||||||
"Dark"),
|
|
||||||
width: 300,
|
|
||||||
child: Text(
|
|
||||||
"Edit Profile",
|
|
||||||
style: TextStyle(
|
|
||||||
color: MihColors.getPrimaryColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
|
||||||
"Dark"),
|
|
||||||
fontSize: 20,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -329,7 +329,9 @@ class _MihEditPersonalProfileWindowState
|
|||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
? EdgeInsets.symmetric(horizontal: screenWidth * 0.05)
|
? EdgeInsets.symmetric(horizontal: screenWidth * 0.05)
|
||||||
: EdgeInsets.symmetric(horizontal: screenWidth * 0),
|
: EdgeInsets.symmetric(horizontal: screenWidth * 0),
|
||||||
child: Column(
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
MihForm(
|
MihForm(
|
||||||
@@ -341,6 +343,7 @@ class _MihEditPersonalProfileWindowState
|
|||||||
? MemoryImage(newSelectedProPic!.bytes!)
|
? MemoryImage(newSelectedProPic!.bytes!)
|
||||||
: mzansiProfileProvider.userProfilePicture,
|
: mzansiProfileProvider.userProfilePicture,
|
||||||
width: 150,
|
width: 150,
|
||||||
|
expandable: false,
|
||||||
editable: true,
|
editable: true,
|
||||||
fileNameController: proPicController,
|
fileNameController: proPicController,
|
||||||
userSelectedfile: newSelectedProPic,
|
userSelectedfile: newSelectedProPic,
|
||||||
@@ -387,7 +390,8 @@ class _MihEditPersonalProfileWindowState
|
|||||||
requiredText: true,
|
requiredText: true,
|
||||||
hintText: "Username",
|
hintText: "Username",
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
return MihValidationServices().validateUsername(value);
|
return MihValidationServices()
|
||||||
|
.validateUsername(value);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10.0),
|
const SizedBox(height: 10.0),
|
||||||
@@ -444,8 +448,8 @@ class _MihEditPersonalProfileWindowState
|
|||||||
height: 15,
|
height: 15,
|
||||||
child: ValueListenableBuilder(
|
child: ValueListenableBuilder(
|
||||||
valueListenable: _counter,
|
valueListenable: _counter,
|
||||||
builder:
|
builder: (BuildContext context, int value,
|
||||||
(BuildContext context, int value, Widget? child) {
|
Widget? child) {
|
||||||
return Row(
|
return Row(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
@@ -508,7 +512,9 @@ class _MihEditPersonalProfileWindowState
|
|||||||
: "Update",
|
: "Update",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: MihColors.getPrimaryColor(
|
color: MihColors.getPrimaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!
|
||||||
|
.theme
|
||||||
|
.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
fontSize: 20,
|
fontSize: 20,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
@@ -520,6 +526,38 @@ class _MihEditPersonalProfileWindowState
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
Positioned(
|
||||||
|
right: 0,
|
||||||
|
top: 0,
|
||||||
|
child: MihButton(
|
||||||
|
onPressed: () {
|
||||||
|
//Add validation here
|
||||||
|
if (_formKey.currentState!.validate()) {
|
||||||
|
submitForm(mzansiProfileProvider);
|
||||||
|
} else {
|
||||||
|
MihAlertServices().inputErrorAlert(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
buttonColor: MihColors.getGreenColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
width: 100,
|
||||||
|
height: 25,
|
||||||
|
child: Text(
|
||||||
|
mzansiProfileProvider.user!.username.isEmpty
|
||||||
|
? "Setup Profile"
|
||||||
|
: "Update",
|
||||||
|
style: TextStyle(
|
||||||
|
color: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ class _MihPersonalProfileState extends State<MihPersonalProfile> {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
@@ -159,6 +160,7 @@ class _MihPersonalProfileState extends State<MihPersonalProfile> {
|
|||||||
MihCircleAvatar(
|
MihCircleAvatar(
|
||||||
imageFile: mzansiProfileProvider.userProfilePicture,
|
imageFile: mzansiProfileProvider.userProfilePicture,
|
||||||
width: 150,
|
width: 150,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: proPicController,
|
fileNameController: proPicController,
|
||||||
userSelectedfile: newSelectedProPic,
|
userSelectedfile: newSelectedProPic,
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class _MihPersonalProfileViewState extends State<MihPersonalProfileView> {
|
|||||||
builder: (BuildContext context, MzansiDirectoryProvider directoryProvider,
|
builder: (BuildContext context, MzansiDirectoryProvider directoryProvider,
|
||||||
Widget? child) {
|
Widget? child) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
|
||||||
@@ -73,6 +74,7 @@ class _MihPersonalProfileViewState extends State<MihPersonalProfileView> {
|
|||||||
imageFile: CachedNetworkImageProvider(
|
imageFile: CachedNetworkImageProvider(
|
||||||
asyncSnapshot.requireData),
|
asyncSnapshot.requireData),
|
||||||
width: profilePictureWidth,
|
width: profilePictureWidth,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: TextEditingController(),
|
fileNameController: TextEditingController(),
|
||||||
userSelectedfile: file,
|
userSelectedfile: file,
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ class _MihPersonalSettingsState extends State<MihPersonalSettings> {
|
|||||||
|
|
||||||
Widget getBody(MzansiProfileProvider mzansiProfileProvider) {
|
Widget getBody(MzansiProfileProvider mzansiProfileProvider) {
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Center(
|
Center(
|
||||||
|
|||||||
@@ -306,6 +306,7 @@ class _PatientInfoState extends State<PatientInfo> {
|
|||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
MihSingleChildScroll(
|
MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
@@ -313,6 +314,7 @@ class _PatientInfoState extends State<PatientInfo> {
|
|||||||
imageFile:
|
imageFile:
|
||||||
patientManagerProvider.selectedPatientProfilePicture,
|
patientManagerProvider.selectedPatientProfilePicture,
|
||||||
width: 160,
|
width: 160,
|
||||||
|
expandable: true,
|
||||||
editable: false,
|
editable: false,
|
||||||
fileNameController: null,
|
fileNameController: null,
|
||||||
userSelectedfile: null,
|
userSelectedfile: null,
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class MzansiAiProvider extends ChangeNotifier {
|
|||||||
ollamaProvider = OllamaProvider(
|
ollamaProvider = OllamaProvider(
|
||||||
baseUrl: "${AppEnviroment.baseAiUrl}/api",
|
baseUrl: "${AppEnviroment.baseAiUrl}/api",
|
||||||
model: AppEnviroment.getEnv() == "Prod"
|
model: AppEnviroment.getEnv() == "Prod"
|
||||||
? 'qwen3-vl:8b'
|
? 'qwen3-vl:8b-instruct'
|
||||||
: "qwen3-vl:2b-instruct",
|
: "qwen3-vl:2b-instruct",
|
||||||
think: false,
|
think: false,
|
||||||
systemPrompt: "---INSTRUCTION START---\n"
|
systemPrompt: "---INSTRUCTION START---\n"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -109,6 +110,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -186,6 +188,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -298,6 +301,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -416,6 +420,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -493,6 +498,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -594,6 +600,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -671,6 +678,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -748,6 +756,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getSecondaryColor(
|
backgroundColor: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -830,6 +839,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getSecondaryColor(
|
backgroundColor: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -900,6 +910,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -1007,6 +1018,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getGreenColor(
|
backgroundColor: MihColors.getGreenColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -1089,6 +1101,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getGreenColor(
|
backgroundColor: MihColors.getGreenColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -1159,6 +1172,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -1244,6 +1258,7 @@ class MihAlertServices {
|
|||||||
backgroundColor: MihColors.getRedColor(
|
backgroundColor: MihColors.getRedColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode != "Dark"),
|
||||||
windowBody: MihSingleChildScroll(
|
windowBody: MihSingleChildScroll(
|
||||||
|
scrollbarOn: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
name: mzansi_innovation_hub
|
name: mzansi_innovation_hub
|
||||||
description: ""
|
description: ""
|
||||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||||
version: 1.2.5+126
|
version: 1.2.6+129
|
||||||
# version: 1.1.1+97 #--- Updated version for upgrader package testing
|
# version: 1.1.1+97 #--- Updated version for upgrader package testing
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
Reference in New Issue
Block a user