diff --git a/.DS_Store b/.DS_Store index 45ec2a2d..bb29be06 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 3192a264..d6c36b79 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,12 @@ -# *database/auto.cnf -# *database/binlog.index -# *database/mysql.sock -File_Storage -database/ +mih_minio/ +mih_db/ +mih_git/ +mih_nginx/ +mih_monitor/ +mih_wp/ certbot/ Firebase-emulator/ Mzansi_Mail/ -# database/ibdata1 -# database/mysql.ibd -# database/undo* -# database/#innodb_redo/#ib_redo* .venv google-chrome-stable_current_amd64.deb .env diff --git a/.vscode/launch.json b/.vscode/launch.json index 1727d8f0..e21f3f8c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,14 +6,14 @@ "configurations": [ { "name": "Debug", - "cwd": "Frontend", + "cwd": "mih_ui", "request": "launch", "type": "dart", "program": "lib/main_dev.dart" }, { "name": "Profile", - "cwd": "Frontend", + "cwd": "mih_ui", "request": "launch", "type": "dart", "flutterMode": "profile", @@ -21,7 +21,7 @@ }, { "name": "Release", - "cwd": "Frontend", + "cwd": "mih_ui", "request": "launch", "type": "dart", "flutterMode": "release", diff --git a/Frontend/.metadata b/Frontend/.metadata deleted file mode 100644 index 369b5ece..00000000 --- a/Frontend/.metadata +++ /dev/null @@ -1,45 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: "8defaa71a77c16e8547abdbfad2053ce3a6e2d5b" - channel: "stable" - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - base_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - - platform: android - create_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - base_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - - platform: ios - create_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - base_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - - platform: linux - create_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - base_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - - platform: macos - create_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - base_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - - platform: web - create_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - base_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - - platform: windows - create_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - base_revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/Frontend/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/Frontend/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 05feb272..00000000 Binary files a/Frontend/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/Frontend/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png deleted file mode 100644 index 64e9ebd5..00000000 Binary files a/Frontend/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/Frontend/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index 1b92456d..00000000 Binary files a/Frontend/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/Frontend/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index ad2ee7cc..00000000 Binary files a/Frontend/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/Frontend/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index a48bf43b..00000000 Binary files a/Frontend/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/Frontend/android/app/src/main/res/mipmap-hdpi/launcher_icon.png deleted file mode 100644 index 8f34cbf2..00000000 Binary files a/Frontend/android/app/src/main/res/mipmap-hdpi/launcher_icon.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/mipmap-mdpi/launcher_icon.png b/Frontend/android/app/src/main/res/mipmap-mdpi/launcher_icon.png deleted file mode 100644 index 935dc98a..00000000 Binary files a/Frontend/android/app/src/main/res/mipmap-mdpi/launcher_icon.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/Frontend/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png deleted file mode 100644 index 69af77d0..00000000 Binary files a/Frontend/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/Frontend/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png deleted file mode 100644 index 7efcae44..00000000 Binary files a/Frontend/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/Frontend/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png deleted file mode 100644 index 4851d018..00000000 Binary files a/Frontend/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png and /dev/null differ diff --git a/Frontend/android/app/src/main/res/values/colors.xml b/Frontend/android/app/src/main/res/values/colors.xml deleted file mode 100644 index ebc7fcbd..00000000 --- a/Frontend/android/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - #6641b2 - - #6641b2 - #E0D1FF - - - \ No newline at end of file diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index eb0d9681..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 50448018..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 1e83b209..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 219448ba..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 005256df..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index cc0e28c6..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index f3eff92c..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 1e83b209..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 7b301398..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a4e616cd..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png deleted file mode 100644 index 256a7dcf..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png deleted file mode 100644 index ed9c8e49..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png deleted file mode 100644 index f04afdd6..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png deleted file mode 100644 index 9c8a5ee9..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a4e616cd..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index d66e8d6f..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png deleted file mode 100644 index 8f34cbf2..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png deleted file mode 100644 index 7efcae44..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 97adcb5a..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index f5e89303..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 5c581327..00000000 Binary files a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/Frontend/lib/mih_config/mih_theme.dart b/Frontend/lib/mih_config/mih_theme.dart deleted file mode 100644 index 7d102ad2..00000000 --- a/Frontend/lib/mih_config/mih_theme.dart +++ /dev/null @@ -1,321 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import "package:universal_html/html.dart" as html; - -class MihTheme { - // late int _mainColor; - // late int _secondColor; - //late int _errColor; - //late int _succColor; - // late int _mesColor; - late String mode; - late String screenType; - late AssetImage loading; - late String loadingAssetText; - late TargetPlatform platform; - bool kIsWeb = const bool.fromEnvironment('dart.library.js_util'); - String latestVersion = "1.2.4"; - // Options:- - // f3f9d2 = Cream - // f0f0c9 = cream2 - // caffd0 = light green - // B0F2B4 = light grean 2 * - // 85bda6 = light green 3 - // 70f8ba = green - // F7F3EA = white - // a63446 = red - //747474 - - MihTheme() { - mode = "Dark"; - //_errColor = 0xffD87E8B; - //_succColor = 0xffB0F2B4; - //_mesColor = 0xffc8c8c8d9; - } - - ThemeData getData(bool bool) { - return ThemeData( - fontFamily: 'Segoe UI', - scaffoldBackgroundColor: MihColors.getPrimaryColor(mode == "Dark"), - // pageTransitionsTheme: PageTransitionsTheme( - // builders: Map.fromIterable( - // TargetPlatform.values, - // value: (dynamic _) => const FadeUpwardsPageTransitionsBuilder(), - // ), - // ), - colorScheme: ColorScheme( - brightness: getBritness(), - primary: MihColors.getSecondaryColor(mode == "Dark"), - onPrimary: MihColors.getPrimaryColor(mode == "Dark"), - secondary: MihColors.getPrimaryColor(mode == "Dark"), - onSecondary: MihColors.getSecondaryColor(mode == "Dark"), - error: MihColors.getRedColor(mode == "Dark"), - onError: MihColors.getPrimaryColor(mode == "Dark"), - surface: MihColors.getPrimaryColor(mode == "Dark"), - onSurface: MihColors.getSecondaryColor(mode == "Dark"), - ), - datePickerTheme: DatePickerThemeData( - backgroundColor: MihColors.getPrimaryColor(mode == "Dark"), - headerBackgroundColor: MihColors.getSecondaryColor(mode == "Dark"), - headerForegroundColor: MihColors.getPrimaryColor(mode == "Dark"), - ), - appBarTheme: AppBarTheme( - color: MihColors.getSecondaryColor(mode == "Dark"), - foregroundColor: MihColors.getPrimaryColor(mode == "Dark"), - titleTextStyle: TextStyle( - color: MihColors.getPrimaryColor(mode == "Dark"), - fontSize: 25, - fontWeight: FontWeight.bold, - ), - ), - floatingActionButtonTheme: FloatingActionButtonThemeData( - backgroundColor: MihColors.getSecondaryColor(mode == "Dark"), - foregroundColor: MihColors.getPrimaryColor(mode == "Dark"), - extendedTextStyle: - TextStyle(color: MihColors.getPrimaryColor(mode == "Dark")), - ), - drawerTheme: DrawerThemeData( - backgroundColor: MihColors.getPrimaryColor(mode == "Dark"), - ), - // Text selection / cursor color - textSelectionTheme: TextSelectionThemeData( - cursorColor: MihColors.getPrimaryColor(mode == "Dark"), - selectionColor: - MihColors.getPrimaryColor(mode == "Dark").withOpacity(0.25), - selectionHandleColor: MihColors.getPrimaryColor(mode == "Dark"), - ), - tooltipTheme: TooltipThemeData( - decoration: BoxDecoration( - color: MihColors.getSecondaryColor(mode == "Dark"), - borderRadius: BorderRadius.circular(6), - border: Border.all( - width: 1.0, - color: MihColors.getPrimaryColor(mode == "Dark"), - ), - boxShadow: [ - BoxShadow( - color: - MihColors.getPrimaryColor(mode == "Dark").withOpacity(0.18), - blurRadius: 6, - offset: const Offset(0, 2), - ), - ], - ), - textStyle: TextStyle( - color: MihColors.getPrimaryColor(mode == "Dark"), - fontSize: 13, - height: 1.2, - ), - waitDuration: const Duration(milliseconds: 500), - showDuration: const Duration(seconds: 3), - preferBelow: true, - verticalOffset: 24, - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - triggerMode: TooltipTriggerMode.longPress, - ), - // // Input decoration (text fields) theme - // inputDecorationTheme: InputDecorationTheme( - // filled: true, - // fillColor: mode == "Dark" - // ? MihColors.getPrimaryColor(true).withOpacity(0.06) - // : MihColors.getPrimaryColor(false).withOpacity(0.03), - // contentPadding: - // const EdgeInsets.symmetric(horizontal: 12, vertical: 10), - // border: OutlineInputBorder( - // borderRadius: BorderRadius.circular(8), - // borderSide: - // BorderSide(color: MihColors.getSecondaryColor(mode == "Dark")), - // ), - // enabledBorder: OutlineInputBorder( - // borderRadius: BorderRadius.circular(8), - // borderSide: BorderSide( - // color: - // MihColors.getSecondaryColor(mode == "Dark").withOpacity(0.6)), - // ), - // focusedBorder: OutlineInputBorder( - // borderRadius: BorderRadius.circular(8), - // borderSide: BorderSide( - // color: MihColors.getSecondaryColor(mode == "Dark"), width: 2), - // ), - // hintStyle: TextStyle( - // color: - // MihColors.getSecondaryColor(mode == "Dark").withOpacity(0.7)), - // labelStyle: - // TextStyle(color: MihColors.getSecondaryColor(mode == "Dark")), - // errorStyle: TextStyle(color: MihColors.getRedColor(mode == "Dark")), - // ), - ); - } - - String getPlatform() { - // if (isPwa()) { - // if (platform == TargetPlatform.android) { - // return "Android"; - // } else if (platform == TargetPlatform.iOS) { - // return "iOS"; - // } - // } else - if (kIsWeb) { - return "Web"; - } else if (!kIsWeb) { - if (platform == TargetPlatform.android) { - return "Android"; - } else if (platform == TargetPlatform.iOS) { - return "iOS"; - } - } - return "Other"; - } - - bool isPwa() { - return html.window.matchMedia('(display-mode: standalone)').matches; - } - - void setMode(String m) { - mode; - } - - String getLatestVersion() { - return latestVersion; - } - - ThemeData getThemeData() { - return getData(mode == "Dark"); - } - - ThemeData darkMode() { - return getData(mode == "Dark"); - } - - ThemeData lightMode() { - return getData(mode == "Dark"); - } - - Brightness getBritness() { - if (mode == "Dark") { - return Brightness.dark; - } else { - return Brightness.light; - } - } - - // Color messageTextColor() { - // if (mode == "Dark") { - // _mesColor = 0XFFc8c8c8; - // } else { - // _mesColor = 0XFF747474; - // } - // return Color(_mesColor); - // } - - // Color errorColor() { - // if (mode == "Dark") { - // return const Color(0xffD87E8B); - // } else { - // return const Color(0xffbb3d4f); - // } - // //return Color(_errColor); - // } - - // Color highlightColor() { - // if (mode == "Dark") { - // return const Color(0XFF9bc7fa); - // } else { - // return const Color(0XFF354866); - // } - // } - - // Color successColor() { - // if (mode == "Dark") { - // return const Color(0xffB0F2B4); - // } else { - // return const Color(0xff56a95b); - // } - // } - - // AssetImage loadingImage() { - // if (mode == "Dark") { - // loading = const AssetImage( - // 'lib/mih_package_components/assets/images/loading_light.gif', - // ); - // } else { - // loading = const AssetImage( - // 'lib/mih_package_components/assets/images/loading_dark.gif', - // ); - // } - // return loading; - // } - - // AssetImage altLoadingImage() { - // if (mode == "Dark") { - // loading = const AssetImage( - // 'lib/mih_package_components/assets/images/loading_dark.gif', - // ); - // } else { - // loading = const AssetImage( - // 'lib/mih_package_components/assets/images/loading_light.gif', - // ); - // } - // return loading; - // } - - // String loadingImageLocation() { - // if (mode == "Dark") { - // loadingAssetText = - // 'lib/mih_package_components/assets/images/loading_light.gif'; - // } else { - // loadingAssetText = - // 'lib/mih_package_components/assets/images/loading_dark.gif'; - // } - // return loadingAssetText; - // } - - // String altLoadingImageLocation() { - // if (mode == "Dark") { - // loadingAssetText = - // 'lib/mih_package_components/assets/images/loading_dark.gif'; - // } else { - // loadingAssetText = - // 'lib/mih_package_components/assets/images/loading_light.gif'; - // } - // return loadingAssetText; - // } - - // AssetImage aiLogoImage() { - // if (mode == "Dark") { - // return const AssetImage( - // 'lib/mih_package_components/assets/images/mzansi_ai-dark.png', - // ); - // } else { - // return const AssetImage( - // 'lib/mih_package_components/assets/images/mzansi_ai-light.png', - // ); - // } - // } - - void setScreenType(double width) { - if (width <= 800) { - screenType = "mobile"; - } else { - screenType = "desktop"; - } - } - - // Color MihColors.getPrimaryColor(mode == "Dark") { - // if (mode == "Dark") { - // _mainColor = 0XFF3A4454; - // } else { - // _mainColor = 0XFFbedcfe; - // } - // return Color(_mainColor); - // } - -// Color MihColors.getSecondaryColor(mode == "Dark") { -// if (mode == "Dark") { -// _secondColor = 0XFFbedcfe; -// } else { -// _secondColor = 0XFF3A4454; -// } -// return Color(_secondColor); -// } -} diff --git a/Frontend/lib/mih_package_components/mih_dropdwn_field.dart b/Frontend/lib/mih_package_components/mih_dropdwn_field.dart deleted file mode 100644 index 9c0d6154..00000000 --- a/Frontend/lib/mih_package_components/mih_dropdwn_field.dart +++ /dev/null @@ -1,248 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; - -class MihDropdownField extends StatefulWidget { - final TextEditingController controller; - final String hintText; - final bool requiredText; - final List dropdownOptions; - final bool editable; - final bool enableSearch; - final FormFieldValidator? validator; - final Function(String?)? onSelected; - - const MihDropdownField({ - super.key, - required this.controller, - required this.hintText, - required this.dropdownOptions, - required this.requiredText, - required this.editable, - required this.enableSearch, - this.validator, - this.onSelected, - }); - - @override - State createState() => _MihDropdownFieldState(); -} - -class _MihDropdownFieldState extends State { - late List> menu; - - List> buildMenuOptions(List options) { - List> menuList = []; - for (final i in options) { - menuList.add(DropdownMenuEntry( - value: i, - label: i, - style: ButtonStyle( - foregroundColor: WidgetStatePropertyAll(MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark")), - ), - )); - } - return menuList; - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - menu = buildMenuOptions(widget.dropdownOptions); - } - - @override - void initState() { - super.initState(); - menu = widget.dropdownOptions - .map((e) => DropdownMenuEntry(value: e, label: e)) - .toList(); - } - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - widget.hintText, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - if (!widget.requiredText) - Text( - "(Optional)", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 15, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - const SizedBox(height: 4), - FormField( - validator: widget.validator, - autovalidateMode: AutovalidateMode.onUserInteraction, - initialValue: widget.controller.text, - builder: (field) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Theme( - data: Theme.of(context).copyWith( - textSelectionTheme: TextSelectionThemeData( - cursorColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - selectionColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark") - .withValues(alpha: 0.3), - selectionHandleColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - child: DropdownMenu( - controller: widget.controller, - dropdownMenuEntries: menu, - enableSearch: widget.enableSearch, - enableFilter: widget.enableSearch, - enabled: widget.editable, - textInputAction: widget.enableSearch - ? TextInputAction.search - : TextInputAction.none, - requestFocusOnTap: widget.enableSearch, - menuHeight: 400, - expandedInsets: EdgeInsets.zero, - textStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontWeight: FontWeight.w500, - ), - trailingIcon: Icon( - Icons.arrow_drop_down, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - selectedTrailingIcon: Icon( - Icons.arrow_drop_up, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - leadingIcon: IconButton( - onPressed: () { - widget.controller.clear(); - field.didChange(''); - }, - icon: Icon( - Icons.delete_outline_rounded, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - onSelected: (String? selectedValue) { - field.didChange(selectedValue); - widget.onSelected?.call(selectedValue); - }, - menuStyle: MenuStyle( - backgroundColor: WidgetStatePropertyAll( - MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark")), - side: WidgetStatePropertyAll( - BorderSide( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 1.0), - ), - shape: WidgetStatePropertyAll( - RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - 10), // Increase for more roundness - ), - ), - ), - inputDecorationTheme: InputDecorationTheme( - errorStyle: const TextStyle(height: 0, fontSize: 0), - contentPadding: const EdgeInsets.symmetric( - horizontal: 10.0, vertical: 8.0), - filled: true, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(8.0), - borderSide: BorderSide.none, - ), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(8.0), - borderSide: BorderSide( - color: field.hasError - ? MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark") - : MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 3.0, - ), - ), - errorBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(8.0), - borderSide: BorderSide( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 3.0, - ), - ), - focusedErrorBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(8.0), - borderSide: BorderSide( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 3.0, - ), - ), - ), - ), - ), - if (field.hasError) - Padding( - padding: const EdgeInsets.only(left: 8.0, top: 4.0), - child: Text( - field.errorText ?? '', - style: TextStyle( - fontSize: 12, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ); - }, - ), - ], - ); - } -} diff --git a/Frontend/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart b/Frontend/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart deleted file mode 100644 index 9feb86c2..00000000 --- a/Frontend/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_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:provider/provider.dart'; - -class BuildMinesweeperLeaderboardList extends StatefulWidget { - const BuildMinesweeperLeaderboardList({super.key}); - - @override - State createState() => - _BuildMinesweeperLeaderboardListState(); -} - -class _BuildMinesweeperLeaderboardListState - extends State { - Color getMedalColor(int index) { - switch (index) { - case (0): - return MihColors.getGoldColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"); - case (1): - return MihColors.getSilverColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"); - case (2): - return MihColors.getBronze( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"); - default: - return MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"); - } - } - - @override - Widget build(BuildContext context) { - final double width = MediaQuery.sizeOf(context).width; - return Consumer2( - builder: (BuildContext context, MzansiProfileProvider profileProvider, - MihMineSweeperProvider mineSweeperProvider, Widget? child) { - return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - separatorBuilder: (BuildContext context, index) { - return Divider( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - }, - itemCount: mineSweeperProvider.leaderboard!.length, - itemBuilder: (context, index) { - return Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: Row( - children: [ - Text( - "#${index + 1}", - style: TextStyle( - fontSize: 25, - color: getMedalColor(index), - ), - ), - const SizedBox(width: 10), - MihCircleAvatar( - key: UniqueKey(), - imageFile: - mineSweeperProvider.leaderboardUserPictures.isNotEmpty - ? mineSweeperProvider.leaderboardUserPictures[index] - : null, - width: 80, - editable: false, - fileNameController: null, - userSelectedfile: null, - frameColor: getMedalColor(index), - backgroundColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onChange: () {}, - ), - const SizedBox(width: 10), - Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - "${mineSweeperProvider.leaderboard![index].username}${profileProvider.user!.username == mineSweeperProvider.leaderboard![index].username ? " (You)" : ""}", - textAlign: TextAlign.left, - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - color: getMedalColor(index), - ), - ), - Text( - "Score: ${mineSweeperProvider.leaderboard![index].game_score}\nTime: ${mineSweeperProvider.leaderboard![index].game_time}", - textAlign: TextAlign.left, - style: TextStyle( - fontSize: 18, - // fontWeight: FontWeight.bold, - color: getMedalColor(index), - ), - ), - ], - ) - ], - ), - ); - }, - ); - }, - ); - } -} diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart b/Frontend/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart deleted file mode 100644 index 0293fd0a..00000000 --- a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart +++ /dev/null @@ -1,204 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_minesweeper_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:provider/provider.dart'; - -class MihMineSweeperLeaderBoard extends StatefulWidget { - const MihMineSweeperLeaderBoard({super.key}); - - @override - State createState() => - _MihMineSweeperLeaderBoardState(); -} - -class _MihMineSweeperLeaderBoardState extends State { - TextEditingController filterController = TextEditingController(); - bool isLoading = true; - Future initialiseLeaderboard() async { - MihMineSweeperProvider mineSweeperProvider = - context.read(); - filterController.text = mineSweeperProvider.difficulty; - KenLogger.success("getting data"); - await MihMinesweeperServices().getTop20Leaderboard(mineSweeperProvider); - List?> userPictures = []; - String userPicUrl = ""; - for (final ranking in mineSweeperProvider.leaderboard!) { - userPicUrl = await MihFileApi.getMinioFileUrl(ranking.proPicUrl); - userPictures.add(NetworkImage(userPicUrl)); - } - mineSweeperProvider.setLeaderboardUserPictures( - leaderboardUserPictures: userPictures); - setState(() { - isLoading = false; - }); - } - - void refreshLeaderBoard( - MihMineSweeperProvider mineSweeperProvider, String difficulty) { - setState(() { - isLoading = true; - }); - mineSweeperProvider.setDifficulty(difficulty); - mineSweeperProvider.setLeaderboard(leaderboard: null); - mineSweeperProvider.setMyScoreboard(myScoreboard: null); - initialiseLeaderboard(); - } - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { - await initialiseLeaderboard(); - }); - } - - @override - Widget build(BuildContext context) { - final double width = MediaQuery.sizeOf(context).width; - return Consumer( - builder: (BuildContext context, - MihMineSweeperProvider mineSweeperProvider, Widget? child) { - return RefreshIndicator( - onRefresh: () async { - refreshLeaderBoard(mineSweeperProvider, filterController.text); - }, - child: MihPackageToolBody( - borderOn: false, - bodyItem: getBody(width), - ), - ); - }, - ); - } - - Widget getBody(double width) { - return Consumer( - builder: (BuildContext context, - MihMineSweeperProvider mineSweeperProvider, Widget? child) { - if (isLoading) { - return Center( - child: Mihloadingcircle(), - ); - } else { - return SingleChildScrollView( - physics: const AlwaysScrollableScrollPhysics(), - child: Column( - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisSize: MainAxisSize.max, - children: [ - Flexible( - child: MihDropdownField( - controller: filterController, - hintText: "Leaderboards", - dropdownOptions: const [ - "Very Easy", - "Easy", - "Intermediate", - "Hard", - ], - requiredText: true, - editable: true, - enableSearch: false, - validator: (value) { - return MihValidationServices().isEmpty(value); - }, - onSelected: (selection) { - refreshLeaderBoard(mineSweeperProvider, selection!); - }, - ), - ), - ], - ), - ), - const SizedBox(height: 10), - !isLoading && mineSweeperProvider.leaderboard!.isEmpty - ? Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.mineSweeper, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(height: 10), - Text( - "Be the first on the leaderboard.", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - ), - ), - const SizedBox(height: 25), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - ), - children: [ - TextSpan(text: "Press "), - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Icon( - FontAwesomeIcons.bomb, - size: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - ), - ), - TextSpan(text: " and start a new game"), - ], - ), - ), - ), - ], - ), - ) - : BuildMinesweeperLeaderboardList(), - ], - ), - ); - } - }, - ); - } -} diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart b/Frontend/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart deleted file mode 100644 index 68bdefaa..00000000 --- a/Frontend/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart +++ /dev/null @@ -1,209 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_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_packages/mine_sweeper/builders/build_my_scoreboard_list.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_minesweeper_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:provider/provider.dart'; - -class MyScoreBoard extends StatefulWidget { - const MyScoreBoard({super.key}); - - @override - State createState() => _MihMineSweeperLeaderBoardState(); -} - -class _MihMineSweeperLeaderBoardState extends State { - TextEditingController filterController = TextEditingController(); - - Future initialiseLeaderboard() async { - MzansiProfileProvider profileProvider = - context.read(); - MihMineSweeperProvider mineSweeperProvider = - context.read(); - filterController.text = mineSweeperProvider.difficulty; - KenLogger.success("getting data"); - await MihMinesweeperServices() - .getMyScoreboard(profileProvider, mineSweeperProvider); - KenLogger.success("${mineSweeperProvider.myScoreboard}"); - } - - void refreshLeaderBoard( - MihMineSweeperProvider mineSweeperProvider, String difficulty) { - mineSweeperProvider.setDifficulty(difficulty); - mineSweeperProvider.setLeaderboard(leaderboard: null); - mineSweeperProvider.setMyScoreboard(myScoreboard: null); - initialiseLeaderboard(); - } - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { - await initialiseLeaderboard(); - }); - } - - @override - Widget build(BuildContext context) { - final double width = MediaQuery.sizeOf(context).width; - return Consumer( - builder: (BuildContext context, - MihMineSweeperProvider mineSweeperProvider, Widget? child) { - return RefreshIndicator( - onRefresh: () async { - refreshLeaderBoard(mineSweeperProvider, filterController.text); - }, - child: MihPackageToolBody( - borderOn: false, - bodyItem: getBody(width), - ), - ); - }, - ); - } - - Widget getBody(double width) { - return Consumer2( - builder: (BuildContext context, MzansiProfileProvider profileProvider, - MihMineSweeperProvider mineSweeperProvider, Widget? child) { - if (mineSweeperProvider.myScoreboard == null) { - return Center( - child: Mihloadingcircle(), - ); - } else { - return SingleChildScrollView( - physics: const AlwaysScrollableScrollPhysics(), - child: Column( - children: [ - Center( - child: MihCircleAvatar( - imageFile: profileProvider.userProfilePicture, - width: 150, - editable: false, - fileNameController: null, - userSelectedfile: null, - frameColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - backgroundColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onChange: (selectedImage) {}, - key: ValueKey(profileProvider.userProfilePicUrl), - ), - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisSize: MainAxisSize.max, - children: [ - Flexible( - child: MihDropdownField( - controller: filterController, - hintText: "Scoreboards", - dropdownOptions: const [ - "Very Easy", - "Easy", - "Intermediate", - "Hard", - ], - requiredText: true, - editable: true, - enableSearch: false, - validator: (value) { - return MihValidationServices().isEmpty(value); - }, - onSelected: (selection) { - refreshLeaderBoard(mineSweeperProvider, selection!); - }, - ), - ), - ], - ), - ), - const SizedBox(height: 10), - mineSweeperProvider.myScoreboard!.isEmpty - ? Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.mineSweeper, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(height: 10), - Text( - "You have played and ${mineSweeperProvider.difficulty} yet.", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - ), - ), - const SizedBox(height: 25), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - ), - children: [ - TextSpan(text: "Press "), - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Icon( - FontAwesomeIcons.bomb, - size: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - ), - ), - TextSpan(text: " and start a new game"), - ], - ), - ), - ), - ], - ), - ) - : BuildMyScoreBoardList(), - ], - ), - ); - } - }, - ); - } -} diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart deleted file mode 100644 index b4cd3caa..00000000 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart +++ /dev/null @@ -1,556 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:ken_logger/ken_logger.dart'; -import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_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_packages/mzansi_directory/builders/build_business_search_resultsList.dart'; -import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart'; -import 'package:mzansi_innovation_hub/mih_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_user_services.dart'; -import 'package:provider/provider.dart'; - -class MihSearchMzansi extends StatefulWidget { - const MihSearchMzansi({ - super.key, - }); - - @override - State createState() => _MihSearchMzansiState(); -} - -class _MihSearchMzansiState extends State { - final TextEditingController mzansiSearchController = TextEditingController(); - final TextEditingController businessTypeController = TextEditingController(); - final FocusNode searchFocusNode = FocusNode(); - // late bool userSearch; - // Future?> futureUserSearchResults = Future.value(); - List userSearchResults = []; - List businessSearchResults = []; - late Future> availableBusinessTypes; - bool filterOn = false; - bool loadingSearchResults = false; - - Future swapPressed(MzansiProfileProvider profileProvider, - MzansiDirectoryProvider directoryProvider) async { - directoryProvider.setPersonalSearch(!directoryProvider.personalSearch); - setState(() { - if (filterOn) { - filterOn = !filterOn; - } - }); - if (businessTypeController.text.isNotEmpty) { - setState(() { - businessTypeController.clear(); - }); - } - await searchPressed(profileProvider, directoryProvider); - } - - void clearAll(MzansiDirectoryProvider directoryProvider) { - directoryProvider.setSearchedBusinesses(searchedBusinesses: []); - directoryProvider.setSearchedUsers(searchedUsers: []); - directoryProvider.setSearchTerm(searchTerm: ""); - setState(() { - mzansiSearchController.clear(); - businessTypeController.clear(); - }); - } - - Future searchPressed(MzansiProfileProvider profileProvider, - MzansiDirectoryProvider directoryProvider) async { - setState(() { - loadingSearchResults = true; - }); - directoryProvider.setSearchTerm(searchTerm: mzansiSearchController.text); - directoryProvider.setBusinessTypeFilter( - businessTypeFilter: businessTypeController.text); - if (directoryProvider.personalSearch && - directoryProvider.searchTerm.isNotEmpty) { - final userResults = await MihUserServices() - .searchUsers(profileProvider, directoryProvider.searchTerm, context); - directoryProvider.setSearchedUsers(searchedUsers: userResults); - } else { - List? businessSearchResults = []; - if (directoryProvider.businessTypeFilter.isNotEmpty) { - businessSearchResults = await MihBusinessDetailsServices() - .searchBusinesses(directoryProvider.searchTerm, - directoryProvider.businessTypeFilter, context); - } else if (directoryProvider.searchTerm.isNotEmpty) { - businessSearchResults = await MihBusinessDetailsServices() - .searchBusinesses(directoryProvider.searchTerm, - directoryProvider.businessTypeFilter, context); - } - directoryProvider.setSearchedBusinesses( - searchedBusinesses: businessSearchResults); - } - setState(() { - loadingSearchResults = false; - }); - } - - @override - void dispose() { - super.dispose(); - businessTypeController.dispose(); - mzansiSearchController.dispose(); - } - - @override - void initState() { - super.initState(); - MzansiDirectoryProvider directoryProvider = - context.read(); - availableBusinessTypes = - MihBusinessDetailsServices().fetchAllBusinessTypes(); - mzansiSearchController.text = ""; - WidgetsBinding.instance.addPostFrameCallback((_) async { - directoryProvider.setSearchedUsers(searchedUsers: []); - }); - } - - @override - Widget build(BuildContext context) { - final Size size = MediaQuery.sizeOf(context); - final double width = size.width; - return MihPackageToolBody( - borderOn: false, - bodyItem: getBody(width), - ); - } - - Widget getBody(double width) { - return Consumer2( - builder: (BuildContext context, MzansiProfileProvider profileProvider, - MzansiDirectoryProvider directoryProvider, Widget? child) { - return MihSingleChildScroll( - child: Column( - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Expanded( - child: MihSearchBar( - controller: mzansiSearchController, - hintText: "Search Mzansi", - prefixIcon: Icons.search, - prefixAltIcon: directoryProvider.personalSearch - ? Icons.person - : Icons.business, - suffixTools: [ - IconButton( - onPressed: () { - swapPressed(profileProvider, directoryProvider); - }, - icon: Icon( - Icons.swap_horiz_rounded, - size: 35, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ], - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - hintColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - onPrefixIconTap: () { - searchPressed(profileProvider, directoryProvider); - }, - onClearIconTap: () { - clearAll(directoryProvider); - }, - searchFocusNode: searchFocusNode, - ), - ), - Visibility( - visible: !directoryProvider.personalSearch, - child: const SizedBox(width: 10), - ), - Visibility( - visible: !directoryProvider.personalSearch, - child: IconButton( - onPressed: () { - if (filterOn) { - clearAll(directoryProvider); - } - setState(() { - filterOn = !filterOn; - }); - }, - icon: Icon( - !filterOn - ? Icons.filter_list_rounded - : Icons.filter_list_off_rounded, - size: 35, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ), - ], - ), - ), - const SizedBox(height: 10), - FutureBuilder( - future: availableBusinessTypes, - builder: (context, asyncSnapshot) { - List options = []; - if (asyncSnapshot.connectionState == ConnectionState.done) { - options.addAll(asyncSnapshot.data!); - } - return Visibility( - visible: filterOn, - child: Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Expanded( - child: MihDropdownField( - controller: businessTypeController, - hintText: "Business Type", - dropdownOptions: options, - requiredText: true, - editable: true, - enableSearch: true, - ), - ), - const SizedBox(width: 10), - MihButton( - onPressed: () { - if (businessTypeController.text.isNotEmpty) { - searchPressed( - profileProvider, directoryProvider); - } else { - MihAlertServices().errorBasicAlert( - "Business Type Not Selected", - "Please ensure you have selected a Business Type before seareching for Businesses of Mzansi", - context, - ); - } - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - elevation: 10, - child: Text( - "Search", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - ); - }), - const SizedBox(height: 10), - displaySearchResults(directoryProvider), - ], - ), - ); - }, - ); - } - - Widget displayBusinessSearchResults( - MzansiDirectoryProvider directoryProvider) { - KenLogger.success( - "Searched Businesses: ${directoryProvider.searchedBusinesses}"); - if (directoryProvider.searchedBusinesses == null || loadingSearchResults) { - return Center( - child: const Mihloadingcircle(), - ); - } else if (directoryProvider.searchedBusinesses!.isNotEmpty) { - // return Text("Pulled Data successfully"); - directoryProvider.searchedBusinesses! - .sort((a, b) => a.Name.compareTo(b.Name)); - return Column( - children: [ - Text( - "Businesses of Mzansi", - style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold), - ), - const SizedBox(height: 10), - BuildBusinessSearchResultsList( - businessList: directoryProvider.searchedBusinesses!, - ), - ], - ); - } else if (directoryProvider.searchedBusinesses!.isEmpty && - directoryProvider.searchTerm.isNotEmpty) { - // return Text("Pulled Data successfully"); - return Column( - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.iDontKnow, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - const SizedBox(height: 25), - Text( - "Let's try refining your search", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ], - ); - } else if (directoryProvider.searchedBusinesses!.isEmpty && - directoryProvider.searchTerm.isEmpty) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.businessProfile, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - const SizedBox(height: 10), - Text( - "Search for businesses of Mzansi!", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - const SizedBox(height: 25), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - children: [ - TextSpan(text: "Press "), - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Icon( - Icons.swap_horiz_rounded, - size: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - TextSpan(text: " to search for people of Mzansi"), - ], - ), - ), - ), - const SizedBox(height: 10), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - children: [ - TextSpan(text: "Press "), - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Icon( - Icons.filter_list_rounded, - size: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - TextSpan(text: " to filter business types"), - ], - ), - ), - ), - ], - ), - ); - } else { - return Center( - child: Text( - "Error pulling Patients Data\n/users/search/${directoryProvider.searchTerm}", - style: TextStyle( - fontSize: 25, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark")), - textAlign: TextAlign.center, - ), - ); - } - } - - Widget displayPersonalSearchResults( - MzansiDirectoryProvider directoryProvider) { - if (directoryProvider.searchedUsers == null || loadingSearchResults) { - return Center( - child: const Mihloadingcircle(), - ); - } else if (directoryProvider.searchedUsers!.isNotEmpty) { - // return Text("Pulled Data successfully"); - directoryProvider.searchedUsers! - .sort((a, b) => a.username.compareTo(b.username)); - return Column( - children: [ - Text( - "People of Mzansi", - style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold), - ), - const SizedBox(height: 10), - BuildUserSearchResultsList( - userList: directoryProvider.searchedUsers!), - ], - ); - } else if (directoryProvider.searchedUsers!.isEmpty && - directoryProvider.searchTerm.isEmpty) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.personalProfile, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - const SizedBox(height: 10), - Text( - "Search for people of Mzansi!", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - const SizedBox(height: 25), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - children: [ - TextSpan(text: "Press "), - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Icon( - Icons.swap_horiz_rounded, - size: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - TextSpan(text: " to search for businesses of Mzansi"), - ], - ), - ), - ), - ], - ), - ); - } else if (directoryProvider.searchedUsers!.isEmpty && - directoryProvider.searchTerm.isNotEmpty) { - return Column( - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.iDontKnow, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - const SizedBox(height: 10), - Text( - "Let's try refining your search", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ], - ); - } else { - return Center( - child: Text( - "Error pulling Patients Data\n/users/search/${directoryProvider.searchTerm}", - style: TextStyle( - fontSize: 25, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark")), - textAlign: TextAlign.center, - ), - ); - } - } - - Widget displaySearchResults(MzansiDirectoryProvider directoryProvider) { - if (directoryProvider.personalSearch) { - return displayPersonalSearchResults(directoryProvider); - } else { - return displayBusinessSearchResults(directoryProvider); - } - } -} diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart deleted file mode 100644 index e21ec303..00000000 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart +++ /dev/null @@ -1,182 +0,0 @@ -import 'package:file_picker/file_picker.dart'; -import 'package:flutter/material.dart'; -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_circle_avatar.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_loading_circle.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_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart'; -import 'package:provider/provider.dart'; - -class MihPersonalProfile extends StatefulWidget { - const MihPersonalProfile({super.key}); - - @override - State createState() => _MihPersonalProfileState(); -} - -class _MihPersonalProfileState extends State { - TextEditingController proPicController = TextEditingController(); - PlatformFile? newSelectedProPic; - - void editProfileWindow(double width) { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) => Consumer( - builder: (BuildContext context, - MzansiProfileProvider mzansiProfileProvider, Widget? child) { - return MihEditPersonalProfileWindow(); - }, - ), - ); - } - - @override - Widget build(BuildContext context) { - double screenWidth = MediaQuery.of(context).size.width; - return MihPackageToolBody( - borderOn: false, - innerHorizontalPadding: 10, - bodyItem: getBody(screenWidth), - ); - } - - Widget getBody(double width) { - return Consumer( - builder: (BuildContext context, - MzansiProfileProvider mzansiProfileProvider, Widget? child) { - if (mzansiProfileProvider.user == null) { - //Change to new user flow - return Center( - child: Mihloadingcircle(), - ); - } else { - return MihSingleChildScroll( - child: Padding( - padding: - MzansiInnovationHub.of(context)!.theme.screenType == "desktop" - ? EdgeInsets.symmetric(horizontal: width * 0.2) - : EdgeInsets.symmetric(horizontal: width * 0.075), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Center( - child: MihCircleAvatar( - imageFile: mzansiProfileProvider.userProfilePicture, - width: 150, - editable: false, - fileNameController: proPicController, - userSelectedfile: newSelectedProPic, - frameColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - backgroundColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - onChange: (selectedImage) { - setState(() { - newSelectedProPic = selectedImage; - }); - }, - key: ValueKey(mzansiProfileProvider.userProfilePicUrl), - ), - ), - FittedBox( - child: Text( - mzansiProfileProvider.user!.username.isNotEmpty - ? mzansiProfileProvider.user!.username - : "username", - style: TextStyle( - fontSize: 35, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ), - FittedBox( - child: Text( - mzansiProfileProvider.user!.fname.isNotEmpty - ? "${mzansiProfileProvider.user!.fname} ${mzansiProfileProvider.user!.lname}" - : "Name Surname", - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ), - FittedBox( - child: Text( - mzansiProfileProvider.user!.type == "business" - ? "Business".toUpperCase() - : "Personal".toUpperCase(), - style: TextStyle( - fontSize: 15, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ), - const SizedBox(height: 10.0), - Center( - child: SizedBox( - width: 700, - child: Text( - mzansiProfileProvider.user!.purpose.isNotEmpty - ? mzansiProfileProvider.user!.purpose - : "No Personal Mission added yet", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 15, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ), - ), - const SizedBox(height: 30.0), - Center( - child: MihButton( - onPressed: () { - // Connect with the user - editProfileWindow(width); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 300, - child: Text( - mzansiProfileProvider.user!.username.isEmpty - ? "Set Up Profile" - : "Edit Profile", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - ], - ), - ), - ); - } - }, - ); - } -} diff --git a/Frontend/lib/mih_providers/mzansi_ai_provider.dart b/Frontend/lib/mih_providers/mzansi_ai_provider.dart deleted file mode 100644 index a74520ca..00000000 --- a/Frontend/lib/mih_providers/mzansi_ai_provider.dart +++ /dev/null @@ -1,328 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_ai_toolkit/flutter_ai_toolkit.dart'; -import 'package:flutter_markdown_plus/flutter_markdown_plus.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_providers/ollama_provider.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; - -class MzansiAiProvider extends ChangeNotifier { - bool ttsOn; - int toolIndex; - String? startUpQuestion; - late OllamaProvider ollamaProvider; - - MzansiAiProvider({ - this.toolIndex = 0, - this.ttsOn = false, - }) { - ollamaProvider = OllamaProvider( - baseUrl: "${AppEnviroment.baseAiUrl}/api", - model: AppEnviroment.getEnv() == "Prod" ? 'gemma3n:e4b' : "gemma3:1b", - systemPrompt: "You are Mzansi AI, a helpful and friendly AI assistant running on the 'MIH App'.\n" + - "The MIH App was created by 'Mzansi Innovation Hub', a South African-based startup company." + - "Your primary purpose is to assist users by answering general questions and helping with creative writing tasks or any other task a user might have for you.\n" + - "Maintain a casual and friendly tone, but always remain professional.\n" + - "Strive for a balance between being empathetic and delivering factual information accurately.\n" + - "You may use lighthearted or playful language if the context is appropriate and enhances the user experience.\n" + - "You operate within the knowledge domain of the 'MIH App'.\n" + - "Here is a description of the MIH App and its features:\n" + - "MIH App Description: MIH is the first super app of Mzansi, designed to streamline both personal and business life. It's an all-in-one platform for managing professional profiles, teams, appointments, and quick calculations. \n" + - "Key Features:\n" + - "- Mzansi Profile: Central hub for managing personal and business information, including business team details." + - "- Mzansi Wallet: Digitally store loyalty cards.\n" + - "- Patient Manager (For Medical Practices): Seamless patient appointment scheduling and data management.\n" + - "- Mzansi AI: Your friendly AI assistant for quick answers and support (that's you!).\n" + - "- Mzansi Directory: A place to search and find out more about the people and businesses across Mzansi.\n" + - "- Calendar: Integrated calendar for managing personal and business appointments.\n" + - "- Calculator: Simple calculator with tip and forex calculation functionality.\n" + - "- MIH Minesweeper: The first game from MIH! It's the classic brain-teaser ready to entertain you no matter where you are.\n" + - "- MIH Access: Manage and view profile access security.\n" + - "**Core Rules and Guidelines:**\n" + - "- **Accuracy First:** Always prioritize providing correct information.\n" + - "- **Uncertainty Handling:** If you are unsure about an answer, politely respond with: 'Please bear with us as we are still learning and do not have all the answers.'\n" + - "- **Response Length:** Aim to keep responses under 250 words. If a more comprehensive answer is required, exceed this limit but offer to elaborate further (e.g., 'Would you like me to elaborate on this topic?').\n" + - "- **Language & Safety:** Never use offensive language or generate harmful content. If a user presses for information that is inappropriate or out of bounds, clearly state why you cannot provide it (e.g., 'I cannot assist with that request as it goes against my safety guidelines.').\n" + - "- **Out-of-Scope Questions:** - If a question is unclear, ask the user to rephrase or clarify it. - If a question is entirely out of your scope and you cannot provide a useful answer, admit you don't know. - If a user is unhappy with your response or needs further assistance beyond your capabilities, suggest they visit the 'Mzansi Innovation Hub Social Media Pages' for more direct support. Do not provide specific links, just refer to the pages generally.\n" + - "- **Target Audience:** Adapt your explanations to beginners and intermediate users, but be prepared for more complex questions from expert users. Ensure your language is clear and easy to understand.\n", - )..addListener(() { - notifyListeners(); // Forward OllamaProvider notifications - }); - } - - void reset() { - toolIndex = 0; - startUpQuestion = null; - notifyListeners(); - } - - void setToolIndex(int index) { - toolIndex = index; - notifyListeners(); - } - - void setTTSstate(bool ttsOn) { - this.ttsOn = ttsOn; - notifyListeners(); - } - - void setStartUpQuestion(String? question) { - startUpQuestion = question; - notifyListeners(); - } - - void clearStartUpQuestion() { - startUpQuestion = null; - } - - MarkdownStyleSheet getLlmChatMarkdownStyle(BuildContext context) { - TextStyle body = TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 16, - fontWeight: FontWeight.w400, - ); - TextStyle heading1 = TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 24, - fontWeight: FontWeight.w400, - ); - TextStyle heading2 = TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.w400, - ); - TextStyle code = TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 16, - fontWeight: FontWeight.w400, - ); - BoxDecoration codeBlock = BoxDecoration( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10), - topRight: Radius.circular(10), - bottomLeft: Radius.circular(10), - bottomRight: Radius.circular(10), - ), - color: MihColors.getHighlightColor( - MzansiInnovationHub.of(context)!.theme.mode != "Dark"), - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(76), - blurRadius: 8, - offset: Offset(2, 2), - ), - ], - ); - return MarkdownStyleSheet( - a: body, - blockquote: body, - checkbox: body, - del: body, - em: body.copyWith(fontStyle: FontStyle.italic), - h1: heading1, - h2: heading2, - h3: body.copyWith(fontWeight: FontWeight.bold), - h4: body, - h5: body, - h6: body, - listBullet: body, - img: body, - strong: body.copyWith(fontWeight: FontWeight.bold), - p: body, - tableBody: body, - tableHead: body, - code: code, - codeblockDecoration: codeBlock, - ); - } - - LlmChatViewStyle? getChatStyle(BuildContext context) { - return LlmChatViewStyle( - backgroundColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - progressIndicatorColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - menuColor: Colors.black, - // MihColors.getGreenColor( - // MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - disabledButtonStyle: ActionButtonStyle( - icon: MihIcons.mzansiAi, - iconColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - iconDecoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25), - ), - ), - recordButtonStyle: ActionButtonStyle( - iconColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - iconDecoration: BoxDecoration( - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25), - ), - textStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - submitButtonStyle: ActionButtonStyle( - icon: Icons.send, - iconColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - iconDecoration: BoxDecoration( - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25), - ), - textStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - stopButtonStyle: ActionButtonStyle( - iconColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - iconDecoration: BoxDecoration( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25), - ), - textStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - actionButtonBarDecoration: BoxDecoration( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25), - ), - // Mzansi AI Chat Style - llmMessageStyle: LlmMessageStyle( - icon: MihIcons.mzansiAi, - iconColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - iconDecoration: BoxDecoration( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25), - ), - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topRight: Radius.circular(25), - bottomLeft: Radius.circular(25), - bottomRight: Radius.circular(25), - ), - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(76), - blurRadius: 8, - offset: Offset(2, 2), - ), - ], - ), - markdownStyle: getLlmChatMarkdownStyle(context), - ), - // User Chat Style - userMessageStyle: UserMessageStyle( - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(25), - bottomLeft: Radius.circular(25), - bottomRight: Radius.circular(25), - ), - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(76), - blurRadius: 8, - offset: Offset(2, 2), - ), - ], - ), - textStyle: TextStyle( - fontSize: 16, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - // User Input Style - chatInputStyle: ChatInputStyle( - backgroundColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - decoration: BoxDecoration( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25), - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(76), - blurRadius: 8, - offset: Offset(2, 2), - ), - ], - ), - hintStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - hintText: "Ask Mzansi AI...", - ), - // Suggestions Style - suggestionStyle: SuggestionStyle( - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(25), - bottomLeft: Radius.circular(25), - bottomRight: Radius.circular(25), - ), - color: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(76), - blurRadius: 8, - offset: Offset(2, 2), - ), - ], - ), - textStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - copyButtonStyle: ActionButtonStyle( - iconColor: MihColors.getSecondaryInvertedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - editButtonStyle: ActionButtonStyle( - iconColor: MihColors.getSecondaryInvertedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - cancelButtonStyle: ActionButtonStyle( - iconDecoration: BoxDecoration( - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25), - ), - iconColor: MihColors.getSecondaryInvertedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - textStyle: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ); - } -} diff --git a/Frontend/web/favicon.png b/Frontend/web/favicon.png deleted file mode 100644 index fac4164f..00000000 Binary files a/Frontend/web/favicon.png and /dev/null differ diff --git a/Frontend/web/icons/Icon-192.png b/Frontend/web/icons/Icon-192.png deleted file mode 100644 index 41602f9b..00000000 Binary files a/Frontend/web/icons/Icon-192.png and /dev/null differ diff --git a/Frontend/web/icons/Icon-512.png b/Frontend/web/icons/Icon-512.png deleted file mode 100644 index d75230b9..00000000 Binary files a/Frontend/web/icons/Icon-512.png and /dev/null differ diff --git a/Frontend/web/icons/Icon-maskable-192.png b/Frontend/web/icons/Icon-maskable-192.png deleted file mode 100644 index 41602f9b..00000000 Binary files a/Frontend/web/icons/Icon-maskable-192.png and /dev/null differ diff --git a/Frontend/web/icons/Icon-maskable-512.png b/Frontend/web/icons/Icon-maskable-512.png deleted file mode 100644 index d75230b9..00000000 Binary files a/Frontend/web/icons/Icon-maskable-512.png and /dev/null differ diff --git a/backend/__pycache__/Robot.cpython-311.pyc b/backend/__pycache__/Robot.cpython-311.pyc deleted file mode 100644 index 117f54dd..00000000 Binary files a/backend/__pycache__/Robot.cpython-311.pyc and /dev/null differ diff --git a/backend/__pycache__/__init__.cpython-310.pyc b/backend/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 783bad2e..00000000 Binary files a/backend/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/backend/__pycache__/main.cpython-310.pyc b/backend/__pycache__/main.cpython-310.pyc deleted file mode 100644 index 85f6789e..00000000 Binary files a/backend/__pycache__/main.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/__init__.cpython-310.pyc b/backend/routers/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index b00c5db2..00000000 Binary files a/backend/routers/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/docOffice.cpython-310.pyc b/backend/routers/__pycache__/docOffice.cpython-310.pyc deleted file mode 100644 index 78a9036e..00000000 Binary files a/backend/routers/__pycache__/docOffice.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/docOffices.cpython-310.pyc b/backend/routers/__pycache__/docOffices.cpython-310.pyc deleted file mode 100644 index 2b7959a2..00000000 Binary files a/backend/routers/__pycache__/docOffices.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/fileStorage.cpython-310.pyc b/backend/routers/__pycache__/fileStorage.cpython-310.pyc deleted file mode 100644 index 5144fce8..00000000 Binary files a/backend/routers/__pycache__/fileStorage.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/getFunctions.cpython-310.pyc b/backend/routers/__pycache__/getFunctions.cpython-310.pyc deleted file mode 100644 index 227436c2..00000000 Binary files a/backend/routers/__pycache__/getFunctions.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/medicine.cpython-310.pyc b/backend/routers/__pycache__/medicine.cpython-310.pyc deleted file mode 100644 index 227323e2..00000000 Binary files a/backend/routers/__pycache__/medicine.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/patients.cpython-310.pyc b/backend/routers/__pycache__/patients.cpython-310.pyc deleted file mode 100644 index f0d0b5f0..00000000 Binary files a/backend/routers/__pycache__/patients.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/patients_files.cpython-310.pyc b/backend/routers/__pycache__/patients_files.cpython-310.pyc deleted file mode 100644 index 74fda05a..00000000 Binary files a/backend/routers/__pycache__/patients_files.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/patients_notes.cpython-310.pyc b/backend/routers/__pycache__/patients_notes.cpython-310.pyc deleted file mode 100644 index d509cd61..00000000 Binary files a/backend/routers/__pycache__/patients_notes.cpython-310.pyc and /dev/null differ diff --git a/backend/routers/__pycache__/users.cpython-310.pyc b/backend/routers/__pycache__/users.cpython-310.pyc deleted file mode 100644 index a7e3153e..00000000 Binary files a/backend/routers/__pycache__/users.cpython-310.pyc and /dev/null differ diff --git a/docker-compose.yml b/docker-compose.yml index d464f423..5bc17734 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,48 +1,103 @@ +#============== MIH Network ==================================================================== +networks: + mih-network: + driver: bridge +#============== MIH Containers ==================================================================== services: - #============== API Hub ==================================================================== - api: - build: - context: ./backend - target: builder - container_name: MIH-API-Hub - #command: sh -c "sleep 10s; uvicorn backend.main:app --reload --port=8080 --host=0.0.0.0" - #============Dev================= - # command: sh -c "sleep 10s; fastapi dev main.py --port 8080" - #============prod================= - #command: sh -c "sleep 10s; fastapi run backend/main.py --proxy-headers --port 8080" + #============== Nginx Proxy Server Old ==================================================================== + # nginx: + # container_name: nginx + # restart: unless-stopped + # image: nginx + # ports: + # - 80:80 + # - 443:443 + # volumes: + # - ./nginx/nginx.conf:/etc/nginx/nginx.conf + # - certbotConf:/etc/letsencrypt + # - certbotChall:/var/www/certbot + # depends_on: + # - mih-ux + # networks: + # - mih-network + # profiles: [ 'prod' ] + #============== Cert Bot Old ==================================================================== + # certbot: + # image: certbot/certbot + # container_name: certbot + # volumes: + # - certbotConf:/etc/letsencrypt + # - certbotChall:/var/www/certbot + # #command: certonly --test-cert --webroot -w /var/www/certbot --force-renewal --email yasienmeth@gmail.com -d mzansi-innovation-hub.co.za -d www.mzansi-innovation-hub.co.za --agree-tos + # command: certonly --webroot -w /var/www/certbot --force-renewal --email ${CERTBOT_EMAIL} -d ${CERTBOT_APP_DOMAIN} -d ${CERTBOT_API_DOMAIN} -d ${CERTBOT_STORAGE_DOMAIN} -d ${CERTBOT_MONITOR_DOMAIN} -d ${CERTBOT_AI_DOMAIN} --agree-tos + # networks: + # - mih-network + # depends_on: + # - nginx + # profiles: [ 'withCert' ] + #============== Nginx Proxy Manager ==================================================================== + mih-nginx: + container_name: mih-nginx + image: 'jc21/nginx-proxy-manager:latest' + restart: unless-stopped ports: - - 8080:80 + - '80:80' # Public HTTP + - '443:443' # Public HTTPS + - '81:81' # Admin Web Port volumes: - - ./backend:/app + - ./mih_nginx/data:/data + - ./mih_nginx/letsencrypt:/etc/letsencrypt networks: - - MIH-network + - mih-network +#============== GITEA ==================================================================== + mih-gitea: + image: gitea/gitea:latest + container_name: mih-gitea + environment: + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=mih-gitea-db:3306 + - GITEA__database__NAME=${GITEA_SQL_DB} + - GITEA__database__USER=${GITEA_SQL_USER} + - GITEA__database__PASSWD=${GITEA_SQL_PW} + restart: always + networks: + - mih-network + volumes: + - ./mih_git/gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "3000:3000" + - "222:22" depends_on: - - mysqldb - #============== My SQL DB ==================================================================== - mysqldb: - #build: ./database/ - platform: linux/amd64 - image: mysql:5.7 - container_name: MIH-Database + mih-gitea-db: + condition: service_healthy + mih-gitea-db: + image: mysql:8.0 + container_name: mih-gitea-db restart: always environment: - MYSQL_ROOT_PASSWORD: ${SQL_ROOT_PW} - MYSQL_USER: ${SQL_USER} - MYSQL_PASSWORD: ${SQL_USER_PW} - MYSQL_DATABASE: ${SUPERTOKENS_DB} + - MYSQL_ROOT_PASSWORD=${GITEA_SQL_ROOT_PW} + - MYSQL_USER=${GITEA_SQL_USER} + - MYSQL_PASSWORD=${GITEA_SQL_PW} + - MYSQL_DATABASE=${GITEA_SQL_DB} networks: - - MIH-network - ports: - - '3306:3306' + - mih-network volumes: - - ./database:/var/lib/mysql + - ./mih_git/mysql:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 #============== Super Token Auth ==================================================================== - supertokens: - container_name: MIH-SuperTokens + mih-supertokens: + container_name: mih-supertokens image: supertokens/supertokens-mysql:latest - # image: registry.supertokens.io/supertokens/supertokens-mysql depends_on: - - mysqldb + - mih-db ports: - 3567:3567 environment: @@ -51,12 +106,12 @@ services: PASSWORD_RESET_TOKEN_LIFETIME: '7200000' MYSQL_USER: ${SQL_USER} MYSQL_PASSWORD: ${SQL_USER_PW} - MYSQL_HOST: mysqldb + MYSQL_HOST: mih-db MYSQL_PORT: 3306 MYSQL_DATABASE_NAME: ${SUPERTOKENS_DB} API_KEYS: ${SUPERTOKENS_API_KEY} networks: - - MIH-network + - mih-network restart: unless-stopped healthcheck: test: > @@ -64,104 +119,130 @@ services: interval: 10s timeout: 5s retries: 5 + #============== MIH WordPress ==================================================================== + mih-wordpress: + container_name: mih-wordpress + image: wordpress + restart: always + ports: + - 8081:80 + environment: + WORDPRESS_DB_HOST: mih-wp-db + WORDPRESS_DB_USER: ${WP_SQL_USER} + WORDPRESS_DB_PASSWORD: ${WP_SQL_USER_PW} + WORDPRESS_DB_NAME: ${WP_SQL_DB} + volumes: + - ./mih_wp/ui:/var/www/html + networks: + - mih-network + mih-wp-db: + container_name: mih-wp-db + image: mariadb:10.11 + restart: always + environment: + MARIADB_DATABASE: ${WP_SQL_DB} + MARIADB_USER: ${WP_SQL_USER} + MARIADB_PASSWORD: ${WP_SQL_USER_PW} + MARIADB_RANDOM_ROOT_PASSWORD: '1' + volumes: + - ./mih_wp/database:/var/lib/mysql + networks: + - mih-network + #============== MIH-UX Flutter ==================================================================== + mih-ux: + container_name: mih-ux + build: + context: ./mih_ui + ports: + - "83:83" + networks: + - mih-network + depends_on: + - mih-api-hub + #============== API Hub ==================================================================== + mih-api-hub: + build: + context: ./mih_api_hub + target: builder + container_name: mih-api-hub + ports: + - 8080:80 + volumes: + - ./mih_api_hub:/app + networks: + - mih-network + depends_on: + - mih-db + #============== My SQL DB ==================================================================== + mih-db: + platform: linux/amd64 + image: mysql:5.7 + container_name: mih-db + restart: always + environment: + MYSQL_ROOT_PASSWORD: ${SQL_ROOT_PW} + MYSQL_USER: ${SQL_USER} + MYSQL_PASSWORD: ${SQL_USER_PW} + MYSQL_DATABASE: ${SUPERTOKENS_DB} + networks: + - mih-network + ports: + - '3306:3306' + volumes: + - ./mih_db:/var/lib/mysql #============== PHP My Admin ==================================================================== # phpmyadmin: # platform: linux/amd64 # image: phpmyadmin/phpmyadmin # container_name: MIH-phpmyadmin # environment: - # PMA_HOST: mysqlDB + # PMA_HOST: mih-db # PMA_PORT: 3306 # PMA_ARBITRARY: # networks: - # - MIH-network + # - mih-network # restart: always # ports: # - 8081:80 # depends_on: - # - mysqldb - #============== Nginx Proxy Server ==================================================================== - nginx: - container_name: nginx - restart: unless-stopped - image: nginx - ports: - - 80:80 - - 443:443 - volumes: - - ./nginx/nginx.conf:/etc/nginx/nginx.conf - - certbotConf:/etc/letsencrypt - - certbotChall:/var/www/certbot - depends_on: - - user-interface - networks: - - MIH-network - profiles: [ 'prod' ] - #============== MIH-UX Flutter ==================================================================== - user-interface: - container_name: MIH-UX - build: - context: ./Frontend - ports: - - "83:83" - networks: - - MIH-network - depends_on: - - api - #============== Cert Bot ==================================================================== - certbot: - image: certbot/certbot - container_name: certbot - volumes: - - certbotConf:/etc/letsencrypt - - certbotChall:/var/www/certbot - #command: certonly --test-cert --webroot -w /var/www/certbot --force-renewal --email yasienmeth@gmail.com -d mzansi-innovation-hub.co.za -d www.mzansi-innovation-hub.co.za --agree-tos - command: certonly --webroot -w /var/www/certbot --force-renewal --email ${CERTBOT_EMAIL} -d ${CERTBOT_APP_DOMAIN} -d ${CERTBOT_API_DOMAIN} -d ${CERTBOT_STORAGE_DOMAIN} -d ${CERTBOT_MONITOR_DOMAIN} -d ${CERTBOT_AI_DOMAIN} --agree-tos - networks: - - MIH-network - depends_on: - - nginx - profiles: [ 'withCert' ] + # - mih-db #============== Minio File Storage ==================================================================== - minio: + mih-minio: platform: linux/amd64 - container_name: MIH-Minio - hostname: minio - # image: docker.io/bitnami/minio:2022 + container_name: mih-minio + hostname: mih-minio image: minio/minio ports: - '9000:9000' - '9001:9001' volumes: - - './File_Storage:/data' + - './mih_minio:/data' environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PW} - # MINIO_SERVER_URL: ${MINIO_SERVER_URL} networks: - - MIH-network + - mih-network command: ["server", "/data", "--console-address", ":9001"] #============== MIH-Monitor Portainer ==================================================================== - portainer: - container_name: MIH-Monitor + mih-monitor: + container_name: mih-monitor image: portainer/portainer-ce:2.20.3 ports: - 9444:9443 volumes: - - data:/data + - ./mih_monitor/data:/data - /var/run/docker.sock:/var/run/docker.sock restart: unless-stopped networks: - - MIH-network + - mih-network #============== MIH-AI Ollama ==================================================================== - ollama: - container_name: MIH-AI + mih-ai: + container_name: mih-ai image: ollama/ollama:latest ports: - 11434:11434 volumes: - # - ./Mzansi_AI:/code - - ./Mzansi_AI/ollama/ollama:/root/.ollama + - ./mih_ai/ollama/ollama:/root/.ollama pull_policy: always tty: true restart: always @@ -170,16 +251,16 @@ services: - OLLAMA_KEEP_ALIVE=24h - OLLAMA_HOST=0.0.0.0 networks: - - MIH-network + - mih-network # === Added section for NVIDIA GPU acceleration === - runtime: nvidia - deploy: - resources: - reservations: - devices: - - driver: nvidia - count: all # or specify a number of GPUs - capabilities: [ gpu ] + # runtime: nvidia + # deploy: + # resources: + # reservations: + # devices: + # - driver: nvidia + # count: all # or specify a number of GPUs + # capabilities: [ gpu ] #============== Firebaase ==================================================================== # firebase: # container_name: MIH-firebase-emulator @@ -199,11 +280,3 @@ services: # # - ./cache:/root/.cache/:rw # # - ~/.config/:/root/.config # - ./Firebase-emulator/firebase/data:/srv/firebase/data:rw -#============== Named Volumes ==================================================================== -volumes: - certbotConf: - certbotChall: - data: #============== MIH Network ==================================================================== -networks: - MIH-network: - driver: bridge diff --git a/Mzansi_AI/.gitignore b/mih_ai/.gitignore similarity index 100% rename from Mzansi_AI/.gitignore rename to mih_ai/.gitignore diff --git a/backend/.DS_Store b/mih_api_hub/.DS_Store similarity index 92% rename from backend/.DS_Store rename to mih_api_hub/.DS_Store index 17866b74..510f15ab 100644 Binary files a/backend/.DS_Store and b/mih_api_hub/.DS_Store differ diff --git a/backend/.gitignore b/mih_api_hub/.gitignore similarity index 100% rename from backend/.gitignore rename to mih_api_hub/.gitignore diff --git a/backend/Dockerfile b/mih_api_hub/Dockerfile similarity index 100% rename from backend/Dockerfile rename to mih_api_hub/Dockerfile diff --git a/backend/ICD10_Codes/ICD-10_MIT_2021_Excel_16-March_2021.xls b/mih_api_hub/ICD10_Codes/ICD-10_MIT_2021_Excel_16-March_2021.xls similarity index 100% rename from backend/ICD10_Codes/ICD-10_MIT_2021_Excel_16-March_2021.xls rename to mih_api_hub/ICD10_Codes/ICD-10_MIT_2021_Excel_16-March_2021.xls diff --git a/backend/Minio_Storage/__init__.py b/mih_api_hub/Minio_Storage/__init__.py similarity index 100% rename from backend/Minio_Storage/__init__.py rename to mih_api_hub/Minio_Storage/__init__.py diff --git a/backend/Minio_Storage/minioConnection.py b/mih_api_hub/Minio_Storage/minioConnection.py similarity index 88% rename from backend/Minio_Storage/minioConnection.py rename to mih_api_hub/Minio_Storage/minioConnection.py index f9bb06eb..106d0010 100644 --- a/backend/Minio_Storage/minioConnection.py +++ b/mih_api_hub/Minio_Storage/minioConnection.py @@ -9,7 +9,7 @@ minioSecret = os.getenv("MINIO_SECRET_KEY") def minioConnect(env): if(env == "Dev"): return Minio( - endpoint="minio:9000", + endpoint="mih-minio:9000", # "minio.mzansi-innovation-hub.co.za", access_key=minioAccess, secret_key=minioSecret, @@ -17,7 +17,7 @@ def minioConnect(env): ) else: return Minio( - # endpoint="minio:9000", + # endpoint="mih-minio:9000", endpoint="minio.mzansi-innovation-hub.co.za", access_key=minioAccess, secret_key=minioSecret, diff --git a/backend/__init__.py b/mih_api_hub/__init__.py similarity index 100% rename from backend/__init__.py rename to mih_api_hub/__init__.py diff --git a/backend/backup.py b/mih_api_hub/backup.py similarity index 100% rename from backend/backup.py rename to mih_api_hub/backup.py diff --git a/backend/main.py b/mih_api_hub/main.py similarity index 98% rename from backend/main.py rename to mih_api_hub/main.py index 37876e23..bb107d42 100644 --- a/backend/main.py +++ b/mih_api_hub/main.py @@ -54,7 +54,7 @@ init( ), supertokens_config=SupertokensConfig( # https://try.supertokens.com is for demo purposes. Replace this with the address of your core instance (sign up on supertokens.com), or self host a core. - connection_uri="http://MIH-SuperTokens:3567/", + connection_uri="http://mih-supertokens:3567/", api_key="leatucczyixqwkqqdrhayiwzeofkltds" ), framework='fastapi', diff --git a/backend/medicines/Database-Of-Medicine-Prices-31-May-2024.xls b/mih_api_hub/medicines/Database-Of-Medicine-Prices-31-May-2024.xls similarity index 100% rename from backend/medicines/Database-Of-Medicine-Prices-31-May-2024.xls rename to mih_api_hub/medicines/Database-Of-Medicine-Prices-31-May-2024.xls diff --git a/backend/medicines/Database-Of-Medicine-Prices-9-July-2024.xls b/mih_api_hub/medicines/Database-Of-Medicine-Prices-9-July-2024.xls similarity index 100% rename from backend/medicines/Database-Of-Medicine-Prices-9-July-2024.xls rename to mih_api_hub/medicines/Database-Of-Medicine-Prices-9-July-2024.xls diff --git a/backend/mih_database/__init__.py b/mih_api_hub/mih_database/__init__.py similarity index 100% rename from backend/mih_database/__init__.py rename to mih_api_hub/mih_database/__init__.py diff --git a/backend/mih_database/dbConnection.py b/mih_api_hub/mih_database/dbConnection.py similarity index 87% rename from backend/mih_database/dbConnection.py rename to mih_api_hub/mih_database/dbConnection.py index 04c8a118..023e39f1 100644 --- a/backend/mih_database/dbConnection.py +++ b/mih_api_hub/mih_database/dbConnection.py @@ -8,7 +8,7 @@ dbPass = os.getenv("DB_PASSWD") def dbPatientManagerConnect(): return mysql.connector.connect( - host="mysqldb", + host="mih-db", user=dbUser, passwd=dbPass, database="patient_manager" @@ -16,7 +16,7 @@ def dbPatientManagerConnect(): def dbAppDataConnect(): return mysql.connector.connect( - host="mysqldb", + host="mih-db", user=dbUser, passwd=dbPass, database="app_data" @@ -24,7 +24,7 @@ def dbAppDataConnect(): def dbDataAccessConnect(): return mysql.connector.connect( - host="mysqldb", + host="mih-db", user=dbUser, passwd=dbPass, database="data_access" @@ -32,7 +32,7 @@ def dbDataAccessConnect(): def dbMzansiWalletConnect(): return mysql.connector.connect( - host="mysqldb", + host="mih-db", user=dbUser, passwd=dbPass, database="mzansi_wallet" @@ -40,7 +40,7 @@ def dbMzansiWalletConnect(): def dbMzansiDirectoryConnect(): return mysql.connector.connect( - host="mysqldb", + host="mih-db", user=dbUser, passwd=dbPass, database="mzansi_directory" @@ -48,7 +48,7 @@ def dbMzansiDirectoryConnect(): def dbMzansiCalendarConnect(): return mysql.connector.connect( - host="mysqldb", + host="mih-db", user=dbUser, passwd=dbPass, database="mzansi_calendar" @@ -56,7 +56,7 @@ def dbMzansiCalendarConnect(): def dbAllConnect(): return mysql.connector.connect( - host="mysqldb", + host="mih-db", user=dbUser, passwd=dbPass, ) \ No newline at end of file diff --git a/backend/mih_database/mihDbConnections.py b/mih_api_hub/mih_database/mihDbConnections.py similarity index 91% rename from backend/mih_database/mihDbConnections.py rename to mih_api_hub/mih_database/mihDbConnections.py index 2be1ea95..51daa521 100644 --- a/backend/mih_database/mihDbConnections.py +++ b/mih_api_hub/mih_database/mihDbConnections.py @@ -7,7 +7,7 @@ from dotenv import load_dotenv load_dotenv() dbUser = os.getenv("DB_USER") dbPass = os.getenv("DB_PASSWD") -dbHost = "mysqldb" +dbHost = "mih-db" dbPort = 3306 encoded_dbPass = quote_plus(dbPass) base_connect_url = f"mysql+mysqlconnector://{dbUser}:{encoded_dbPass}@{dbHost}:{dbPort}/" @@ -15,7 +15,7 @@ base_connect_url = f"mysql+mysqlconnector://{dbUser}:{encoded_dbPass}@{dbHost}:{ def dbPatientManagerConnect(): return create_engine(base_connect_url+"patient_manager", echo=False, pool_recycle=3600) # return mysql.connector.connect( - # host="mysqldb", + # host="mih-db", # user=dbUser, # passwd=dbPass, # database="patient_manager" @@ -24,7 +24,7 @@ def dbPatientManagerConnect(): def dbAppDataConnect(): return create_engine(base_connect_url+"app_data", echo=False, pool_recycle=3600) # return mysql.connector.connect( - # host="mysqldb", + # host="mih-db", # user=dbUser, # passwd=dbPass, # database="app_data" @@ -33,7 +33,7 @@ def dbAppDataConnect(): def dbDataAccessConnect(): return create_engine(base_connect_url+"data_access", echo=False, pool_recycle=3600) # return mysql.connector.connect( - # host="mysqldb", + # host="mih-db", # user=dbUser, # passwd=dbPass, # database="data_access" @@ -42,7 +42,7 @@ def dbDataAccessConnect(): def dbMzansiWalletConnect(): return create_engine(base_connect_url+"mzansi_wallet", echo=False, pool_recycle=3600) # return mysql.connector.connect( - # host="mysqldb", + # host="mih-db", # user=dbUser, # passwd=dbPass, # database="mzansi_wallet" @@ -51,7 +51,7 @@ def dbMzansiWalletConnect(): def dbMzansiDirectoryConnect(): return create_engine(base_connect_url+"mzansi_directory", echo=False, pool_recycle=3600) # return mysql.connector.connect( - # host="mysqldb", + # host="mih-db", # user=dbUser, # passwd=dbPass, # database="mzansi_directory" @@ -60,7 +60,7 @@ def dbMzansiDirectoryConnect(): def dbMzansiCalendarConnect(): return create_engine(base_connect_url+"mzansi_calendar", echo=False, pool_recycle=3600) # return mysql.connector.connect( - # host="mysqldb", + # host="mih-db", # user=dbUser, # passwd=dbPass, # database="mzansi_calendar" @@ -69,7 +69,7 @@ def dbMzansiCalendarConnect(): def dbAllConnect(): return create_engine(base_connect_url, echo=False, pool_recycle=3600) # return mysql.connector.connect( - # host="mysqldb", + # host="mih-db", # user=dbUser, # passwd=dbPass, # ) \ No newline at end of file diff --git a/backend/mih_database/mihDbObjects.py b/mih_api_hub/mih_database/mihDbObjects.py similarity index 100% rename from backend/mih_database/mihDbObjects.py rename to mih_api_hub/mih_database/mihDbObjects.py diff --git a/backend/requirements.txt b/mih_api_hub/requirements.txt similarity index 100% rename from backend/requirements.txt rename to mih_api_hub/requirements.txt diff --git a/backend/routers/__init__.py b/mih_api_hub/routers/__init__.py similarity index 100% rename from backend/routers/__init__.py rename to mih_api_hub/routers/__init__.py diff --git a/backend/routers/access_request.py b/mih_api_hub/routers/access_request.py similarity index 100% rename from backend/routers/access_request.py rename to mih_api_hub/routers/access_request.py diff --git a/backend/routers/appointments.py b/mih_api_hub/routers/appointments.py similarity index 100% rename from backend/routers/appointments.py rename to mih_api_hub/routers/appointments.py diff --git a/backend/routers/business.py b/mih_api_hub/routers/business.py similarity index 100% rename from backend/routers/business.py rename to mih_api_hub/routers/business.py diff --git a/backend/routers/business_user.py b/mih_api_hub/routers/business_user.py similarity index 100% rename from backend/routers/business_user.py rename to mih_api_hub/routers/business_user.py diff --git a/backend/routers/claim_statement_files.py b/mih_api_hub/routers/claim_statement_files.py similarity index 100% rename from backend/routers/claim_statement_files.py rename to mih_api_hub/routers/claim_statement_files.py diff --git a/backend/routers/docOffices.py b/mih_api_hub/routers/docOffices.py similarity index 100% rename from backend/routers/docOffices.py rename to mih_api_hub/routers/docOffices.py diff --git a/backend/routers/fileStorage.py b/mih_api_hub/routers/fileStorage.py similarity index 100% rename from backend/routers/fileStorage.py rename to mih_api_hub/routers/fileStorage.py diff --git a/backend/routers/icd10_codes.py b/mih_api_hub/routers/icd10_codes.py similarity index 100% rename from backend/routers/icd10_codes.py rename to mih_api_hub/routers/icd10_codes.py diff --git a/backend/routers/medicine.py b/mih_api_hub/routers/medicine.py similarity index 100% rename from backend/routers/medicine.py rename to mih_api_hub/routers/medicine.py diff --git a/backend/routers/mine_sweeper_leaderboard.py b/mih_api_hub/routers/mine_sweeper_leaderboard.py similarity index 100% rename from backend/routers/mine_sweeper_leaderboard.py rename to mih_api_hub/routers/mine_sweeper_leaderboard.py diff --git a/backend/routers/mzansi_directory.py b/mih_api_hub/routers/mzansi_directory.py similarity index 100% rename from backend/routers/mzansi_directory.py rename to mih_api_hub/routers/mzansi_directory.py diff --git a/backend/routers/mzansi_wallet.py b/mih_api_hub/routers/mzansi_wallet.py similarity index 100% rename from backend/routers/mzansi_wallet.py rename to mih_api_hub/routers/mzansi_wallet.py diff --git a/backend/routers/notifications.py b/mih_api_hub/routers/notifications.py similarity index 100% rename from backend/routers/notifications.py rename to mih_api_hub/routers/notifications.py diff --git a/backend/routers/patient_access.py b/mih_api_hub/routers/patient_access.py similarity index 100% rename from backend/routers/patient_access.py rename to mih_api_hub/routers/patient_access.py diff --git a/backend/routers/patients.py b/mih_api_hub/routers/patients.py similarity index 100% rename from backend/routers/patients.py rename to mih_api_hub/routers/patients.py diff --git a/backend/routers/patients_files.py b/mih_api_hub/routers/patients_files.py similarity index 100% rename from backend/routers/patients_files.py rename to mih_api_hub/routers/patients_files.py diff --git a/backend/routers/patients_notes.py b/mih_api_hub/routers/patients_notes.py similarity index 100% rename from backend/routers/patients_notes.py rename to mih_api_hub/routers/patients_notes.py diff --git a/backend/routers/patients_queue.py b/mih_api_hub/routers/patients_queue.py similarity index 100% rename from backend/routers/patients_queue.py rename to mih_api_hub/routers/patients_queue.py diff --git a/backend/routers/user_consent.py b/mih_api_hub/routers/user_consent.py similarity index 100% rename from backend/routers/user_consent.py rename to mih_api_hub/routers/user_consent.py diff --git a/backend/routers/users.py b/mih_api_hub/routers/users.py similarity index 100% rename from backend/routers/users.py rename to mih_api_hub/routers/users.py diff --git a/backend/temp_logofile b/mih_api_hub/temp_logofile similarity index 100% rename from backend/temp_logofile rename to mih_api_hub/temp_logofile diff --git a/Frontend/.gitignore b/mih_ui/.gitignore similarity index 100% rename from Frontend/.gitignore rename to mih_ui/.gitignore diff --git a/mih_ui/.metadata b/mih_ui/.metadata new file mode 100644 index 00000000..ee6984a4 --- /dev/null +++ b/mih_ui/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "6fba2447e95c451518584c35e25f5433f14d888c" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 6fba2447e95c451518584c35e25f5433f14d888c + base_revision: 6fba2447e95c451518584c35e25f5433f14d888c + - platform: linux + create_revision: 6fba2447e95c451518584c35e25f5433f14d888c + base_revision: 6fba2447e95c451518584c35e25f5433f14d888c + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/Frontend/Dockerfile b/mih_ui/Dockerfile similarity index 100% rename from Frontend/Dockerfile rename to mih_ui/Dockerfile diff --git a/Frontend/README.md b/mih_ui/README.md similarity index 100% rename from Frontend/README.md rename to mih_ui/README.md diff --git a/Frontend/analysis_options.yaml b/mih_ui/analysis_options.yaml similarity index 100% rename from Frontend/analysis_options.yaml rename to mih_ui/analysis_options.yaml diff --git a/Frontend/android/.gitignore b/mih_ui/android/.gitignore similarity index 100% rename from Frontend/android/.gitignore rename to mih_ui/android/.gitignore diff --git a/Frontend/android/app/build.gradle.kts b/mih_ui/android/app/build.gradle.kts similarity index 94% rename from Frontend/android/app/build.gradle.kts rename to mih_ui/android/app/build.gradle.kts index c96f5437..0aea73ef 100644 --- a/Frontend/android/app/build.gradle.kts +++ b/mih_ui/android/app/build.gradle.kts @@ -3,6 +3,9 @@ import java.io.FileInputStream plugins { id("com.android.application") + // START: FlutterFire Configuration + id("com.google.gms.google-services") + // END: FlutterFire Configuration id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id("dev.flutter.flutter-gradle-plugin") diff --git a/mih_ui/android/app/google-services.json b/mih_ui/android/app/google-services.json new file mode 100644 index 00000000..4f9479a5 --- /dev/null +++ b/mih_ui/android/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "33677883408", + "project_id": "mzansi-innovation-hub", + "storage_bucket": "mzansi-innovation-hub.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:33677883408:android:ebd8565991c56257223295", + "android_client_info": { + "package_name": "za.co.mzansiinnovationhub.mih" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBUkjWdu9YcgiF-e9TC5hoiEoCjPyjA5hU" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/Frontend/android/app/proguard-rules.pro b/mih_ui/android/app/proguard-rules.pro similarity index 100% rename from Frontend/android/app/proguard-rules.pro rename to mih_ui/android/app/proguard-rules.pro diff --git a/Frontend/android/app/src/debug/AndroidManifest.xml b/mih_ui/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from Frontend/android/app/src/debug/AndroidManifest.xml rename to mih_ui/android/app/src/debug/AndroidManifest.xml diff --git a/Frontend/android/app/src/main/AndroidManifest.xml b/mih_ui/android/app/src/main/AndroidManifest.xml similarity index 100% rename from Frontend/android/app/src/main/AndroidManifest.xml rename to mih_ui/android/app/src/main/AndroidManifest.xml diff --git a/Frontend/android/app/src/main/kotlin/za/co/mzansiinnovationhub/mih/MainActivity.kt b/mih_ui/android/app/src/main/kotlin/za/co/mzansiinnovationhub/mih/MainActivity.kt similarity index 100% rename from Frontend/android/app/src/main/kotlin/za/co/mzansiinnovationhub/mih/MainActivity.kt rename to mih_ui/android/app/src/main/kotlin/za/co/mzansiinnovationhub/mih/MainActivity.kt diff --git a/Frontend/android/app/src/main/res/drawable-hdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-hdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-hdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-hdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-hdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-hdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-hdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-hdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-hdpi/branding.png b/mih_ui/android/app/src/main/res/drawable-hdpi/branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-hdpi/branding.png rename to mih_ui/android/app/src/main/res/drawable-hdpi/branding.png diff --git a/mih_ui/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/mih_ui/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..c2334020 Binary files /dev/null and b/mih_ui/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png differ diff --git a/Frontend/android/app/src/main/res/drawable-hdpi/splash.png b/mih_ui/android/app/src/main/res/drawable-hdpi/splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-hdpi/splash.png rename to mih_ui/android/app/src/main/res/drawable-hdpi/splash.png diff --git a/Frontend/android/app/src/main/res/drawable-mdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-mdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-mdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-mdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-mdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-mdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-mdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-mdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-mdpi/branding.png b/mih_ui/android/app/src/main/res/drawable-mdpi/branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-mdpi/branding.png rename to mih_ui/android/app/src/main/res/drawable-mdpi/branding.png diff --git a/mih_ui/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/mih_ui/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..7ba3e88d Binary files /dev/null and b/mih_ui/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png differ diff --git a/Frontend/android/app/src/main/res/drawable-mdpi/splash.png b/mih_ui/android/app/src/main/res/drawable-mdpi/splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-mdpi/splash.png rename to mih_ui/android/app/src/main/res/drawable-mdpi/splash.png diff --git a/Frontend/android/app/src/main/res/drawable-night-hdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-night-hdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-hdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-night-hdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-night-hdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-night-hdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-hdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-night-hdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-night-mdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-night-mdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-mdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-night-mdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-night-mdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-night-mdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-mdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-night-mdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-night-xhdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-night-xhdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-xhdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-night-xhdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-night-xhdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-night-xhdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-xhdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-night-xhdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-night-xxhdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-night-xxhdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-xxhdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-night-xxhdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-night-xxxhdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-night-xxxhdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-xxxhdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-night-xxxhdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-v21/background.png b/mih_ui/android/app/src/main/res/drawable-v21/background.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-v21/background.png rename to mih_ui/android/app/src/main/res/drawable-v21/background.png diff --git a/Frontend/android/app/src/main/res/drawable-v21/launch_background.xml b/mih_ui/android/app/src/main/res/drawable-v21/launch_background.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable-v21/launch_background.xml rename to mih_ui/android/app/src/main/res/drawable-v21/launch_background.xml diff --git a/Frontend/android/app/src/main/res/drawable-xhdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-xhdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xhdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-xhdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-xhdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-xhdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xhdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-xhdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-xhdpi/branding.png b/mih_ui/android/app/src/main/res/drawable-xhdpi/branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xhdpi/branding.png rename to mih_ui/android/app/src/main/res/drawable-xhdpi/branding.png diff --git a/mih_ui/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/mih_ui/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..42375e79 Binary files /dev/null and b/mih_ui/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png differ diff --git a/Frontend/android/app/src/main/res/drawable-xhdpi/splash.png b/mih_ui/android/app/src/main/res/drawable-xhdpi/splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xhdpi/splash.png rename to mih_ui/android/app/src/main/res/drawable-xhdpi/splash.png diff --git a/Frontend/android/app/src/main/res/drawable-xxhdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-xxhdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xxhdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-xxhdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-xxhdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-xxhdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xxhdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-xxhdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-xxhdpi/branding.png b/mih_ui/android/app/src/main/res/drawable-xxhdpi/branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xxhdpi/branding.png rename to mih_ui/android/app/src/main/res/drawable-xxhdpi/branding.png diff --git a/mih_ui/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/mih_ui/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..a025358b Binary files /dev/null and b/mih_ui/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png differ diff --git a/Frontend/android/app/src/main/res/drawable-xxhdpi/splash.png b/mih_ui/android/app/src/main/res/drawable-xxhdpi/splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xxhdpi/splash.png rename to mih_ui/android/app/src/main/res/drawable-xxhdpi/splash.png diff --git a/Frontend/android/app/src/main/res/drawable-xxxhdpi-v31/android12branding.png b/mih_ui/android/app/src/main/res/drawable-xxxhdpi-v31/android12branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xxxhdpi-v31/android12branding.png rename to mih_ui/android/app/src/main/res/drawable-xxxhdpi-v31/android12branding.png diff --git a/Frontend/android/app/src/main/res/drawable-xxxhdpi/android12splash.png b/mih_ui/android/app/src/main/res/drawable-xxxhdpi/android12splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xxxhdpi/android12splash.png rename to mih_ui/android/app/src/main/res/drawable-xxxhdpi/android12splash.png diff --git a/Frontend/android/app/src/main/res/drawable-xxxhdpi/branding.png b/mih_ui/android/app/src/main/res/drawable-xxxhdpi/branding.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xxxhdpi/branding.png rename to mih_ui/android/app/src/main/res/drawable-xxxhdpi/branding.png diff --git a/mih_ui/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/mih_ui/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..b3f25f77 Binary files /dev/null and b/mih_ui/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png differ diff --git a/Frontend/android/app/src/main/res/drawable-xxxhdpi/splash.png b/mih_ui/android/app/src/main/res/drawable-xxxhdpi/splash.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable-xxxhdpi/splash.png rename to mih_ui/android/app/src/main/res/drawable-xxxhdpi/splash.png diff --git a/Frontend/android/app/src/main/res/drawable/background.png b/mih_ui/android/app/src/main/res/drawable/background.png similarity index 100% rename from Frontend/android/app/src/main/res/drawable/background.png rename to mih_ui/android/app/src/main/res/drawable/background.png diff --git a/Frontend/android/app/src/main/res/drawable/calculator.xml b/mih_ui/android/app/src/main/res/drawable/calculator.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/calculator.xml rename to mih_ui/android/app/src/main/res/drawable/calculator.xml diff --git a/Frontend/android/app/src/main/res/drawable/launch_background.xml b/mih_ui/android/app/src/main/res/drawable/launch_background.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/launch_background.xml rename to mih_ui/android/app/src/main/res/drawable/launch_background.xml diff --git a/Frontend/android/app/src/main/res/drawable/mih_calculator_sc.xml b/mih_ui/android/app/src/main/res/drawable/mih_calculator_sc.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/mih_calculator_sc.xml rename to mih_ui/android/app/src/main/res/drawable/mih_calculator_sc.xml diff --git a/Frontend/android/app/src/main/res/drawable/mih_home_sc.xml b/mih_ui/android/app/src/main/res/drawable/mih_home_sc.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/mih_home_sc.xml rename to mih_ui/android/app/src/main/res/drawable/mih_home_sc.xml diff --git a/Frontend/android/app/src/main/res/drawable/mih_logo.xml b/mih_ui/android/app/src/main/res/drawable/mih_logo.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/mih_logo.xml rename to mih_ui/android/app/src/main/res/drawable/mih_logo.xml diff --git a/Frontend/android/app/src/main/res/drawable/mzansi_ai.xml b/mih_ui/android/app/src/main/res/drawable/mzansi_ai.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/mzansi_ai.xml rename to mih_ui/android/app/src/main/res/drawable/mzansi_ai.xml diff --git a/Frontend/android/app/src/main/res/drawable/mzansi_ai_sc.xml b/mih_ui/android/app/src/main/res/drawable/mzansi_ai_sc.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/mzansi_ai_sc.xml rename to mih_ui/android/app/src/main/res/drawable/mzansi_ai_sc.xml diff --git a/mih_ui/android/app/src/main/res/drawable/mzansi_directory.xml b/mih_ui/android/app/src/main/res/drawable/mzansi_directory.xml new file mode 100644 index 00000000..5cd49d32 --- /dev/null +++ b/mih_ui/android/app/src/main/res/drawable/mzansi_directory.xml @@ -0,0 +1,11 @@ + + + + diff --git a/mih_ui/android/app/src/main/res/drawable/mzansi_directory_sc.xml b/mih_ui/android/app/src/main/res/drawable/mzansi_directory_sc.xml new file mode 100644 index 00000000..74928e30 --- /dev/null +++ b/mih_ui/android/app/src/main/res/drawable/mzansi_directory_sc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Frontend/android/app/src/main/res/drawable/mzansi_wallet.xml b/mih_ui/android/app/src/main/res/drawable/mzansi_wallet.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/mzansi_wallet.xml rename to mih_ui/android/app/src/main/res/drawable/mzansi_wallet.xml diff --git a/Frontend/android/app/src/main/res/drawable/mzansi_wallet_sc.xml b/mih_ui/android/app/src/main/res/drawable/mzansi_wallet_sc.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/mzansi_wallet_sc.xml rename to mih_ui/android/app/src/main/res/drawable/mzansi_wallet_sc.xml diff --git a/Frontend/android/app/src/main/res/drawable/test.xml b/mih_ui/android/app/src/main/res/drawable/test.xml similarity index 100% rename from Frontend/android/app/src/main/res/drawable/test.xml rename to mih_ui/android/app/src/main/res/drawable/test.xml diff --git a/Frontend/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml b/mih_ui/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml similarity index 100% rename from Frontend/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml rename to mih_ui/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml diff --git a/Frontend/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mih_ui/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from Frontend/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to mih_ui/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/mih_ui/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/mih_ui/android/app/src/main/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 00000000..a629ce16 Binary files /dev/null and b/mih_ui/android/app/src/main/res/mipmap-hdpi/launcher_icon.png differ diff --git a/Frontend/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mih_ui/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from Frontend/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to mih_ui/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/mih_ui/android/app/src/main/res/mipmap-mdpi/launcher_icon.png b/mih_ui/android/app/src/main/res/mipmap-mdpi/launcher_icon.png new file mode 100644 index 00000000..93deda87 Binary files /dev/null and b/mih_ui/android/app/src/main/res/mipmap-mdpi/launcher_icon.png differ diff --git a/Frontend/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/mih_ui/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from Frontend/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to mih_ui/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/mih_ui/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/mih_ui/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 00000000..bfda05d5 Binary files /dev/null and b/mih_ui/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png differ diff --git a/Frontend/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mih_ui/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from Frontend/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to mih_ui/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/mih_ui/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/mih_ui/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 00000000..51b6e608 Binary files /dev/null and b/mih_ui/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png differ diff --git a/Frontend/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mih_ui/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from Frontend/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to mih_ui/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/mih_ui/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/mih_ui/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 00000000..adbce8e0 Binary files /dev/null and b/mih_ui/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png differ diff --git a/Frontend/android/app/src/main/res/values-night-v31/styles.xml b/mih_ui/android/app/src/main/res/values-night-v31/styles.xml similarity index 100% rename from Frontend/android/app/src/main/res/values-night-v31/styles.xml rename to mih_ui/android/app/src/main/res/values-night-v31/styles.xml diff --git a/Frontend/android/app/src/main/res/values-night/styles.xml b/mih_ui/android/app/src/main/res/values-night/styles.xml similarity index 100% rename from Frontend/android/app/src/main/res/values-night/styles.xml rename to mih_ui/android/app/src/main/res/values-night/styles.xml diff --git a/Frontend/android/app/src/main/res/values-v31/styles.xml b/mih_ui/android/app/src/main/res/values-v31/styles.xml similarity index 100% rename from Frontend/android/app/src/main/res/values-v31/styles.xml rename to mih_ui/android/app/src/main/res/values-v31/styles.xml diff --git a/Frontend/android/app/src/main/res/values/arrays.xml b/mih_ui/android/app/src/main/res/values/arrays.xml similarity index 100% rename from Frontend/android/app/src/main/res/values/arrays.xml rename to mih_ui/android/app/src/main/res/values/arrays.xml diff --git a/mih_ui/android/app/src/main/res/values/colors.xml b/mih_ui/android/app/src/main/res/values/colors.xml new file mode 100644 index 00000000..152a652e --- /dev/null +++ b/mih_ui/android/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #3A4454 + + + + #3A4454 + #bedcfe + \ No newline at end of file diff --git a/Frontend/android/app/src/main/res/values/styles.xml b/mih_ui/android/app/src/main/res/values/styles.xml similarity index 100% rename from Frontend/android/app/src/main/res/values/styles.xml rename to mih_ui/android/app/src/main/res/values/styles.xml diff --git a/Frontend/android/app/src/profile/AndroidManifest.xml b/mih_ui/android/app/src/profile/AndroidManifest.xml similarity index 100% rename from Frontend/android/app/src/profile/AndroidManifest.xml rename to mih_ui/android/app/src/profile/AndroidManifest.xml diff --git a/Frontend/android/build.gradle.kts b/mih_ui/android/build.gradle.kts similarity index 100% rename from Frontend/android/build.gradle.kts rename to mih_ui/android/build.gradle.kts diff --git a/Frontend/android/build/reports/problems/problems-report.html b/mih_ui/android/build/reports/problems/problems-report.html similarity index 100% rename from Frontend/android/build/reports/problems/problems-report.html rename to mih_ui/android/build/reports/problems/problems-report.html diff --git a/Frontend/android/gradle.properties b/mih_ui/android/gradle.properties similarity index 100% rename from Frontend/android/gradle.properties rename to mih_ui/android/gradle.properties diff --git a/Frontend/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from Frontend/android/gradle/wrapper/gradle-wrapper.properties rename to mih_ui/android/gradle/wrapper/gradle-wrapper.properties diff --git a/Frontend/android/settings.gradle.kts b/mih_ui/android/settings.gradle.kts similarity index 83% rename from Frontend/android/settings.gradle.kts rename to mih_ui/android/settings.gradle.kts index ab39a10a..bd7522f7 100644 --- a/Frontend/android/settings.gradle.kts +++ b/mih_ui/android/settings.gradle.kts @@ -19,6 +19,9 @@ pluginManagement { plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" id("com.android.application") version "8.7.3" apply false + // START: FlutterFire Configuration + id("com.google.gms.google-services") version("4.3.15") apply false + // END: FlutterFire Configuration id("org.jetbrains.kotlin.android") version "2.1.0" apply false } diff --git a/Frontend/devtools_options.yaml b/mih_ui/devtools_options.yaml similarity index 100% rename from Frontend/devtools_options.yaml rename to mih_ui/devtools_options.yaml diff --git a/mih_ui/firebase.json b/mih_ui/firebase.json new file mode 100644 index 00000000..d3d23465 --- /dev/null +++ b/mih_ui/firebase.json @@ -0,0 +1 @@ +{"flutter":{"platforms":{"android":{"default":{"projectId":"mzansi-innovation-hub","appId":"1:33677883408:android:ebd8565991c56257223295","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"mzansi-innovation-hub","appId":"1:33677883408:ios:2048dac086428716223295","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"macos":{"default":{"projectId":"mzansi-innovation-hub","appId":"1:33677883408:ios:e2db11a42fc3452e223295","uploadDebugSymbols":false,"fileOutput":"macos/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"mzansi-innovation-hub","configurations":{"android":"1:33677883408:android:ebd8565991c56257223295","ios":"1:33677883408:ios:2048dac086428716223295","macos":"1:33677883408:ios:e2db11a42fc3452e223295","web":"1:33677883408:web:47b8021df7fcacd2223295","windows":"1:33677883408:web:e08becaef3261c59223295"}}}}}} \ No newline at end of file diff --git a/mih_ui/firepit-log.txt b/mih_ui/firepit-log.txt new file mode 100644 index 00000000..cf8334ba --- /dev/null +++ b/mih_ui/firepit-log.txt @@ -0,0 +1,13 @@ +Welcome to firepit v1.1.0! +Doing JSON parses for version checks at /snapshot/firepit/vendor/node_modules/firebase-tools/package.json +is-ci,mime,rc,yaml,abbrev,abort-controller,accepts,acorn,acorn-walk,agent-base,ajv,ajv-formats,ansi-align,ansi-escapes,ansi-regex,ansi-styles,any-promise,anymatch,archiver,archiver-utils,arg,argparse,array-flatten,arrify,as-array,ast-types,async,async-lock,asynckit,b4a,balanced-match,bare-events,base64-js,basic-auth,basic-auth-connect,basic-ftp,bignumber.js,binary-extensions,bl,body-parser,boxen,brace-expansion,braces,buffer,buffer-crc32,buffer-equal-constant-time,bytes,cacache,call-bind-apply-helpers,call-bound,call-me-maybe,camelcase,chalk,char-regex,chardet,chokidar,chownr,ci-info,cjson,cli-boxes,cli-cursor,cli-highlight,cli-spinners,cli-table3,cli-width,cliui,clone,color,color-convert,color-name,color-string,colorette,combined-stream,commander,compress-commons,compressible,compression,concat-map,config-chain,configstore,connect,content-disposition,content-type,cookie,cookie-signature,core-util-is,cors,crc-32,crc32-stream,create-require,cross-env,cross-spawn,crypto-random-string,csv-parse,data-uri-to-buffer,debug,deep-equal-in-any-order,deep-extend,deep-freeze,deep-is,defaults,degenerator,delayed-stream,depd,destroy,diff,discontinuous-range,dot-prop,dunder-proto,duplexify,eastasianwidth,ecdsa-sig-formatter,ee-first,emoji-regex,emojilib,enabled,encodeurl,encoding,end-of-stream,env-paths,environment,err-code,es-define-property,es-errors,es-object-atoms,es-set-tostringtag,escalade,escape-goat,escape-html,escodegen,esprima,estraverse,esutils,etag,event-target-shim,events,events-listener,events-universal,eventsource,eventsource-parser,exegesis,exegesis-express,exponential-backoff,express,express-rate-limit,extend,fast-deep-equal,fast-fifo,fast-uri,fecha,fetch-blob,filesize,fill-range,finalhandler,firebase-tools,fn.name,foreground-child,form-data,formdata-polyfill,forwarded,fresh,fs-extra,fs-minipass,function-bind,fuzzy,gaxios,gcp-metadata,get-caller-file,get-intrinsic,get-proto,get-uri,glob,glob-parent,glob-slash,glob-slasher,global-dirs,google-auth-library,google-gax,google-logging-utils,googleapis-common,gopd,graceful-fs,gtoken,has-flag,has-symbols,has-tostringtag,has-yarn,hasown,heap-js,highlight.js,hosted-git-info,http-cache-semantics,http-errors,http-proxy-agent,https-proxy-agent,iconv-lite,ieee754,ignore,import-lazy,imurmurhash,infer-owner,inherits,ini,install-artifact-from-github,ip-address,ip-regex,ipaddr.js,is-binary-path,is-buffer,is-extglob,is-fullwidth-code-point,is-glob,is-installed-globally,is-interactive,is-npm,is-number,is-obj,is-path-inside,is-promise,is-stream,is-stream-ended,is-typedarray,is-unicode-supported,is-url,is-wsl,is-yarn-global,is2,isarray,isexe,isomorphic-fetch,jackspeak,jju,join-path,jose,js-yaml,json-bigint,json-parse-helpfulerror,json-ptr,json-schema-traverse,jsonfile,jsonwebtoken,jwa,jws,kind-of,kuler,lazystream,leven,libsodium,libsodium-wrappers,lodash,lodash._objecttypes,lodash.camelcase,lodash.includes,lodash.isboolean,lodash.isinteger,lodash.isnumber,lodash.isobject,lodash.isplainobject,lodash.isstring,lodash.mapvalues,lodash.once,lodash.snakecase,log-symbols,logform,long,lru-cache,lsofi,make-dir,make-error,make-fetch-happen,marked,marked-terminal,math-intrinsics,media-typer,merge-descriptors,methods,mime-db,mime-types,mimic-fn,minimatch,minimist,minipass,minipass-collect,minipass-fetch,minipass-flush,minipass-pipeline,minipass-sized,minizlib,mkdirp,moo,morgan,ms,mute-stream,mz,nan,nearley,negotiator,netmask,node-domexception,node-emoji,node-fetch,node-gyp,nopt,normalize-path,npm-install-checks,npm-normalize-package-bin,npm-package-arg,npm-pick-manifest,object-assign,object-hash,object-inspect,on-finished,on-headers,once,one-time,onetime,open,openapi3-ts,ora,p-defer,p-limit,p-map,p-throttle,pac-proxy-agent,pac-resolver,package-json-from-dist,parse5,parse5-htmlparser2-tree-adapter,parseurl,path-key,path-scurry,path-to-regexp,pg,pg-cloudflare,pg-connection-string,pg-gateway,pg-int8,pg-pool,pg-protocol,pg-types,pglite-2,pgpass,picomatch,pkce-challenge,portfinder,postgres-array,postgres-bytea,postgres-date,postgres-interval,proc-log,process,process-nextick-args,progress,promise-breaker,promise-retry,proto-list,proto3-json-serializer,protobufjs,proxy-addr,proxy-agent,proxy-from-env,pupa,qs,railroad-diagrams,randexp,range-parser,raw-body,re2,readable-stream,readdir-glob,readdirp,registry-auth-token,registry-url,require-directory,require-from-string,restore-cursor,ret,retry,retry-request,rimraf,router,safe-buffer,safe-stable-stringify,safer-buffer,semver,semver-diff,send,serve-static,setprototypeof,shebang-command,shebang-regex,side-channel,side-channel-list,side-channel-map,side-channel-weakmap,signal-exit,skin-tone,smart-buffer,socks,socks-proxy-agent,sort-any,source-map,split2,sprintf-js,sql-formatter,ssri,stack-trace,statuses,stream-chain,stream-events,stream-json,stream-shift,streamx,string-width,string-width-cjs,string_decoder,strip-ansi,strip-ansi-cjs,strip-json-comments,stubs,superstatic,supports-color,supports-hyperlinks,tar,tar-stream,tcp-port-used,teeny-request,text-decoder,text-hex,thenify,thenify-all,through2,tinyglobby,tmp,to-regex-range,toidentifier,toxic,tr46,triple-beam,ts-node,tslib,tsscmp,type-fest,type-is,typedarray-to-buffer,typescript,undici-types,unicode-emoji-modifier-base,unique-filename,unique-slug,unique-string,universal-analytics,universalify,unpipe,update-notifier-cjs,url-join,url-template,util-deprecate,utils-merge,uuid,v8-compile-cache-lib,valid-url,validate-npm-package-name,vary,wcwidth,web-streams-polyfill,webidl-conversions,whatwg-fetch,whatwg-url,which,widest-line,winston,winston-transport,wrap-ansi,wrap-ansi-cjs,wrappy,write-file-atomic,ws,xdg-basedir,xtend,y18n,yallist,yargs,yargs-parser,yn,yocto-queue,yoctocolors-cjs,zip-stream,zod,zod-to-json-schema,@apidevtools,@apphosting,@colors,@cspotcode,@dabh,@electric-sql,@google-cloud,@googleapis,@grpc,@inquirer,@isaacs,@jridgewell,@js-sdsl,@jsdevtools,@modelcontextprotocol,@npmcli,@opentelemetry,@pkgjs,@pnpm,@protobufjs,@sindresorhus,@so-ric,@tootallnate,@tsconfig,@types +Installed ft@14.27.0 and packaged ft@14.27.0 +Checking for npm/bin/npm-cli install at /home/yaso/.cache/firebase/tools/lib/node_modules/npm/bin/npm-cli +Checking for npm/bin/npm-cli install at /home/yaso/.cache/firebase/tools/node_modules/npm/bin/npm-cli +Checking for npm/bin/npm-cli install at /snapshot/firepit/node_modules/npm/bin/npm-cli +Found npm/bin/npm-cli install. +Checking for npm/bin/npm-cli install at /home/yaso/.cache/firebase/tools/lib/node_modules/npm/bin/npm-cli +Checking for npm/bin/npm-cli install at /home/yaso/.cache/firebase/tools/node_modules/npm/bin/npm-cli +Checking for npm/bin/npm-cli install at /snapshot/firepit/node_modules/npm/bin/npm-cli +Found npm/bin/npm-cli install. +ShellJSInternalError: ENOENT: no such file or directory, chmod '/home/yaso/.cache/firebase/runtime/shell' \ No newline at end of file diff --git a/Frontend/flutter_launcher_icons.yaml b/mih_ui/flutter_launcher_icons.yaml similarity index 73% rename from Frontend/flutter_launcher_icons.yaml rename to mih_ui/flutter_launcher_icons.yaml index 8d972e9f..c64c3808 100644 --- a/Frontend/flutter_launcher_icons.yaml +++ b/mih_ui/flutter_launcher_icons.yaml @@ -1,40 +1,40 @@ # flutter pub run flutter_launcher_icons flutter_launcher_icons: # Original - # image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_app.png" + image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_app.png" # Women For Change - image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" + # image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" android: "launcher_icon" min_sdk_android: 21 # android min sdk min:16, default 21 # Original - # adaptive_icon_background: "#3A4454" - # adaptive_icon_foreground: "lib/mih_package_components/assets/images/app_icon/mih_logo_app.png" + adaptive_icon_background: "#3A4454" + adaptive_icon_foreground: "lib/mih_package_components/assets/images/app_icon/mih_logo_app.png" # Women For Change - adaptive_icon_background: "#6641b2" - adaptive_icon_foreground: "lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" + # adaptive_icon_background: "#6641b2" + # adaptive_icon_foreground: "lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" ios: true # Original - # image_path_ios: "lib/mih_package_components/assets/images/app_icon/mih_logo_app.png" + image_path_ios: "lib/mih_package_components/assets/images/app_icon/mih_logo_app.png" # Women For Change - image_path_ios: "lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" + # image_path_ios: "lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png" remove_alpha_channel_ios: true web: generate: true # Original - # image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_web.png" - # background_color: "#3A4454" - # theme_color: "#3A4454" + image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_web.png" + background_color: "#3A4454" + theme_color: "#3A4454" # Women For Change - image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png" - background_color: "#6641b2" - theme_color: "#6641b2" + # image_path: "lib/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png" + # background_color: "#6641b2" + # theme_color: "#6641b2" windows: generate: true diff --git a/Frontend/ios/.gitignore b/mih_ui/ios/.gitignore similarity index 100% rename from Frontend/ios/.gitignore rename to mih_ui/ios/.gitignore diff --git a/Frontend/ios/Flutter/AppFrameworkInfo.plist b/mih_ui/ios/Flutter/AppFrameworkInfo.plist similarity index 100% rename from Frontend/ios/Flutter/AppFrameworkInfo.plist rename to mih_ui/ios/Flutter/AppFrameworkInfo.plist diff --git a/Frontend/ios/Flutter/Debug.xcconfig b/mih_ui/ios/Flutter/Debug.xcconfig similarity index 100% rename from Frontend/ios/Flutter/Debug.xcconfig rename to mih_ui/ios/Flutter/Debug.xcconfig diff --git a/Frontend/ios/Flutter/Release.xcconfig b/mih_ui/ios/Flutter/Release.xcconfig similarity index 100% rename from Frontend/ios/Flutter/Release.xcconfig rename to mih_ui/ios/Flutter/Release.xcconfig diff --git a/Frontend/ios/Podfile b/mih_ui/ios/Podfile similarity index 100% rename from Frontend/ios/Podfile rename to mih_ui/ios/Podfile diff --git a/Frontend/ios/Podfile.lock b/mih_ui/ios/Podfile.lock similarity index 83% rename from Frontend/ios/Podfile.lock rename to mih_ui/ios/Podfile.lock index 5de20c98..9d987bad 100644 --- a/Frontend/ios/Podfile.lock +++ b/mih_ui/ios/Podfile.lock @@ -7,9 +7,6 @@ PODS: - PromisesObjC (~> 2.4) - camera_avfoundation (0.0.1): - Flutter - - CwlCatchException (2.2.1): - - CwlCatchExceptionSupport (~> 2.2.1) - - CwlCatchExceptionSupport (2.2.1) - device_info_plus (0.0.1): - Flutter - DKImagePickerController/Core (4.3.9): @@ -51,47 +48,47 @@ PODS: - Flutter - file_selector_ios (0.0.1): - Flutter - - Firebase/Auth (12.4.0): + - Firebase/Auth (12.8.0): - Firebase/CoreOnly - - FirebaseAuth (~> 12.4.0) - - Firebase/CoreOnly (12.4.0): - - FirebaseCore (~> 12.4.0) + - FirebaseAuth (~> 12.8.0) + - Firebase/CoreOnly (12.8.0): + - FirebaseCore (~> 12.8.0) - firebase_app_check (0.4.1-2): - - Firebase/CoreOnly (~> 12.4.0) + - Firebase/CoreOnly (~> 12.8.0) - firebase_core - - FirebaseAppCheck (~> 12.4.0) + - FirebaseAppCheck (~> 12.8.0) - Flutter - firebase_auth (6.1.2): - - Firebase/Auth (= 12.4.0) + - Firebase/Auth (= 12.8.0) - firebase_core - Flutter - - firebase_core (4.2.1): - - Firebase/CoreOnly (= 12.4.0) + - firebase_core (4.4.0): + - Firebase/CoreOnly (= 12.8.0) - Flutter - - FirebaseAppCheck (12.4.0): + - FirebaseAppCheck (12.8.0): - AppCheckCore (~> 11.0) - - FirebaseAppCheckInterop (~> 12.4.0) - - FirebaseCore (~> 12.4.0) + - FirebaseAppCheckInterop (~> 12.8.0) + - FirebaseCore (~> 12.8.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/UserDefaults (~> 8.1) - - FirebaseAppCheckInterop (12.4.0) - - FirebaseAuth (12.4.0): - - FirebaseAppCheckInterop (~> 12.4.0) - - FirebaseAuthInterop (~> 12.4.0) - - FirebaseCore (~> 12.4.0) - - FirebaseCoreExtension (~> 12.4.0) + - FirebaseAppCheckInterop (12.8.0) + - FirebaseAuth (12.8.0): + - FirebaseAppCheckInterop (~> 12.8.0) + - FirebaseAuthInterop (~> 12.8.0) + - FirebaseCore (~> 12.8.0) + - FirebaseCoreExtension (~> 12.8.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/Environment (~> 8.1) - GTMSessionFetcher/Core (< 6.0, >= 3.4) - RecaptchaInterop (~> 101.0) - - FirebaseAuthInterop (12.4.0) - - FirebaseCore (12.4.0): - - FirebaseCoreInternal (~> 12.4.0) + - FirebaseAuthInterop (12.8.0) + - FirebaseCore (12.8.0): + - FirebaseCoreInternal (~> 12.8.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreExtension (12.4.0): - - FirebaseCore (~> 12.4.0) - - FirebaseCoreInternal (12.4.0): + - FirebaseCoreExtension (12.8.0): + - FirebaseCore (~> 12.8.0) + - FirebaseCoreInternal (12.8.0): - "GoogleUtilities/NSData+zlib (~> 8.1)" - fl_downloader (0.0.1): - Flutter @@ -115,7 +112,7 @@ PODS: - GoogleMobileAdsMediationFacebook (6.20.1.0): - FBAudienceNetwork (= 6.20.1) - Google-Mobile-Ads-SDK (~> 12.0) - - GoogleUserMessagingPlatform (3.0.0) + - GoogleUserMessagingPlatform (3.1.0) - GoogleUtilities/AppDelegateSwizzler (8.1.0): - GoogleUtilities/Environment - GoogleUtilities/Logger @@ -164,18 +161,14 @@ PODS: - Flutter - screen_brightness_ios (0.1.0): - Flutter - - SDWebImage (5.20.0): - - SDWebImage/Core (= 5.20.0) - - SDWebImage/Core (5.20.0) + - SDWebImage (5.21.5): + - SDWebImage/Core (= 5.21.5) + - SDWebImage/Core (5.21.5) - share_plus (0.0.1): - Flutter - shared_preferences_foundation (0.0.1): - Flutter - FlutterMacOS - - speech_to_text (7.2.0): - - CwlCatchException - - Flutter - - FlutterMacOS - sqflite_darwin (0.0.4): - Flutter - FlutterMacOS @@ -216,7 +209,6 @@ DEPENDENCIES: - screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - - speech_to_text (from `.symlinks/plugins/speech_to_text/darwin`) - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) - syncfusion_flutter_pdfviewer (from `.symlinks/plugins/syncfusion_flutter_pdfviewer/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) @@ -225,8 +217,6 @@ DEPENDENCIES: SPEC REPOS: trunk: - AppCheckCore - - CwlCatchException - - CwlCatchExceptionSupport - DKImagePickerController - DKPhotoGallery - FBAudienceNetwork @@ -303,8 +293,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/share_plus/ios" shared_preferences_foundation: :path: ".symlinks/plugins/shared_preferences_foundation/darwin" - speech_to_text: - :path: ".symlinks/plugins/speech_to_text/darwin" sqflite_darwin: :path: ".symlinks/plugins/sqflite_darwin/darwin" syncfusion_flutter_pdfviewer: @@ -318,8 +306,6 @@ SPEC CHECKSUMS: app_settings: 5127ae0678de1dcc19f2293271c51d37c89428b2 AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f camera_avfoundation: be3be85408cd4126f250386828e9b1dfa40ab436 - CwlCatchException: 7acc161b299a6de7f0a46a6ed741eae2c8b4d75a - CwlCatchExceptionSupport: 54ccab8d8c78907b57f99717fb19d4cc3bce02dc device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 @@ -327,17 +313,17 @@ SPEC CHECKSUMS: file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be file_saver: 6cdbcddd690cb02b0c1a0c225b37cd805c2bf8b6 file_selector_ios: f92e583d43608aebc2e4a18daac30b8902845502 - Firebase: f07b15ae5a6ec0f93713e30b923d9970d144af3e - firebase_app_check: 61fb3578a0761c806533482aca240a2d5cc5b5ef - firebase_auth: 9225db04db5d8e3b46dc8940e04bc6aec6833e27 - firebase_core: f1aafb21c14f497e5498f7ffc4dc63cbb52b2594 - FirebaseAppCheck: 73721d98fa29cf199da6004e57715cbaddd49651 - FirebaseAppCheckInterop: f734c802f21fe1da0837708f0f9a27218c8a4ed0 - FirebaseAuth: 4a2aed737c84114a9d9b33d11ae1b147d6b94889 - FirebaseAuthInterop: 858e6b754966e70740a4370dd1503dfffe6dbb49 - FirebaseCore: bb595f3114953664e3c1dc032f008a244147cfd3 - FirebaseCoreExtension: 7e1f7118ee970e001a8013719fb90950ee5e0018 - FirebaseCoreInternal: d7f5a043c2cd01a08103ab586587c1468047bca6 + Firebase: 9a58fdbc9d8655ed7b79a19cf9690bb007d3d46d + firebase_app_check: 9756167f67afd4844027314bea522e42599631b5 + firebase_auth: 2ebdb4dbe0da3a75585694dcba711f7a8a926601 + firebase_core: ee30637e6744af8e0c12a6a1e8a9718506ec2398 + FirebaseAppCheck: 11da425929a45c677d537adfff3520ccd57c1690 + FirebaseAppCheckInterop: ba3dc604a89815379e61ec2365101608d365cf7d + FirebaseAuth: 4c289b1a43f5955283244a55cf6bd616de344be5 + FirebaseAuthInterop: 95363fe96493cb4f106656666a0768b420cba090 + FirebaseCore: 0dbad74bda10b8fb9ca34ad8f375fb9dd3ebef7c + FirebaseCoreExtension: 6605938d51f765d8b18bfcafd2085276a252bee2 + FirebaseCoreInternal: fe5fa466aeb314787093a7dce9f0beeaad5a2a21 fl_downloader: dc99aa8dd303f862cccb830087f37acc9b0156ee Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf @@ -347,7 +333,7 @@ SPEC CHECKSUMS: Google-Mobile-Ads-SDK: 1dfb0c3cb46c7e2b00b0f4de74a1e06d9ea25d67 google_mobile_ads: 535223588a6791b7a3cc3513a1bc7b89d12f3e62 GoogleMobileAdsMediationFacebook: b11a92ae3bfdae19853b882252b7e62791c18162 - GoogleUserMessagingPlatform: f8d0cdad3ca835406755d0a69aa634f00e76d576 + GoogleUserMessagingPlatform: befe603da6501006420c206222acd449bba45a9c GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 GTMSessionFetcher: 02d6e866e90bc236f48a703a041dfe43e6221a29 image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a @@ -361,10 +347,9 @@ SPEC CHECKSUMS: RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba record_ios: f75fa1d57f840012775c0e93a38a7f3ceea1a374 screen_brightness_ios: 9953fd7da5bd480f1a93990daeec2eb42d4f3b52 - SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8 + SDWebImage: e9c98383c7572d713c1a0d7dd2783b10599b9838 share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 - speech_to_text: 3b313d98516d3d0406cea424782ec25470c59d19 sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 syncfusion_flutter_pdfviewer: 90dc48305d2e33d4aa20681d1e98ddeda891bc14 diff --git a/Frontend/ios/Runner.xcodeproj/project.pbxproj b/mih_ui/ios/Runner.xcodeproj/project.pbxproj similarity index 98% rename from Frontend/ios/Runner.xcodeproj/project.pbxproj rename to mih_ui/ios/Runner.xcodeproj/project.pbxproj index 17117b47..d8dfea8d 100644 --- a/Frontend/ios/Runner.xcodeproj/project.pbxproj +++ b/mih_ui/ios/Runner.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 71E3C54FEF20104FD7A5C7E5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 277EDD110F2042FAAC4E5333 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 75DB4569FB42001E83B22FC4 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 486D5A0EDC898EC440394271 /* GoogleService-Info.plist */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -52,6 +53,7 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 486D5A0EDC898EC440394271 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; 523DAF296A6B559B71F587AF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 52DEBFF4174C303DD5BF01CA /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; @@ -138,6 +140,7 @@ 331C8082294A63A400263BE5 /* RunnerTests */, 7241FE2A1582C644953298C9 /* Pods */, 7A61115B6A9E6DA8069C4DD9 /* Frameworks */, + 486D5A0EDC898EC440394271 /* GoogleService-Info.plist */, ); sourceTree = ""; }; @@ -266,6 +269,7 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + 75DB4569FB42001E83B22FC4 /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Frontend/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mih_ui/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Frontend/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to mih_ui/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Frontend/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Frontend/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to mih_ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Frontend/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from Frontend/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to mih_ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/Frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from Frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to mih_ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/Frontend/ios/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/ios/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Frontend/ios/Runner.xcworkspace/contents.xcworkspacedata rename to mih_ui/ios/Runner.xcworkspace/contents.xcworkspacedata diff --git a/Frontend/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Frontend/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to mih_ui/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Frontend/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from Frontend/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to mih_ui/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/Frontend/ios/Runner/AppDelegate.swift b/mih_ui/ios/Runner/AppDelegate.swift similarity index 100% rename from Frontend/ios/Runner/AppDelegate.swift rename to mih_ui/ios/Runner/AppDelegate.swift diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png diff --git a/Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 00000000..f0f27c8a Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 00000000..6ae27623 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..9018b9e0 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..64136536 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 00000000..7a235f79 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..2b6771f8 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..a1c7a255 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 00000000..9018b9e0 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..4e609d8a Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..3bd904e3 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 00000000..40c1ee29 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 00000000..2819fbca Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 00000000..822fc1c7 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 00000000..3a76fe77 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..3bd904e3 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..41091940 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 00000000..a629ce16 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 00000000..51b6e608 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 00000000..24325c69 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 00000000..8e600112 Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 00000000..efa19e5c Binary files /dev/null and b/mih_ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/Frontend/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png b/mih_ui/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png rename to mih_ui/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png diff --git a/Frontend/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@2x.png b/mih_ui/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@2x.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@2x.png rename to mih_ui/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@2x.png diff --git a/Frontend/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@3x.png b/mih_ui/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@3x.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@3x.png rename to mih_ui/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@3x.png diff --git a/Frontend/ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json rename to mih_ui/ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json diff --git a/Frontend/ios/Runner/Assets.xcassets/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/Contents.json similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/Contents.json rename to mih_ui/ios/Runner/Assets.xcassets/Contents.json diff --git a/Frontend/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json rename to mih_ui/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json diff --git a/Frontend/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png b/mih_ui/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png rename to mih_ui/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png diff --git a/Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json rename to mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json diff --git a/Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png rename to mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png diff --git a/Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png rename to mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png diff --git a/Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png rename to mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png diff --git a/Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md rename to mih_ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md diff --git a/Frontend/ios/Runner/Assets.xcassets/mih_calculator_sc.imageset/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/mih_calculator_sc.imageset/Contents.json similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/mih_calculator_sc.imageset/Contents.json rename to mih_ui/ios/Runner/Assets.xcassets/mih_calculator_sc.imageset/Contents.json diff --git a/Frontend/ios/Runner/Assets.xcassets/mih_calculator_sc.imageset/calculator.svg b/mih_ui/ios/Runner/Assets.xcassets/mih_calculator_sc.imageset/calculator.svg similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/mih_calculator_sc.imageset/calculator.svg rename to mih_ui/ios/Runner/Assets.xcassets/mih_calculator_sc.imageset/calculator.svg diff --git a/Frontend/ios/Runner/Assets.xcassets/mih_home_sc.imageset/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/mih_home_sc.imageset/Contents.json similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/mih_home_sc.imageset/Contents.json rename to mih_ui/ios/Runner/Assets.xcassets/mih_home_sc.imageset/Contents.json diff --git a/Frontend/ios/Runner/Assets.xcassets/mih_home_sc.imageset/mih_logo.svg b/mih_ui/ios/Runner/Assets.xcassets/mih_home_sc.imageset/mih_logo.svg similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/mih_home_sc.imageset/mih_logo.svg rename to mih_ui/ios/Runner/Assets.xcassets/mih_home_sc.imageset/mih_logo.svg diff --git a/Frontend/ios/Runner/Assets.xcassets/mzansi_ai_sc.imageset/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/mzansi_ai_sc.imageset/Contents.json similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/mzansi_ai_sc.imageset/Contents.json rename to mih_ui/ios/Runner/Assets.xcassets/mzansi_ai_sc.imageset/Contents.json diff --git a/Frontend/ios/Runner/Assets.xcassets/mzansi_ai_sc.imageset/mzansi_ai.svg b/mih_ui/ios/Runner/Assets.xcassets/mzansi_ai_sc.imageset/mzansi_ai.svg similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/mzansi_ai_sc.imageset/mzansi_ai.svg rename to mih_ui/ios/Runner/Assets.xcassets/mzansi_ai_sc.imageset/mzansi_ai.svg diff --git a/mih_ui/ios/Runner/Assets.xcassets/mzansi_directory_sc.imageset/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/mzansi_directory_sc.imageset/Contents.json new file mode 100644 index 00000000..41b7428c --- /dev/null +++ b/mih_ui/ios/Runner/Assets.xcassets/mzansi_directory_sc.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "mzansi_directory.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/mih_ui/ios/Runner/Assets.xcassets/mzansi_directory_sc.imageset/mzansi_directory.svg b/mih_ui/ios/Runner/Assets.xcassets/mzansi_directory_sc.imageset/mzansi_directory.svg new file mode 100644 index 00000000..5f22d7f9 --- /dev/null +++ b/mih_ui/ios/Runner/Assets.xcassets/mzansi_directory_sc.imageset/mzansi_directory.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/Frontend/ios/Runner/Assets.xcassets/mzansi_wallet_sc.imageset/Contents.json b/mih_ui/ios/Runner/Assets.xcassets/mzansi_wallet_sc.imageset/Contents.json similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/mzansi_wallet_sc.imageset/Contents.json rename to mih_ui/ios/Runner/Assets.xcassets/mzansi_wallet_sc.imageset/Contents.json diff --git a/Frontend/ios/Runner/Assets.xcassets/mzansi_wallet_sc.imageset/mzansi_wallet.svg b/mih_ui/ios/Runner/Assets.xcassets/mzansi_wallet_sc.imageset/mzansi_wallet.svg similarity index 100% rename from Frontend/ios/Runner/Assets.xcassets/mzansi_wallet_sc.imageset/mzansi_wallet.svg rename to mih_ui/ios/Runner/Assets.xcassets/mzansi_wallet_sc.imageset/mzansi_wallet.svg diff --git a/Frontend/ios/Runner/Base.lproj/LaunchScreen.storyboard b/mih_ui/ios/Runner/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from Frontend/ios/Runner/Base.lproj/LaunchScreen.storyboard rename to mih_ui/ios/Runner/Base.lproj/LaunchScreen.storyboard diff --git a/Frontend/ios/Runner/Base.lproj/Main.storyboard b/mih_ui/ios/Runner/Base.lproj/Main.storyboard similarity index 100% rename from Frontend/ios/Runner/Base.lproj/Main.storyboard rename to mih_ui/ios/Runner/Base.lproj/Main.storyboard diff --git a/mih_ui/ios/Runner/GoogleService-Info.plist b/mih_ui/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..afac0e1e --- /dev/null +++ b/mih_ui/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyDRqY5I5CXjEtWkUX1YUfKT8IUlln9PUuY + GCM_SENDER_ID + 33677883408 + PLIST_VERSION + 1 + BUNDLE_ID + za.co.mzansiinnovationhub.mih + PROJECT_ID + mzansi-innovation-hub + STORAGE_BUCKET + mzansi-innovation-hub.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:33677883408:ios:2048dac086428716223295 + + \ No newline at end of file diff --git a/Frontend/ios/Runner/Info.plist b/mih_ui/ios/Runner/Info.plist similarity index 100% rename from Frontend/ios/Runner/Info.plist rename to mih_ui/ios/Runner/Info.plist diff --git a/Frontend/ios/Runner/Runner-Bridging-Header.h b/mih_ui/ios/Runner/Runner-Bridging-Header.h similarity index 100% rename from Frontend/ios/Runner/Runner-Bridging-Header.h rename to mih_ui/ios/Runner/Runner-Bridging-Header.h diff --git a/Frontend/ios/Runner/Runner.entitlements b/mih_ui/ios/Runner/Runner.entitlements similarity index 100% rename from Frontend/ios/Runner/Runner.entitlements rename to mih_ui/ios/Runner/Runner.entitlements diff --git a/Frontend/ios/RunnerTests/RunnerTests.swift b/mih_ui/ios/RunnerTests/RunnerTests.swift similarity index 100% rename from Frontend/ios/RunnerTests/RunnerTests.swift rename to mih_ui/ios/RunnerTests/RunnerTests.swift diff --git a/mih_ui/lib/firebase_options.dart b/mih_ui/lib/firebase_options.dart new file mode 100644 index 00000000..b606fb0e --- /dev/null +++ b/mih_ui/lib/firebase_options.dart @@ -0,0 +1,89 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + return web; + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + return macos; + case TargetPlatform.windows: + return windows; + case TargetPlatform.linux: + return web; + // throw UnsupportedError( + // 'DefaultFirebaseOptions have not been configured for linux - ' + // 'you can reconfigure this by running the FlutterFire CLI again.', + // ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyDN-f4sJ4n_fyvrLR193_IIkTsccRVUQxw', + appId: '1:33677883408:web:47b8021df7fcacd2223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + authDomain: 'mzansi-innovation-hub.firebaseapp.com', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', + measurementId: 'G-Y3B5E3HCJY', + ); + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyBUkjWdu9YcgiF-e9TC5hoiEoCjPyjA5hU', + appId: '1:33677883408:android:ebd8565991c56257223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDRqY5I5CXjEtWkUX1YUfKT8IUlln9PUuY', + appId: '1:33677883408:ios:2048dac086428716223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', + iosBundleId: 'za.co.mzansiinnovationhub.mih', + ); + + static const FirebaseOptions macos = FirebaseOptions( + apiKey: 'AIzaSyDRqY5I5CXjEtWkUX1YUfKT8IUlln9PUuY', + appId: '1:33677883408:ios:e2db11a42fc3452e223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', + iosBundleId: 'com.example.patientManager', + ); + + static const FirebaseOptions windows = FirebaseOptions( + apiKey: 'AIzaSyDN-f4sJ4n_fyvrLR193_IIkTsccRVUQxw', + appId: '1:33677883408:web:e08becaef3261c59223295', + messagingSenderId: '33677883408', + projectId: 'mzansi-innovation-hub', + authDomain: 'mzansi-innovation-hub.firebaseapp.com', + storageBucket: 'mzansi-innovation-hub.firebasestorage.app', + measurementId: 'G-FKKENBX8TT', + ); +} diff --git a/Frontend/lib/main.dart b/mih_ui/lib/main.dart similarity index 93% rename from Frontend/lib/main.dart rename to mih_ui/lib/main.dart index d7c10422..edf94144 100644 --- a/Frontend/lib/main.dart +++ b/mih_ui/lib/main.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; @@ -50,6 +52,10 @@ class _MzansiInnovationHubState extends State { KenLogger.success("ShortCut: mihHome"); widget.router.goNamed("mihHome"); } + if (shortcutType == 'mzansiDirectory') { + KenLogger.success("ShortCut: mzansiDirectory"); + widget.router.goNamed("mzansiDirectory"); + } if (shortcutType == 'mzansiWallet') { KenLogger.success("ShortCut: mzansiWallet"); widget.router.goNamed("mzansiWallet"); @@ -65,6 +71,11 @@ class _MzansiInnovationHubState extends State { }); // Set the quick actions quickActions.setShortcutItems([ + const ShortcutItem( + type: 'mzansiDirectory', + localizedTitle: 'Mzansi Directory', + icon: 'mzansi_directory_sc', + ), const ShortcutItem( type: 'mzansiWallet', localizedTitle: 'Mzansi Wallet', @@ -92,7 +103,7 @@ class _MzansiInnovationHubState extends State { @override void initState() { super.initState(); - if (!kIsWeb) { + if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) { _initializeQuickActions(); } theme = MihTheme(); diff --git a/Frontend/lib/main_dev.dart b/mih_ui/lib/main_dev.dart similarity index 80% rename from Frontend/lib/main_dev.dart rename to mih_ui/lib/main_dev.dart index c0bd70f0..437c62b9 100644 --- a/Frontend/lib/main_dev.dart +++ b/mih_ui/lib/main_dev.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; @@ -19,7 +21,13 @@ void main() async { apiDomain: AppEnviroment.baseApiUrl, apiBasePath: "/auth", ); - if (!kIsWeb) { + // await Firebase.initializeApp( + // // options: DefaultFirebaseOptions.currentPlatform, + // options: (Platform.isLinux) + // ? DefaultFirebaseOptions.web // Forces Linux to use the Web config + // : DefaultFirebaseOptions.currentPlatform, + // ); + if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) { const List testDeviceIds = ['733d4c68-9b54-453a-9622-2df407310f40']; MobileAds.instance.updateRequestConfiguration( RequestConfiguration( diff --git a/Frontend/lib/main_prod.dart b/mih_ui/lib/main_prod.dart similarity index 83% rename from Frontend/lib/main_prod.dart rename to mih_ui/lib/main_prod.dart index 2facd8be..c8ce2935 100644 --- a/Frontend/lib/main_prod.dart +++ b/mih_ui/lib/main_prod.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; @@ -19,7 +21,10 @@ void main() async { apiDomain: AppEnviroment.baseApiUrl, apiBasePath: "/auth", ); - if (!kIsWeb) { + // await Firebase.initializeApp( + // options: DefaultFirebaseOptions.currentPlatform, + // ); + if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) { MobileAds.instance.initialize(); } else { usePathUrlStrategy(); @@ -29,5 +34,7 @@ void main() async { }); final GoRouter appRouter = MihGoRouter().mihRouter; FlutterNativeSplash.remove(); - runApp(MzansiInnovationHub(router: appRouter,)); + runApp(MzansiInnovationHub( + router: appRouter, + )); } diff --git a/Frontend/lib/mih_config/mih_colors.dart b/mih_ui/lib/mih_config/mih_colors.dart similarity index 77% rename from Frontend/lib/mih_config/mih_colors.dart rename to mih_ui/lib/mih_config/mih_colors.dart index 6c21eee8..8422230e 100644 --- a/Frontend/lib/mih_config/mih_colors.dart +++ b/mih_ui/lib/mih_config/mih_colors.dart @@ -4,41 +4,41 @@ class MihColors { bool women4Change = true; static Color getPrimaryColor(bool darkMode) { if (darkMode == true) { - // return const Color(0XFF3A4454); // Original - return const Color(0XFF6641b2); // Women4change + return const Color(0XFF3A4454); // Original + // return const Color(0XFF6641b2); // Women4change } else { - // return const Color(0XFFbedcfe); // Original - return const Color(0xFFE0D1FF); // Women4change + return const Color(0XFFbedcfe); // Original + // return const Color(0xFFE0D1FF); // Women4change } } static Color getSecondaryColor(bool darkMode) { if (darkMode == true) { - // return const Color(0XFFbedcfe); // Original - return const Color(0xFFE0D1FF); // Women4change + return const Color(0XFFbedcfe); // Original + // return const Color(0xFFE0D1FF); // Women4change } else { - // return const Color(0XFF3A4454); // Original - return const Color(0XFF6641b2); // Women4change + return const Color(0XFF3A4454); // Original + // return const Color(0XFF6641b2); // Women4change } } static Color getSecondaryInvertedColor(bool darkMode) { if (darkMode == true) { - // return const Color(0XFF412301); // Original - return const Color(0XFF1f2e00); // Women4change + return const Color(0XFF412301); // Original + // return const Color(0XFF1f2e00); // Women4change } else { - // return const Color(0XFFc5bbab); // Original - return const Color(0XFF99be4d); // Women4change + return const Color(0XFFc5bbab); // Original + // return const Color(0XFF99be4d); // Women4change } } static Color getHighlightColor(bool darkMode) { if (darkMode == true) { - // return const Color(0XFF9bc7fa); - return const Color(0xFFC8AFFB); // Women4change + return const Color(0XFF9bc7fa); + // return const Color(0xFFC8AFFB); // Women4change } else { - // return const Color(0XFF354866); - return const Color(0XFF6641b2); // Women4change + return const Color(0XFF354866); + // return const Color(0XFF6641b2); // Women4change } } diff --git a/Frontend/lib/mih_config/mih_env.dart b/mih_ui/lib/mih_config/mih_env.dart similarity index 100% rename from Frontend/lib/mih_config/mih_env.dart rename to mih_ui/lib/mih_config/mih_env.dart diff --git a/Frontend/lib/mih_config/mih_go_router.dart b/mih_ui/lib/mih_config/mih_go_router.dart similarity index 99% rename from Frontend/lib/mih_config/mih_go_router.dart rename to mih_ui/lib/mih_config/mih_go_router.dart index f23dbfcf..545d04d3 100644 --- a/Frontend/lib/mih_config/mih_go_router.dart +++ b/mih_ui/lib/mih_config/mih_go_router.dart @@ -198,6 +198,7 @@ class MihGoRouter { } return MzansiBusinessProfileView( businessId: businessId, + fromMzansiDirectory: businessId == null, ); }, ), diff --git a/mih_ui/lib/mih_config/mih_theme.dart b/mih_ui/lib/mih_config/mih_theme.dart new file mode 100644 index 00000000..dd7ea4c1 --- /dev/null +++ b/mih_ui/lib/mih_config/mih_theme.dart @@ -0,0 +1,145 @@ +import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import "package:universal_html/html.dart" as html; + +class MihTheme { + late String mode; + late String screenType; + late AssetImage loading; + late String loadingAssetText; + late TargetPlatform platform; + bool kIsWeb = const bool.fromEnvironment('dart.library.js_util'); + String latestVersion = "1.2.5"; + MihTheme() { + mode = "Dark"; + } + + ThemeData getData(bool bool) { + return ThemeData( + fontFamily: 'Segoe UI', + scaffoldBackgroundColor: MihColors.getPrimaryColor(mode == "Dark"), + colorScheme: ColorScheme( + brightness: getBritness(), + primary: MihColors.getSecondaryColor(mode == "Dark"), + onPrimary: MihColors.getPrimaryColor(mode == "Dark"), + secondary: MihColors.getPrimaryColor(mode == "Dark"), + onSecondary: MihColors.getSecondaryColor(mode == "Dark"), + error: MihColors.getRedColor(mode == "Dark"), + onError: MihColors.getPrimaryColor(mode == "Dark"), + surface: MihColors.getPrimaryColor(mode == "Dark"), + onSurface: MihColors.getSecondaryColor(mode == "Dark"), + ), + datePickerTheme: DatePickerThemeData( + backgroundColor: MihColors.getPrimaryColor(mode == "Dark"), + headerBackgroundColor: MihColors.getSecondaryColor(mode == "Dark"), + headerForegroundColor: MihColors.getPrimaryColor(mode == "Dark"), + ), + appBarTheme: AppBarTheme( + color: MihColors.getSecondaryColor(mode == "Dark"), + foregroundColor: MihColors.getPrimaryColor(mode == "Dark"), + titleTextStyle: TextStyle( + color: MihColors.getPrimaryColor(mode == "Dark"), + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + floatingActionButtonTheme: FloatingActionButtonThemeData( + backgroundColor: MihColors.getSecondaryColor(mode == "Dark"), + foregroundColor: MihColors.getPrimaryColor(mode == "Dark"), + extendedTextStyle: + TextStyle(color: MihColors.getPrimaryColor(mode == "Dark")), + ), + drawerTheme: DrawerThemeData( + backgroundColor: MihColors.getPrimaryColor(mode == "Dark"), + ), + textSelectionTheme: TextSelectionThemeData( + cursorColor: MihColors.getPrimaryColor(mode == "Dark"), + selectionColor: + MihColors.getPrimaryColor(mode == "Dark").withOpacity(0.25), + selectionHandleColor: MihColors.getPrimaryColor(mode == "Dark"), + ), + tooltipTheme: TooltipThemeData( + decoration: BoxDecoration( + color: MihColors.getSecondaryColor(mode == "Dark"), + borderRadius: BorderRadius.circular(6), + border: Border.all( + width: 1.0, + color: MihColors.getPrimaryColor(mode == "Dark"), + ), + boxShadow: [ + BoxShadow( + color: + MihColors.getPrimaryColor(mode == "Dark").withOpacity(0.18), + blurRadius: 6, + offset: const Offset(0, 2), + ), + ], + ), + textStyle: TextStyle( + color: MihColors.getPrimaryColor(mode == "Dark"), + fontSize: 13, + height: 1.2, + ), + waitDuration: const Duration(milliseconds: 500), + showDuration: const Duration(seconds: 3), + preferBelow: true, + verticalOffset: 24, + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + triggerMode: TooltipTriggerMode.longPress, + ), + ); + } + + String getPlatform() { + if (kIsWeb) { + return "Web"; + } else if (!kIsWeb) { + if (platform == TargetPlatform.android) { + return "Android"; + } else if (platform == TargetPlatform.iOS) { + return "iOS"; + } + } + return "Other"; + } + + bool isPwa() { + return html.window.matchMedia('(display-mode: standalone)').matches; + } + + void setMode(String m) { + mode; + } + + String getLatestVersion() { + return latestVersion; + } + + ThemeData getThemeData() { + return getData(mode == "Dark"); + } + + ThemeData darkMode() { + return getData(mode == "Dark"); + } + + ThemeData lightMode() { + return getData(mode == "Dark"); + } + + Brightness getBritness() { + if (mode == "Dark") { + return Brightness.dark; + } else { + return Brightness.light; + } + } + + void setScreenType(double width) { + if (width <= 800) { + screenType = "mobile"; + } else { + screenType = "desktop"; + } + } +} diff --git a/Frontend/lib/mih_objects/access_request.dart b/mih_ui/lib/mih_objects/access_request.dart similarity index 100% rename from Frontend/lib/mih_objects/access_request.dart rename to mih_ui/lib/mih_objects/access_request.dart diff --git a/Frontend/lib/mih_objects/app_user.dart b/mih_ui/lib/mih_objects/app_user.dart similarity index 100% rename from Frontend/lib/mih_objects/app_user.dart rename to mih_ui/lib/mih_objects/app_user.dart diff --git a/Frontend/lib/mih_objects/appointment.dart b/mih_ui/lib/mih_objects/appointment.dart similarity index 100% rename from Frontend/lib/mih_objects/appointment.dart rename to mih_ui/lib/mih_objects/appointment.dart diff --git a/Frontend/lib/mih_objects/arguments.dart b/mih_ui/lib/mih_objects/arguments.dart similarity index 100% rename from Frontend/lib/mih_objects/arguments.dart rename to mih_ui/lib/mih_objects/arguments.dart diff --git a/Frontend/lib/mih_objects/bookmarked_business.dart b/mih_ui/lib/mih_objects/bookmarked_business.dart similarity index 100% rename from Frontend/lib/mih_objects/bookmarked_business.dart rename to mih_ui/lib/mih_objects/bookmarked_business.dart diff --git a/Frontend/lib/mih_objects/business.dart b/mih_ui/lib/mih_objects/business.dart similarity index 100% rename from Frontend/lib/mih_objects/business.dart rename to mih_ui/lib/mih_objects/business.dart diff --git a/Frontend/lib/mih_objects/business_employee.dart b/mih_ui/lib/mih_objects/business_employee.dart similarity index 100% rename from Frontend/lib/mih_objects/business_employee.dart rename to mih_ui/lib/mih_objects/business_employee.dart diff --git a/Frontend/lib/mih_objects/business_review.dart b/mih_ui/lib/mih_objects/business_review.dart similarity index 100% rename from Frontend/lib/mih_objects/business_review.dart rename to mih_ui/lib/mih_objects/business_review.dart diff --git a/Frontend/lib/mih_objects/business_user.dart b/mih_ui/lib/mih_objects/business_user.dart similarity index 100% rename from Frontend/lib/mih_objects/business_user.dart rename to mih_ui/lib/mih_objects/business_user.dart diff --git a/Frontend/lib/mih_objects/claim_statement_file.dart b/mih_ui/lib/mih_objects/claim_statement_file.dart similarity index 100% rename from Frontend/lib/mih_objects/claim_statement_file.dart rename to mih_ui/lib/mih_objects/claim_statement_file.dart diff --git a/Frontend/lib/mih_objects/currency.dart b/mih_ui/lib/mih_objects/currency.dart similarity index 100% rename from Frontend/lib/mih_objects/currency.dart rename to mih_ui/lib/mih_objects/currency.dart diff --git a/Frontend/lib/mih_objects/email_and_patient_screen_args.dart b/mih_ui/lib/mih_objects/email_and_patient_screen_args.dart similarity index 100% rename from Frontend/lib/mih_objects/email_and_patient_screen_args.dart rename to mih_ui/lib/mih_objects/email_and_patient_screen_args.dart diff --git a/Frontend/lib/mih_objects/files.dart b/mih_ui/lib/mih_objects/files.dart similarity index 100% rename from Frontend/lib/mih_objects/files.dart rename to mih_ui/lib/mih_objects/files.dart diff --git a/Frontend/lib/mih_objects/icd10_code.dart.dart b/mih_ui/lib/mih_objects/icd10_code.dart.dart similarity index 100% rename from Frontend/lib/mih_objects/icd10_code.dart.dart rename to mih_ui/lib/mih_objects/icd10_code.dart.dart diff --git a/Frontend/lib/mih_objects/loyalty_card.dart b/mih_ui/lib/mih_objects/loyalty_card.dart similarity index 100% rename from Frontend/lib/mih_objects/loyalty_card.dart rename to mih_ui/lib/mih_objects/loyalty_card.dart diff --git a/Frontend/lib/mih_objects/medicine.dart b/mih_ui/lib/mih_objects/medicine.dart similarity index 100% rename from Frontend/lib/mih_objects/medicine.dart rename to mih_ui/lib/mih_objects/medicine.dart diff --git a/Frontend/lib/mih_objects/minesweeper_player_score.dart b/mih_ui/lib/mih_objects/minesweeper_player_score.dart similarity index 100% rename from Frontend/lib/mih_objects/minesweeper_player_score.dart rename to mih_ui/lib/mih_objects/minesweeper_player_score.dart diff --git a/Frontend/lib/mih_objects/notes.dart b/mih_ui/lib/mih_objects/notes.dart similarity index 100% rename from Frontend/lib/mih_objects/notes.dart rename to mih_ui/lib/mih_objects/notes.dart diff --git a/Frontend/lib/mih_objects/notification.dart b/mih_ui/lib/mih_objects/notification.dart similarity index 100% rename from Frontend/lib/mih_objects/notification.dart rename to mih_ui/lib/mih_objects/notification.dart diff --git a/Frontend/lib/mih_objects/patient_access.dart b/mih_ui/lib/mih_objects/patient_access.dart similarity index 100% rename from Frontend/lib/mih_objects/patient_access.dart rename to mih_ui/lib/mih_objects/patient_access.dart diff --git a/Frontend/lib/mih_objects/patient_queue.dart b/mih_ui/lib/mih_objects/patient_queue.dart similarity index 100% rename from Frontend/lib/mih_objects/patient_queue.dart rename to mih_ui/lib/mih_objects/patient_queue.dart diff --git a/Frontend/lib/mih_objects/patients.dart b/mih_ui/lib/mih_objects/patients.dart similarity index 100% rename from Frontend/lib/mih_objects/patients.dart rename to mih_ui/lib/mih_objects/patients.dart diff --git a/Frontend/lib/mih_objects/perscription.dart b/mih_ui/lib/mih_objects/perscription.dart similarity index 100% rename from Frontend/lib/mih_objects/perscription.dart rename to mih_ui/lib/mih_objects/perscription.dart diff --git a/mih_ui/lib/mih_objects/profile_link.dart b/mih_ui/lib/mih_objects/profile_link.dart new file mode 100644 index 00000000..103a1e72 --- /dev/null +++ b/mih_ui/lib/mih_objects/profile_link.dart @@ -0,0 +1,35 @@ +class ProfileLink { + final int idprofile_links; + final String app_id; + final String business_id; + final String destination; + final String web_link; + + const ProfileLink({ + required this.idprofile_links, + required this.app_id, + required this.business_id, + required this.destination, + required this.web_link, + }); + + factory ProfileLink.fromJson(Map json) { + return ProfileLink( + idprofile_links: json['idprofile_links'], + app_id: json['app_id'], + business_id: json['business_id'], + destination: json['destination'], + web_link: json['web_link'], + ); + } + + Map toJson() { + return { + 'idprofile_links': idprofile_links, + 'app_id': app_id, + 'business_id': business_id, + 'destination': destination, + 'web_link': web_link, + }; + } +} diff --git a/Frontend/lib/mih_objects/session_st.dart b/mih_ui/lib/mih_objects/session_st.dart similarity index 100% rename from Frontend/lib/mih_objects/session_st.dart rename to mih_ui/lib/mih_objects/session_st.dart diff --git a/Frontend/lib/mih_objects/user_consent.dart b/mih_ui/lib/mih_objects/user_consent.dart similarity index 100% rename from Frontend/lib/mih_objects/user_consent.dart rename to mih_ui/lib/mih_objects/user_consent.dart diff --git a/Frontend/lib/mih_package_components/Example/package_test.dart b/mih_ui/lib/mih_package_components/Example/package_test.dart similarity index 90% rename from Frontend/lib/mih_package_components/Example/package_test.dart rename to mih_ui/lib/mih_package_components/Example/package_test.dart index a85355ec..f69cb639 100644 --- a/Frontend/lib/mih_package_components/Example/package_test.dart +++ b/mih_ui/lib/mih_package_components/Example/package_test.dart @@ -1,4 +1,5 @@ import 'package:go_router/go_router.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/Example/package_tools/package_tool_three.dart'; import 'package:mzansi_innovation_hub/mih_package_components/Example/package_tools/package_tool_zero.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; @@ -31,9 +32,11 @@ class _PackageTestState extends State { }); MzansiProfileProvider mzansiProfileProvider = context.read(); - await MihDataHelperServices().loadUserDataWithBusinessesData( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); + } setState(() { _isLoadingInitialData = false; }); @@ -60,21 +63,26 @@ class _PackageTestState extends State { MihPackageTools getTools() { Map temp = Map(); - temp[const Icon(Icons.warning)] = () { + temp[const Icon(Icons.link)] = () { setState(() { _selcetedIndex = 0; }); }; - temp[const Icon(Icons.inbox)] = () { + temp[const Icon(Icons.warning)] = () { setState(() { _selcetedIndex = 1; }); }; - temp[const Icon(Icons.outbond)] = () { + temp[const Icon(Icons.inbox)] = () { setState(() { _selcetedIndex = 2; }); }; + temp[const Icon(Icons.outbond)] = () { + setState(() { + _selcetedIndex = 3; + }); + }; return MihPackageTools( tools: temp, selcetedIndex: _selcetedIndex, @@ -89,6 +97,7 @@ class _PackageTestState extends State { MzansiProfileProvider profileProvider = context.read(); List toolBodies = [ + const PackageToolThree(), const PackageToolZero(), PackageToolOne( user: profileProvider.user!, diff --git a/Frontend/lib/mih_package_components/Example/package_tiles/test_package_tile.dart b/mih_ui/lib/mih_package_components/Example/package_tiles/test_package_tile.dart similarity index 68% rename from Frontend/lib/mih_package_components/Example/package_tiles/test_package_tile.dart rename to mih_ui/lib/mih_package_components/Example/package_tiles/test_package_tile.dart index 6cf7c228..a3c2ca54 100644 --- a/Frontend/lib/mih_package_components/Example/package_tiles/test_package_tile.dart +++ b/mih_ui/lib/mih_package_components/Example/package_tiles/test_package_tile.dart @@ -1,20 +1,13 @@ 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/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class TestPackageTile extends StatefulWidget { - final AppUser signedInUser; - final Business? business; final double packageSize; const TestPackageTile({ super.key, - required this.signedInUser, - required this.business, required this.packageSize, }); @@ -29,10 +22,6 @@ class _TestPackageTileState extends State { onTap: () { context.goNamed( 'testPackage', - extra: TestArguments( - widget.signedInUser, - widget.business, - ), ); // Navigator.of(context).pushNamed( // '/package-dev', @@ -49,9 +38,7 @@ class _TestPackageTileState extends State { MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_package_components/Example/package_tools/package_tool_one.dart b/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_one.dart similarity index 96% rename from Frontend/lib/mih_package_components/Example/package_tools/package_tool_one.dart rename to mih_ui/lib/mih_package_components/Example/package_tools/package_tool_one.dart index 0bb85e04..3406a341 100644 --- a/Frontend/lib/mih_package_components/Example/package_tools/package_tool_one.dart +++ b/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_one.dart @@ -8,12 +8,9 @@ import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_banner_ad.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_business_profile_preview.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_personal_profile_preview.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_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart'; -// import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_business_info_card.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; @@ -157,11 +154,7 @@ class _PackageToolOneState extends State { super.initState(); setState(() { imagePreview = null; - // const NetworkImage( - // "https://lh3.googleusercontent.com/nW4ZZ89Q1ATz7Ht3nsAVWXL_cwNi4gNusqQZiL60UuuI3FG-VM7bTYDoJ-sUr2kDTdorfQYjxo5PjDM-0MO5rA=s512"); }); - - // myCoordinates = MIHLocationAPI().getGPSPosition(context); } Widget getBody(double width) { @@ -343,9 +336,9 @@ class _PackageToolOneState extends State { ], ), const SizedBox(height: 10), - MihPersonalProfilePreview( - user: widget.user, - ), + // MihPersonalProfilePreview( + // user: widget.user, + // ), const SizedBox(height: 10), Row( mainAxisAlignment: MainAxisAlignment.center, @@ -393,16 +386,16 @@ class _PackageToolOneState extends State { child: Center(child: Text("Location unavailable")), ); } else { - final myLocation = asyncSnapshot.data - .toString() - .replaceAll("Latitude: ", "") - .replaceAll("Longitude: ", ""); - print("My Location is this: $myLocation"); - return widget.business != null - ? MihBusinessProfilePreview( - business: widget.business!, - ) - : Text("NoBusiness Data"); + // final myLocation = asyncSnapshot.data + // .toString() + // .replaceAll("Latitude: ", "") + // .replaceAll("Longitude: ", ""); + // print("My Location is this: $myLocation"); + // return widget.business != null + // ? MihBusinessProfilePreview( + // business: widget.business!, + // ) + return Text("NoBusiness Data"); } }), // const SizedBox(height: 10), diff --git a/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_three.dart b/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_three.dart new file mode 100644 index 00000000..1682426a --- /dev/null +++ b/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_three.dart @@ -0,0 +1,127 @@ +import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_objects/profile_link.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_profile_links.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; + +class PackageToolThree extends StatefulWidget { + const PackageToolThree({super.key}); + + @override + State createState() => _PackageToolThreeState(); +} + +class _PackageToolThreeState extends State { + @override + Widget build(BuildContext context) { + return MihPackageToolBody( + borderOn: false, + bodyItem: getBody(), + ); + } + + Widget getBody() { + List links = [ + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Youtube", + web_link: "https://www.youtube.com/@MzansiInnovationHub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Threads", + web_link: "https://www.threads.com/@mzansi.innovation.hub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "TikTok", + web_link: "https://www.tiktok.com/@mzansiinnovationhub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "WhatsApp", + web_link: "https://whatsapp.com/channel/0029Vax3INCIyPtMn8KgeM2F", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Twitch", + web_link: "https://www.twitch.tv/mzansiinnovationhub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Instagram", + web_link: "https://www.instagram.com/mzansi.innovation.hub/", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "X", + web_link: "https://x.com/mzansi_inno_hub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "LinkedIn", + web_link: "https://www.linkedin.com/in/yasien-meth-172352108/", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Facebook", + web_link: "https://www.facebook.com/profile.php?id=61565345762136", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Reddit", + web_link: "https://www.reddit.com/r/Mzani_Innovation_Hub/", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Discord", + web_link: "https://discord.gg/ZtTZYd5d", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "My App", + web_link: "https://app.mzansi-innovation-hub.co.za/about", + ), + ]; + + return Stack( + children: [ + MihSingleChildScroll( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + MihProfileLinks( + links: links, + // links: [], + ), + ], + ), + ), + ], + ); + } +} diff --git a/Frontend/lib/mih_package_components/Example/package_tools/package_tool_two.dart b/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_two.dart similarity index 100% rename from Frontend/lib/mih_package_components/Example/package_tools/package_tool_two.dart rename to mih_ui/lib/mih_package_components/Example/package_tools/package_tool_two.dart diff --git a/Frontend/lib/mih_package_components/Example/package_tools/package_tool_zero.dart b/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_zero.dart similarity index 100% rename from Frontend/lib/mih_package_components/Example/package_tools/package_tool_zero.dart rename to mih_ui/lib/mih_package_components/Example/package_tools/package_tool_zero.dart diff --git a/Frontend/lib/mih_package_components/assets/fonts/Mih_Icons.ttf b/mih_ui/lib/mih_package_components/assets/fonts/Mih_Icons.ttf similarity index 100% rename from Frontend/lib/mih_package_components/assets/fonts/Mih_Icons.ttf rename to mih_ui/lib/mih_package_components/assets/fonts/Mih_Icons.ttf diff --git a/Frontend/lib/mih_package_components/assets/fonts/icomoon_link.txt b/mih_ui/lib/mih_package_components/assets/fonts/icomoon_link.txt similarity index 100% rename from Frontend/lib/mih_package_components/assets/fonts/icomoon_link.txt rename to mih_ui/lib/mih_package_components/assets/fonts/icomoon_link.txt diff --git a/Frontend/lib/mih_package_components/assets/fonts/style.css b/mih_ui/lib/mih_package_components/assets/fonts/style.css similarity index 100% rename from Frontend/lib/mih_package_components/assets/fonts/style.css rename to mih_ui/lib/mih_package_components/assets/fonts/style.css diff --git a/Frontend/lib/mih_package_components/assets/images/app_icon/circle_logo.png b/mih_ui/lib/mih_package_components/assets/images/app_icon/circle_logo.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/app_icon/circle_logo.png rename to mih_ui/lib/mih_package_components/assets/images/app_icon/circle_logo.png diff --git a/Frontend/lib/mih_package_components/assets/images/app_icon/mih_app_icon.png b/mih_ui/lib/mih_package_components/assets/images/app_icon/mih_app_icon.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/app_icon/mih_app_icon.png rename to mih_ui/lib/mih_package_components/assets/images/app_icon/mih_app_icon.png diff --git a/Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_app.png b/mih_ui/lib/mih_package_components/assets/images/app_icon/mih_logo_app.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_app.png rename to mih_ui/lib/mih_package_components/assets/images/app_icon/mih_logo_app.png diff --git a/Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png b/mih_ui/lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png rename to mih_ui/lib/mih_package_components/assets/images/app_icon/mih_logo_app_w4c.png diff --git a/Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_web.png b/mih_ui/lib/mih_package_components/assets/images/app_icon/mih_logo_web.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_web.png rename to mih_ui/lib/mih_package_components/assets/images/app_icon/mih_logo_web.png diff --git a/Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png b/mih_ui/lib/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png rename to mih_ui/lib/mih_package_components/assets/images/app_icon/mih_logo_web_w4c.png diff --git a/Frontend/lib/mih_package_components/assets/images/founder.jpg b/mih_ui/lib/mih_package_components/assets/images/founder.jpg similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/founder.jpg rename to mih_ui/lib/mih_package_components/assets/images/founder.jpg diff --git a/Frontend/lib/mih_package_components/assets/images/i-dont-know-dark.png b/mih_ui/lib/mih_package_components/assets/images/i-dont-know-dark.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/i-dont-know-dark.png rename to mih_ui/lib/mih_package_components/assets/images/i-dont-know-dark.png diff --git a/Frontend/lib/mih_package_components/assets/images/i-dont-know-light.png b/mih_ui/lib/mih_package_components/assets/images/i-dont-know-light.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/i-dont-know-light.png rename to mih_ui/lib/mih_package_components/assets/images/i-dont-know-light.png diff --git a/Frontend/lib/mih_package_components/assets/images/logo_light.png b/mih_ui/lib/mih_package_components/assets/images/logo_light.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/logo_light.png rename to mih_ui/lib/mih_package_components/assets/images/logo_light.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png b/mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png rename to mih_ui/lib/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png diff --git a/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash.png b/mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash.png rename to mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash.png diff --git a/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif b/mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif rename to mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_branding_splash_temp.gif diff --git a/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash.png b/mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_image_splash.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash.png rename to mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_image_splash.png diff --git a/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png b/mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png rename to mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_android.png diff --git a/Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif b/mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif similarity index 100% rename from Frontend/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif rename to mih_ui/lib/mih_package_components/assets/images/splash_screen/mih_image_splash_temp.gif diff --git a/Frontend/lib/mih_package_components/mih_banner_ad.dart b/mih_ui/lib/mih_package_components/mih_banner_ad.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_banner_ad.dart rename to mih_ui/lib/mih_package_components/mih_banner_ad.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart b/mih_ui/lib/mih_package_components/mih_business_info_card.dart similarity index 98% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart rename to mih_ui/lib/mih_package_components/mih_business_info_card.dart index fa5b1440..b17b53a6 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart +++ b/mih_ui/lib/mih_package_components/mih_business_info_card.dart @@ -15,6 +15,7 @@ import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profi 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'; @@ -573,8 +574,16 @@ class _MihBusinessCardState extends State { businessSearchResults = await MihBusinessDetailsServices() .searchBusinesses(directoryProvider.searchTerm, directoryProvider.businessTypeFilter, context); + Map> busImagesUrl = {}; + Future businessLogoUrl; + for (var bus in businessSearchResults) { + businessLogoUrl = MihFileApi.getMinioFileUrl(bus.logo_path); + busImagesUrl[bus.business_id] = businessLogoUrl; + } directoryProvider.setSearchedBusinesses( - searchedBusinesses: businessSearchResults); + searchedBusinesses: businessSearchResults, + businessesImagesUrl: busImagesUrl, + ); setState(() { _businessReviewFuture = getUserReview(); }); diff --git a/Frontend/lib/mih_package_components/mih_business_profile_preview.dart b/mih_ui/lib/mih_package_components/mih_business_profile_preview.dart similarity index 74% rename from Frontend/lib/mih_package_components/mih_business_profile_preview.dart rename to mih_ui/lib/mih_package_components/mih_business_profile_preview.dart index 45864d3d..81cdcf6b 100644 --- a/Frontend/lib/mih_package_components/mih_business_profile_preview.dart +++ b/mih_ui/lib/mih_package_components/mih_business_profile_preview.dart @@ -1,4 +1,3 @@ -import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_objects/business.dart'; @@ -6,15 +5,18 @@ import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.d 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_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart'; import 'package:provider/provider.dart'; class MihBusinessProfilePreview extends StatefulWidget { final Business business; + final ImageProvider? imageFile; + final bool loading; const MihBusinessProfilePreview({ super.key, required this.business, + required this.imageFile, + required this.loading, }); @override @@ -23,9 +25,6 @@ class MihBusinessProfilePreview extends StatefulWidget { } class _MihBusinessProfilePreviewState extends State { - late Future futureImageUrl; - PlatformFile? file; - String calculateDistance(MzansiDirectoryProvider directoryProvider) { try { double distanceInKm = MIHLocationAPI().getDistanceInMeaters( @@ -51,18 +50,27 @@ class _MihBusinessProfilePreviewState extends State { Widget? child) { return Row( children: [ - FutureBuilder( - future: MihFileApi.getMinioFileUrl(widget.business.logo_path), - builder: (context, asyncSnapshot) { - if (asyncSnapshot.connectionState == ConnectionState.done && - asyncSnapshot.hasData) { - if (asyncSnapshot.requireData != "") { - return MihCircleAvatar( - imageFile: NetworkImage(asyncSnapshot.requireData), + widget.loading + ? Icon( + MihIcons.mihRing, + size: profilePictureWidth, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ) + : widget.imageFile == null + ? Icon( + MihIcons.iDontKnow, + size: profilePictureWidth, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ) + : MihCircleAvatar( + imageFile: widget.imageFile, width: profilePictureWidth, editable: false, fileNameController: TextEditingController(), - userSelectedfile: file, + userSelectedfile: null, frameColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), @@ -70,26 +78,7 @@ class _MihBusinessProfilePreviewState extends State { MzansiInnovationHub.of(context)!.theme.mode == "Dark"), onChange: () {}, - ); - } else { - return Icon( - MihIcons.iDontKnow, - size: profilePictureWidth, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ); - } - } else { - return Icon( - MihIcons.mihRing, - size: profilePictureWidth, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ); - } - }), + ), const SizedBox(width: 15), Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/Frontend/lib/mih_package_components/mih_button.dart b/mih_ui/lib/mih_package_components/mih_button.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_button.dart rename to mih_ui/lib/mih_package_components/mih_button.dart diff --git a/Frontend/lib/mih_package_components/mih_calendar.dart b/mih_ui/lib/mih_package_components/mih_calendar.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_calendar.dart rename to mih_ui/lib/mih_package_components/mih_calendar.dart diff --git a/Frontend/lib/mih_package_components/mih_circle_avatar.dart b/mih_ui/lib/mih_package_components/mih_circle_avatar.dart similarity index 99% rename from Frontend/lib/mih_package_components/mih_circle_avatar.dart rename to mih_ui/lib/mih_package_components/mih_circle_avatar.dart index 68cb393f..c44c72a3 100644 --- a/Frontend/lib/mih_package_components/mih_circle_avatar.dart +++ b/mih_ui/lib/mih_package_components/mih_circle_avatar.dart @@ -161,7 +161,7 @@ class _MihCircleAvatarState extends State { } }, icon: Icon( - Icons.edit, + Icons.camera_alt, ), ), ), diff --git a/Frontend/lib/mih_package_components/mih_date_field.dart b/mih_ui/lib/mih_package_components/mih_date_field.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_date_field.dart rename to mih_ui/lib/mih_package_components/mih_date_field.dart diff --git a/mih_ui/lib/mih_package_components/mih_dropdwn_field.dart b/mih_ui/lib/mih_package_components/mih_dropdwn_field.dart new file mode 100644 index 00000000..dd8d46ee --- /dev/null +++ b/mih_ui/lib/mih_package_components/mih_dropdwn_field.dart @@ -0,0 +1,283 @@ +import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; + +class MihDropdownField extends StatefulWidget { + final TextEditingController controller; + final String hintText; + final bool requiredText; + final List dropdownOptions; + final bool editable; + final bool enableSearch; + final FormFieldValidator? validator; + final Function(String?)? onSelected; + + const MihDropdownField({ + super.key, + required this.controller, + required this.hintText, + required this.dropdownOptions, + required this.requiredText, + required this.editable, + required this.enableSearch, + this.validator, + this.onSelected, + }); + + @override + State createState() => _MihDropdownFieldState(); +} + +class _MihDropdownFieldState extends State { + late List> menu; + + List> buildMenuOptions(List options) { + List> menuList = []; + for (final i in options) { + menuList.add(DropdownMenuEntry( + value: i, + label: i, + style: ButtonStyle( + foregroundColor: WidgetStatePropertyAll(MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark")), + ), + )); + } + return menuList; + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + menu = buildMenuOptions(widget.dropdownOptions); + } + + @override + void initState() { + super.initState(); + menu = widget.dropdownOptions + .map((e) => DropdownMenuEntry(value: e, label: e)) + .toList(); + } + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + widget.hintText, + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + if (!widget.requiredText) + Text( + "(Optional)", + style: TextStyle( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 15, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + const SizedBox(height: 4), + FormField( + validator: widget.validator, + autovalidateMode: AutovalidateMode.onUserInteraction, + initialValue: widget.controller.text, + builder: (field) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Theme( + data: Theme.of(context).copyWith( + textSelectionTheme: TextSelectionThemeData( + cursorColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + selectionColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark") + .withValues(alpha: 0.3), + selectionHandleColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + child: DropdownMenu( + controller: widget.controller, + dropdownMenuEntries: menu, + enableSearch: widget.enableSearch, + enableFilter: widget.enableSearch, + enabled: widget.editable, + textInputAction: widget.enableSearch + ? TextInputAction.search + : TextInputAction.none, + requestFocusOnTap: widget.enableSearch, + menuHeight: 400, + expandedInsets: EdgeInsets.zero, + textStyle: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontWeight: FontWeight.w500, + ), + trailingIcon: Icon( + Icons.arrow_drop_down, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + selectedTrailingIcon: Icon( + Icons.arrow_drop_up, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + // leadingIcon: + // IconButton( + // onPressed: () { + // widget.controller.clear(); + // field.didChange(''); + // }, + // icon: Icon( + // Icons.delete_outline_rounded, + // color: MihColors.getPrimaryColor( + // MzansiInnovationHub.of(context)!.theme.mode == + // "Dark"), + // ), + // ), + onSelected: (String? selectedValue) { + field.didChange(selectedValue); + widget.onSelected?.call(selectedValue); + }, + menuStyle: MenuStyle( + backgroundColor: WidgetStatePropertyAll( + MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark")), + side: WidgetStatePropertyAll( + BorderSide( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + width: 1.0), + ), + shape: WidgetStatePropertyAll( + RoundedRectangleBorder( + borderRadius: BorderRadius.circular( + 10), // Increase for more roundness + ), + ), + ), + inputDecorationTheme: InputDecorationTheme( + errorStyle: const TextStyle(height: 0, fontSize: 0), + contentPadding: const EdgeInsets.symmetric( + horizontal: 10.0, vertical: 8.0), + filled: true, + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(8.0), + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(8.0), + borderSide: BorderSide( + color: field.hasError + ? MihColors.getRedColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark") + : MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + width: 3.0, + ), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(8.0), + borderSide: BorderSide( + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + width: 3.0, + ), + ), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(8.0), + borderSide: BorderSide( + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + width: 3.0, + ), + ), + ), + ), + ), + ), + const SizedBox(width: 8), + GestureDetector( + onTap: () { + widget.controller.clear(); + field.didChange(''); + }, + child: Icon( + size: 35, + Icons.delete_rounded, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ], + ), + if (field.hasError) + Padding( + padding: const EdgeInsets.only(left: 8.0, top: 4.0), + child: Text( + field.errorText ?? '', + style: TextStyle( + fontSize: 12, + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ); + }, + ), + ], + ); + } +} diff --git a/Frontend/lib/mih_package_components/mih_floating_menu.dart b/mih_ui/lib/mih_package_components/mih_floating_menu.dart similarity index 98% rename from Frontend/lib/mih_package_components/mih_floating_menu.dart rename to mih_ui/lib/mih_package_components/mih_floating_menu.dart index 936f3e57..5547d31e 100644 --- a/Frontend/lib/mih_package_components/mih_floating_menu.dart +++ b/mih_ui/lib/mih_package_components/mih_floating_menu.dart @@ -26,6 +26,7 @@ class _MihFloatingMenuState extends State { @override Widget build(BuildContext context) { return SpeedDial( + key: GlobalKey(), icon: widget.icon, buttonSize: Size(widget.iconSize ?? 56.0, widget.iconSize ?? 56.0), animatedIcon: widget.animatedIcon, diff --git a/Frontend/lib/mih_package_components/mih_form.dart b/mih_ui/lib/mih_package_components/mih_form.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_form.dart rename to mih_ui/lib/mih_package_components/mih_form.dart diff --git a/Frontend/lib/mih_package_components/mih_icons.dart b/mih_ui/lib/mih_package_components/mih_icons.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_icons.dart rename to mih_ui/lib/mih_package_components/mih_icons.dart diff --git a/Frontend/lib/mih_package_components/mih_image_display.dart b/mih_ui/lib/mih_package_components/mih_image_display.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_image_display.dart rename to mih_ui/lib/mih_package_components/mih_image_display.dart diff --git a/Frontend/lib/mih_package_components/mih_loading_circle.dart b/mih_ui/lib/mih_package_components/mih_loading_circle.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_loading_circle.dart rename to mih_ui/lib/mih_package_components/mih_loading_circle.dart diff --git a/Frontend/lib/mih_package_components/mih_notification_drawer.dart b/mih_ui/lib/mih_package_components/mih_notification_drawer.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_notification_drawer.dart rename to mih_ui/lib/mih_package_components/mih_notification_drawer.dart diff --git a/Frontend/lib/mih_package_components/mih_notification_message.dart b/mih_ui/lib/mih_package_components/mih_notification_message.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_notification_message.dart rename to mih_ui/lib/mih_package_components/mih_notification_message.dart diff --git a/Frontend/lib/mih_package_components/mih_numeric_stepper.dart b/mih_ui/lib/mih_package_components/mih_numeric_stepper.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_numeric_stepper.dart rename to mih_ui/lib/mih_package_components/mih_numeric_stepper.dart diff --git a/Frontend/lib/mih_package_components/mih_package.dart b/mih_ui/lib/mih_package_components/mih_package.dart similarity index 93% rename from Frontend/lib/mih_package_components/mih_package.dart rename to mih_ui/lib/mih_package_components/mih_package.dart index 41d710ed..e402d564 100644 --- a/Frontend/lib/mih_package_components/mih_package.dart +++ b/mih_ui/lib/mih_package_components/mih_package.dart @@ -7,16 +7,15 @@ import 'package:mzansi_innovation_hub/mih_packages/mih_home/components/mih_app_d import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:flutter/material.dart'; -// ignore: must_be_immutable class MihPackage extends StatefulWidget { final Widget appActionButton; final MihPackageTools appTools; final List appBody; final List appToolTitles; final MIHAppDrawer? actionDrawer; - int selectedbodyIndex; + final int selectedbodyIndex; final Function(int) onIndexChange; - MihPackage({ + const MihPackage({ super.key, required this.appActionButton, required this.appTools, @@ -33,6 +32,7 @@ class MihPackage extends StatefulWidget { class _MihPackageState extends State with SingleTickerProviderStateMixin { + late int _currentIndex; late PageController _pageController; late AnimationController _animationController; DateTime? lastPressedAt; @@ -42,7 +42,7 @@ class _MihPackageState extends State } Future _peakAnimation() async { - int currentPage = widget.selectedbodyIndex; + int currentPage = _currentIndex; double peakOffset = _pageController.position.viewportDimension * 0.075; double currentOffset = _pageController.page! * _pageController.position.viewportDimension; @@ -66,15 +66,17 @@ class _MihPackageState extends State @override void dispose() { - super.dispose(); _pageController.dispose(); _animationController.dispose(); + super.dispose(); } @override void didUpdateWidget(covariant MihPackage oldWidget) { super.didUpdateWidget(oldWidget); - if (oldWidget.selectedbodyIndex != widget.selectedbodyIndex) { + if (oldWidget.selectedbodyIndex != widget.selectedbodyIndex && + _currentIndex != widget.selectedbodyIndex) { + _currentIndex = widget.selectedbodyIndex; _pageController.animateToPage( widget.selectedbodyIndex, duration: const Duration(milliseconds: 300), @@ -86,6 +88,7 @@ class _MihPackageState extends State @override void initState() { super.initState(); + _currentIndex = widget.selectedbodyIndex; _pageController = PageController(initialPage: widget.selectedbodyIndex); _animationController = AnimationController( vsync: this, @@ -173,7 +176,7 @@ class _MihPackageState extends State // color: Colors.black, child: FittedBox( child: Text( - widget.appToolTitles[widget.selectedbodyIndex], + widget.appToolTitles[_currentIndex], style: const TextStyle( fontSize: 23, fontWeight: FontWeight.w600, @@ -197,9 +200,9 @@ class _MihPackageState extends State }, onPageChanged: (index) { setState(() { - widget.selectedbodyIndex = index; - widget.onIndexChange(widget.selectedbodyIndex); + _currentIndex = index; }); + widget.onIndexChange(index); }, ), ), diff --git a/Frontend/lib/mih_package_components/mih_package_action.dart b/mih_ui/lib/mih_package_components/mih_package_action.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_package_action.dart rename to mih_ui/lib/mih_package_components/mih_package_action.dart diff --git a/Frontend/lib/mih_package_components/mih_package_tile.dart b/mih_ui/lib/mih_package_components/mih_package_tile.dart similarity index 85% rename from Frontend/lib/mih_package_components/mih_package_tile.dart rename to mih_ui/lib/mih_package_components/mih_package_tile.dart index dadf0cab..5496841d 100644 --- a/Frontend/lib/mih_package_components/mih_package_tile.dart +++ b/mih_ui/lib/mih_package_components/mih_package_tile.dart @@ -15,8 +15,7 @@ class MihPackageTile extends StatefulWidget { final Widget appIcon; final void Function() onTap; final double iconSize; - final Color primaryColor; - final Color secondaryColor; + final Color textColor; final bool? authenticateUser; const MihPackageTile({ super.key, @@ -25,8 +24,7 @@ class MihPackageTile extends StatefulWidget { this.ytVideoID, required this.appIcon, required this.iconSize, - required this.primaryColor, - required this.secondaryColor, + required this.textColor, this.authenticateUser, }); @@ -169,49 +167,42 @@ class _MihPackageTileState extends State { @override Widget build(BuildContext context) { return Container( - // alignment: Alignment.topCenter, + alignment: Alignment.topCenter, // color: Colors.black, - // width: widget.iconSize, - // height: widget.iconSize + widget.iconSize / 3, + width: widget.iconSize, + height: widget.iconSize, child: GestureDetector( onTap: () async { authenticateUser(); }, onLongPress: null, // Do this later child: Column( + mainAxisAlignment: MainAxisAlignment.center, children: [ - Flexible( - flex: 3, - child: LayoutBuilder( - builder: (context, constraints) { - double iconHeight = constraints.maxWidth; - return Container( - width: iconHeight, - height: iconHeight, - child: - FittedBox(fit: BoxFit.fitHeight, child: widget.appIcon), - ); - }, + Expanded( + child: FittedBox( + fit: BoxFit.contain, + alignment: Alignment.center, + child: widget.appIcon, ), ), const SizedBox(height: 10), - Flexible( - flex: 1, + Padding( + // Add a little padding for better visual spacing + padding: const EdgeInsets.symmetric(horizontal: 4.0), child: FittedBox( child: Text( widget.appName, - textAlign: TextAlign.center, - // softWrap: true, - // overflow: TextOverflow.visible, + textAlign: TextAlign.center, // This centers the text content + maxLines: 1, // Allow up to 2 lines to prevent clipping style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + color: widget.textColor, fontSize: 20.0, fontWeight: FontWeight.bold, ), ), ), - ) + ), ], ), ), diff --git a/Frontend/lib/mih_package_components/mih_package_tool_body.dart b/mih_ui/lib/mih_package_components/mih_package_tool_body.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_package_tool_body.dart rename to mih_ui/lib/mih_package_components/mih_package_tool_body.dart diff --git a/Frontend/lib/mih_package_components/mih_package_tools.dart b/mih_ui/lib/mih_package_components/mih_package_tools.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_package_tools.dart rename to mih_ui/lib/mih_package_components/mih_package_tools.dart diff --git a/Frontend/lib/mih_package_components/mih_package_window.dart b/mih_ui/lib/mih_package_components/mih_package_window.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_package_window.dart rename to mih_ui/lib/mih_package_components/mih_package_window.dart diff --git a/Frontend/lib/mih_package_components/mih_personal_profile_preview.dart b/mih_ui/lib/mih_package_components/mih_personal_profile_preview.dart similarity index 56% rename from Frontend/lib/mih_package_components/mih_personal_profile_preview.dart rename to mih_ui/lib/mih_package_components/mih_personal_profile_preview.dart index a08f266e..1b562f81 100644 --- a/Frontend/lib/mih_package_components/mih_personal_profile_preview.dart +++ b/mih_ui/lib/mih_package_components/mih_personal_profile_preview.dart @@ -1,17 +1,19 @@ -import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.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_services/mih_file_services.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; class MihPersonalProfilePreview extends StatefulWidget { final AppUser user; + final ImageProvider? imageFile; + final bool loading; const MihPersonalProfilePreview({ super.key, required this.user, + required this.imageFile, + required this.loading, }); @override @@ -20,14 +22,9 @@ class MihPersonalProfilePreview extends StatefulWidget { } class _MihPersonalProfilePreviewState extends State { - late Future futureImageUrl; - // String imageUrl = ""; - PlatformFile? file; - @override void initState() { super.initState(); - futureImageUrl = MihFileApi.getMinioFileUrl(widget.user.pro_pic_path); } @override @@ -35,42 +32,32 @@ class _MihPersonalProfilePreviewState extends State { double profilePictureWidth = 60; return Row( children: [ - FutureBuilder( - future: futureImageUrl, - builder: (context, asyncSnapshot) { - if (asyncSnapshot.connectionState == ConnectionState.done && - asyncSnapshot.hasData) { - if (asyncSnapshot.requireData != "") { - return MihCircleAvatar( - imageFile: NetworkImage(asyncSnapshot.requireData), - width: profilePictureWidth, - editable: false, - fileNameController: TextEditingController(), - userSelectedfile: file, - frameColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - backgroundColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onChange: () {}, - ); - } else { - return Icon( - MihIcons.iDontKnow, - size: profilePictureWidth, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - } - } else { - return Icon( + widget.loading + ? Icon( MihIcons.mihRing, size: profilePictureWidth, color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ); - } - }, - ), + ) + : widget.imageFile == null + ? Icon( + MihIcons.iDontKnow, + size: profilePictureWidth, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ) + : MihCircleAvatar( + imageFile: widget.imageFile, + width: profilePictureWidth, + editable: false, + fileNameController: TextEditingController(), + userSelectedfile: null, + frameColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onChange: () {}, + ), const SizedBox(width: 15), Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/mih_ui/lib/mih_package_components/mih_profile_links.dart b/mih_ui/lib/mih_package_components/mih_profile_links.dart new file mode 100644 index 00000000..29e7acc0 --- /dev/null +++ b/mih_ui/lib/mih_package_components/mih_profile_links.dart @@ -0,0 +1,165 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:mzansi_innovation_hub/main.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_package_components/mih_package_tile.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class MihProfileLinks extends StatefulWidget { + final List links; + final double? buttonSize; + final bool? paddingOn; + const MihProfileLinks({ + super.key, + required this.links, + this.buttonSize, + this.paddingOn, + }); + + @override + State createState() => _MihProfileLinksState(); +} + +class _MihProfileLinksState extends State { + Widget displayLinkButton(ProfileLink link) { + IconData iconData; + Color iconColor; + switch (link.destination.toLowerCase()) { + case "youtube": + iconData = FontAwesomeIcons.youtube; + iconColor = const Color(0xFFFF0000); + break; + case "tiktok": + iconData = FontAwesomeIcons.tiktok; + iconColor = const Color(0xFF000000); + break; + case "twitch": + iconData = FontAwesomeIcons.twitch; + iconColor = const Color(0xFF6441a5); + break; + case "threads": + iconData = FontAwesomeIcons.threads; + iconColor = const Color(0xFF000000); + break; + case "whatsapp": + iconData = FontAwesomeIcons.whatsapp; + iconColor = const Color(0xFF25D366); + break; + case "instagram": + iconData = FontAwesomeIcons.instagram; + iconColor = const Color(0xFFF56040); + break; + case "x": + iconData = FontAwesomeIcons.xTwitter; + iconColor = const Color(0xFF000000); + break; + case "linkedin": + iconData = FontAwesomeIcons.linkedin; + iconColor = const Color(0xFF0a66c2); + break; + case "facebook": + iconData = FontAwesomeIcons.facebook; + iconColor = const Color(0xFF4267B2); + break; + case "reddit": + iconData = FontAwesomeIcons.reddit; + iconColor = const Color(0xFFFF4500); + break; + case "discord": + iconData = FontAwesomeIcons.discord; + iconColor = const Color(0xFF5865F2); + break; + default: + iconData = FontAwesomeIcons.link; + iconColor = MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"); + } + + return MihPackageTile( + onTap: () { + launchSocialUrl(Uri.parse(link.web_link)); + }, + appName: link.destination, + appIcon: Icon( + iconData, + color: iconColor, + ), + iconSize: 200, + textColor: Colors.black, + // MihColors.getPrimaryColor( + // MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + } + + Future launchSocialUrl(Uri linkUrl) async { + if (!await launchUrl(linkUrl)) { + throw Exception('Could not launch $linkUrl'); + } + } + + @override + Widget build(BuildContext context) { + double width = MediaQuery.of(context).size.width; + return Consumer( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + Widget? child) { + return Padding( + padding: widget.paddingOn == null || widget.paddingOn! + ? MzansiInnovationHub.of(context)!.theme.screenType == "desktop" + ? EdgeInsets.symmetric(horizontal: width * 0.2) + : EdgeInsets.symmetric(horizontal: width * 0.075) + : 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 + ? SizedBox( + height: 35, + child: Text( + "No Profile Links", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ) + : Wrap( + alignment: WrapAlignment.center, + runSpacing: 15, + spacing: 15, + children: widget.links.map( + (link) { + return SizedBox( + width: widget.buttonSize ?? 80, + height: widget.buttonSize ?? 80, + child: displayLinkButton(link), + ); + }, + ).toList(), + ), + ), + ), + ); + }, + ); + } +} diff --git a/Frontend/lib/mih_package_components/mih_radio_options.dart b/mih_ui/lib/mih_package_components/mih_radio_options.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_radio_options.dart rename to mih_ui/lib/mih_package_components/mih_radio_options.dart diff --git a/Frontend/lib/mih_package_components/mih_scack_bar.dart b/mih_ui/lib/mih_package_components/mih_scack_bar.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_scack_bar.dart rename to mih_ui/lib/mih_package_components/mih_scack_bar.dart diff --git a/Frontend/lib/mih_package_components/mih_search_bar.dart b/mih_ui/lib/mih_package_components/mih_search_bar.dart similarity index 96% rename from Frontend/lib/mih_package_components/mih_search_bar.dart rename to mih_ui/lib/mih_package_components/mih_search_bar.dart index 61d0f386..8bcf839e 100644 --- a/Frontend/lib/mih_package_components/mih_search_bar.dart +++ b/mih_ui/lib/mih_package_components/mih_search_bar.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -128,7 +130,10 @@ class _MihSearchBarState extends State { controller: widget.controller, // Assign the controller focusNode: widget.searchFocusNode, autocorrect: true, - spellCheckConfiguration: kIsWeb ? null : SpellCheckConfiguration(), + spellCheckConfiguration: + !kIsWeb && (Platform.isAndroid || Platform.isIOS) + ? SpellCheckConfiguration() + : null, onSubmitted: (value) { widget.onPrefixIconTap ?.call(); // Call the prefix icon tap handler diff --git a/Frontend/lib/mih_package_components/mih_single_child_scroll.dart b/mih_ui/lib/mih_package_components/mih_single_child_scroll.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_single_child_scroll.dart rename to mih_ui/lib/mih_package_components/mih_single_child_scroll.dart diff --git a/Frontend/lib/mih_package_components/mih_text_form_field.dart b/mih_ui/lib/mih_package_components/mih_text_form_field.dart similarity index 95% rename from Frontend/lib/mih_package_components/mih_text_form_field.dart rename to mih_ui/lib/mih_package_components/mih_text_form_field.dart index 176d26bb..a2cac03e 100644 --- a/Frontend/lib/mih_package_components/mih_text_form_field.dart +++ b/mih_ui/lib/mih_package_components/mih_text_form_field.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -157,11 +159,15 @@ class _MihTextFormFieldState extends State { cursorColor: widget.inputColor, autofillHints: widget.autofillHints, autocorrect: true, - spellCheckConfiguration: (kIsWeb || - widget.passwordMode == true || - widget.numberMode == true) - ? null - : SpellCheckConfiguration(), + // spellCheckConfiguration: (kIsWeb || + // widget.passwordMode == true || + // widget.numberMode == true) + // ? null + // : SpellCheckConfiguration(), + spellCheckConfiguration: !kIsWeb && + (Platform.isAndroid || Platform.isIOS) + ? SpellCheckConfiguration() + : null, textAlign: widget.textIputAlignment ?? TextAlign.start, textAlignVertical: widget.multiLineInput == true diff --git a/Frontend/lib/mih_package_components/mih_time_field.dart b/mih_ui/lib/mih_package_components/mih_time_field.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_time_field.dart rename to mih_ui/lib/mih_package_components/mih_time_field.dart diff --git a/Frontend/lib/mih_package_components/mih_toggle.dart b/mih_ui/lib/mih_package_components/mih_toggle.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_toggle.dart rename to mih_ui/lib/mih_package_components/mih_toggle.dart diff --git a/Frontend/lib/mih_package_components/mih_yt_video_player.dart b/mih_ui/lib/mih_package_components/mih_yt_video_player.dart similarity index 100% rename from Frontend/lib/mih_package_components/mih_yt_video_player.dart rename to mih_ui/lib/mih_package_components/mih_yt_video_player.dart diff --git a/Frontend/lib/mih_packages/about_mih/about_mih.dart b/mih_ui/lib/mih_packages/about_mih/about_mih.dart similarity index 86% rename from Frontend/lib/mih_packages/about_mih/about_mih.dart rename to mih_ui/lib/mih_packages/about_mih/about_mih.dart index dfeb516f..5553462b 100644 --- a/Frontend/lib/mih_packages/about_mih/about_mih.dart +++ b/mih_ui/lib/mih_packages/about_mih/about_mih.dart @@ -20,8 +20,17 @@ class AboutMih extends StatefulWidget { } class _AboutMihState extends State { + late final MihInfo _info; + late final MihPrivacyPolicy _privacyPolicy; + late final MIHTermsOfService _termsOfService; + late final MihAttributes _attributes; + @override void initState() { + _info = MihInfo(); + _privacyPolicy = MihPrivacyPolicy(); + _termsOfService = MIHTermsOfService(); + _attributes = MihAttributes(); super.initState(); } @@ -73,13 +82,12 @@ class _AboutMihState extends State { } List getToolBody() { - List toolBodies = [ - const MihInfo(), - const MihPrivacyPolicy(), - const MIHTermsOfService(), - const MihAttributes(), + return [ + _info, + _privacyPolicy, + _termsOfService, + _attributes, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart b/mih_ui/lib/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart similarity index 100% rename from Frontend/lib/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart rename to mih_ui/lib/mih_packages/about_mih/mih_policy_tos_ext/policy_and_terms_text.dart diff --git a/Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart b/mih_ui/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart similarity index 88% rename from Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart rename to mih_ui/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart index e46cbe19..c1e28031 100644 --- a/Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart +++ b/mih_ui/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart @@ -37,9 +37,7 @@ class _AboutMihTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/about_mih/package_tools/mih_ attributes.dart b/mih_ui/lib/mih_packages/about_mih/package_tools/mih_ attributes.dart similarity index 100% rename from Frontend/lib/mih_packages/about_mih/package_tools/mih_ attributes.dart rename to mih_ui/lib/mih_packages/about_mih/package_tools/mih_ attributes.dart diff --git a/Frontend/lib/mih_packages/about_mih/package_tools/mih_info.dart b/mih_ui/lib/mih_packages/about_mih/package_tools/mih_info.dart similarity index 50% rename from Frontend/lib/mih_packages/about_mih/package_tools/mih_info.dart rename to mih_ui/lib/mih_packages/about_mih/package_tools/mih_info.dart index 509ef1ba..3260449a 100644 --- a/Frontend/lib/mih_packages/about_mih/package_tools/mih_info.dart +++ b/mih_ui/lib/mih_packages/about_mih/package_tools/mih_info.dart @@ -1,7 +1,8 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.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_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_install_services.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; @@ -27,25 +28,6 @@ class MihInfo extends StatefulWidget { class _MihInfoState extends State { late Future _futureUserCount; late Future _futureBusinessCount; - final Uri _tiktokUrl = - Uri.parse('https://www.tiktok.com/@mzansi.innovation.hub'); - final Uri _whatsappUrl = - Uri.parse('https://whatsapp.com/channel/0029Vax3INCIyPtMn8KgeM2F'); - final Uri _twitch = Uri.parse('https://www.twitch.tv/mzansi_innovation_hub'); - final Uri _kick = Uri.parse('https://kick.com/mzansi-innovation-hub'); - final Uri _threadsUrl = - Uri.parse('https://www.threads.net/@mzansi.innovation.hub'); - final Uri _instagramUrl = - Uri.parse('https://www.instagram.com/mzansi.innovation.hub'); - final Uri _youtubeUrl = - Uri.parse('https://www.youtube.com/@mzansiinnovationhub'); - final Uri _xUrl = Uri.parse('https://x.com/mzansi_inno_hub'); - final Uri _linkedinUrl = - Uri.parse('https://www.linkedin.com/company/mzansi-innovation-hub/'); - final Uri _facebookUrl = - Uri.parse('https://www.facebook.com/profile.php?id=61565345762136'); - final Uri _redditUrl = - Uri.parse('https://www.reddit.com/r/Mzani_Innovation_Hub/'); Widget founderBio() { String bio = ""; @@ -190,390 +172,6 @@ class _MihInfoState extends State { ); } - Widget womenForChange() { - String heading = "MIH Stands with Women For Change SA"; - String mission = - "South Africa is facing a devastating crisis of Gender-Based Violence and Femicide (GBVF), with at least 15 women murdered and 117 women reporting rape daily, often at the hands of known individuals, as highlighted by a shocking 33.8% rise in femicide in the last year, despite the existence of the National Strategic Plan on GBVF (NSP GBVF). Due to the government's lack of urgent action and funding for the NSP GBVF's implementation, organizations like Women For Change are urgently calling for the immediate declaration of GBVF as a National Disaster to mobilize resources and political will for decisive action, which must include judicial reforms (like opposing bail and implementing harsher sentences), immediate funding of the NSP GBVF and the new National Council, making the National Sex Offenders Register publicly accessible, and mandating comprehensive GBVF education and continuous public awareness campaigns."; - return SizedBox( - width: 500, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text( - heading, - textAlign: TextAlign.center, - style: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 25, - ), - ), - const SizedBox( - height: 10, - ), - Wrap( - alignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - launchSocialUrl( - Uri.parse( - "https://www.tiktok.com/@womenforchange.sa", - ), - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - FaIcon( - FontAwesomeIcons.tiktok, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(width: 10), - Text( - "@womenforchange.sa", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - MihButton( - onPressed: () { - launchSocialUrl( - Uri.parse( - "https://www.change.org/p/declare-gbvf-a-national-disaster-in-south-africa", - ), - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - FaIcon( - Icons.edit, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(width: 10), - Text( - "Sign Petition", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ], - ), - const SizedBox( - height: 10, - ), - Text( - mission, - textAlign: TextAlign.center, - style: const TextStyle( - //fontWeight: FontWeight.bold, - fontSize: 17, - ), - ), - ], - ), - ); - } - - Widget mihSocials() { - String heading = "Follow Our Journey"; - return Column( - children: [ - Text( - heading, - textAlign: TextAlign.center, - style: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 25, - ), - ), - const SizedBox( - height: 10, - ), - SizedBox( - width: 500, - height: 600, - child: GridView.builder( - padding: const EdgeInsets.only( - // left: width / 10, - // right: width / 10, - // //bottom: height / 5, - // top: 20, - ), - physics: const NeverScrollableScrollPhysics(), - // shrinkWrap: true, - itemCount: getSocialsList().length, - gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: 15, maxCrossAxisExtent: 150), - itemBuilder: (context, index) { - return getSocialsList()[index]; - }, - ), - ), - ], - ); - } - - List getSocialsList() { - List socials = []; - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_youtubeUrl); - }, - appName: "YouTube", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.youtube, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_tiktokUrl); - }, - appName: "TikTok", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.tiktok, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 200, - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_twitch); - }, - appName: "Twitch", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.twitch, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 200, - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_threadsUrl); - }, - appName: "Threads", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.threads, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 200, - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_whatsappUrl); - }, - appName: "Whatsapp", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.whatsapp, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 200, - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_instagramUrl); - }, - appName: "Instagram", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.instagram, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 200, - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_xUrl); - }, - appName: "X", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.xTwitter, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 200, - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_linkedinUrl); - }, - appName: "LinkedIn", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.linkedin, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 200, - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_facebookUrl); - }, - appName: "FaceBook", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.facebook, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 200, - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_redditUrl); - }, - appName: "Reddit", - appIcon: Center( - child: FaIcon( - FontAwesomeIcons.reddit, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 200, - ), - ), - iconSize: 200, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - socials.add(MihPackageTile( - onTap: () { - launchSocialUrl(_kick); - }, - appName: "Kick", - appIcon: Center( - child: Text( - "KICK", - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontWeight: FontWeight.bold, - fontSize: 100, - ), - ), - // FaIcon( - // FontAwesomeIcons.tv, - // color: MihColors.getPrimaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // size: 200, - // ), - ), - iconSize: 100, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - )); - //================================================================== - return socials; - } - Future launchSocialUrl(Uri linkUrl) async { if (!await launchUrl(linkUrl)) { throw Exception('Could not launch $linkUrl'); @@ -742,6 +340,424 @@ class _MihInfoState extends State { ); } + Widget mihDivider() { + return Padding( + padding: EdgeInsets.symmetric( + vertical: 10.0, + horizontal: 25, + ), + child: Divider( + thickness: 1, + color: MihColors.getGreyColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ); + } + + Widget aboutHeadings() { + return Column( + children: [ + SizedBox( + width: 165, + child: FittedBox( + child: Icon( + MihIcons.mihLogo, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + ), + const SizedBox( + height: 10, + ), + const Text( + "Mzansi Innovation Hub", + textAlign: TextAlign.center, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 30, + ), + ), + Text( + "MIH App Version: ${MzansiInnovationHub.of(context)!.theme.getLatestVersion()}", + textAlign: TextAlign.center, + style: const TextStyle( + fontWeight: FontWeight.normal, + fontSize: 15, + ), + ), + const SizedBox( + height: 10, + ), + ], + ); + } + + Widget communityCounter() { + return Column( + children: [ + Wrap( + alignment: WrapAlignment.spaceAround, + crossAxisAlignment: WrapCrossAlignment.center, + spacing: 25, + runSpacing: 10, + children: [ + displayUserCount(), + displayBusinessCount(), + ], + ), + Text( + "The MIH Community", + textAlign: TextAlign.center, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 22, + ), + ), + const SizedBox( + height: 10, + ), + ], + ); + } + + Widget callToActionsButtons() { + return Column( + children: [ + Wrap( + alignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + spacing: 10, + runSpacing: 10, + children: [ + MihButton( + onPressed: () { + MihInstallServices().installMihTrigger(context); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: getInstallButtonText(), + ), + MihButton( + onPressed: () { + launchSocialUrl( + Uri.parse( + "https://www.youtube.com/playlist?list=PLuT35kJIui0H5kXjxNOZlHoOPZbQLr4qh", + ), + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FaIcon( + FontAwesomeIcons.youtube, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + const SizedBox(width: 10), + Text( + "MIH Beginners Guide", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + MihButton( + onPressed: () { + launchSocialUrl( + Uri.parse( + "https://patreon.com/MzansiInnovationHub?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink", + ), + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FaIcon( + FontAwesomeIcons.patreon, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + const SizedBox(width: 10), + Text( + "Support Our Journey", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + ], + ), + const SizedBox( + height: 10, + ), + ], + ); + } + + Widget womenForChange() { + String heading = "MIH Stands with Women For Change SA"; + String mission = + "South Africa is facing a devastating crisis of Gender-Based Violence and Femicide (GBVF), with at least 15 women murdered and 117 women reporting rape daily, often at the hands of known individuals, as highlighted by a shocking 33.8% rise in femicide in the last year, despite the existence of the National Strategic Plan on GBVF (NSP GBVF). Due to the government's lack of urgent action and funding for the NSP GBVF's implementation, organizations like Women For Change are urgently calling for the immediate declaration of GBVF as a National Disaster to mobilize resources and political will for decisive action, which must include judicial reforms (like opposing bail and implementing harsher sentences), immediate funding of the NSP GBVF and the new National Council, making the National Sex Offenders Register publicly accessible, and mandating comprehensive GBVF education and continuous public awareness campaigns."; + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 25.0), + child: SizedBox( + width: 500, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + heading, + textAlign: TextAlign.center, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 25, + ), + ), + const SizedBox( + height: 10, + ), + Wrap( + alignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + spacing: 10, + runSpacing: 10, + children: [ + MihButton( + onPressed: () { + launchSocialUrl( + Uri.parse( + "https://www.tiktok.com/@womenforchange.sa", + ), + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FaIcon( + FontAwesomeIcons.tiktok, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + const SizedBox(width: 10), + Text( + "@womenforchange.sa", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + MihButton( + onPressed: () { + launchSocialUrl( + Uri.parse( + "https://www.change.org/p/declare-gbvf-a-national-disaster-in-south-africa", + ), + ); + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + width: 300, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FaIcon( + Icons.edit, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + const SizedBox(width: 10), + Text( + "Sign Petition", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + ], + ), + const SizedBox( + height: 10, + ), + Text( + mission, + textAlign: TextAlign.center, + style: const TextStyle( + //fontWeight: FontWeight.bold, + fontSize: 17, + ), + ), + ], + ), + ), + ); + } + + Widget missionAndVission() { + return Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 25.0), + child: Wrap( + alignment: WrapAlignment.start, + crossAxisAlignment: WrapCrossAlignment.start, + spacing: 10, + runSpacing: 10, + children: [ + ourVision(), + ourMission(), + ], + ), + ), + const SizedBox( + height: 10, + ), + ], + ); + } + + Widget founderDetails() { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + founderTitle(), + founderBio(), + ], + ); + } + + Widget mihSocials() { + List links = [ + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Youtube", + web_link: "https://www.youtube.com/@MzansiInnovationHub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "TikTok", + web_link: "https://www.tiktok.com/@mzansiinnovationhub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Twitch", + web_link: "https://www.twitch.tv/mzansiinnovationhub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Threads", + web_link: "https://www.threads.com/@mzansi.innovation.hub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "WhatsApp", + web_link: "https://whatsapp.com/channel/0029Vax3INCIyPtMn8KgeM2F", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Instagram", + web_link: "https://www.instagram.com/mzansi.innovation.hub/", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "X", + web_link: "https://x.com/mzansi_inno_hub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "LinkedIn", + web_link: "https://www.linkedin.com/company/mzansi-innovation-hub/", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Facebook", + web_link: "https://www.facebook.com/profile.php?id=61565345762136", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Reddit", + web_link: "https://www.reddit.com/r/Mzani_Innovation_Hub/", + ), + ]; + return Column( + children: [ + Text( + "Follow Our Journey", + textAlign: TextAlign.center, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 25, + ), + ), + const SizedBox( + height: 10, + ), + MihProfileLinks(links: links), + const SizedBox( + height: 25, + ), + ], + ); + } + @override void initState() { super.initState(); @@ -753,7 +769,6 @@ class _MihInfoState extends State { Widget build(BuildContext context) { return MihPackageToolBody( borderOn: false, - innerHorizontalPadding: 10, bodyItem: getBody(), ); } @@ -764,214 +779,16 @@ class _MihInfoState extends State { MihSingleChildScroll( child: Column( children: [ - SizedBox( - width: 165, - child: FittedBox( - child: Icon( - MihIcons.mihLogo, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ), - const SizedBox( - height: 10, - ), - const Text( - "Mzansi Innovation Hub", - textAlign: TextAlign.center, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 30, - ), - ), - Text( - "MIH App Version: ${MzansiInnovationHub.of(context)!.theme.getLatestVersion()}", - textAlign: TextAlign.center, - style: const TextStyle( - fontWeight: FontWeight.normal, - fontSize: 15, - ), - ), - const SizedBox( - height: 10, - ), - Wrap( - alignment: WrapAlignment.spaceAround, - crossAxisAlignment: WrapCrossAlignment.center, - spacing: 25, - runSpacing: 10, - children: [ - displayUserCount(), - displayBusinessCount(), - ], - ), - Text( - "The MIH Community", - textAlign: TextAlign.center, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 22, - ), - ), - const SizedBox( - height: 10, - ), - Wrap( - alignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - MihInstallServices().installMihTrigger(context); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: getInstallButtonText(), - ), - MihButton( - onPressed: () { - launchSocialUrl( - Uri.parse( - "https://www.youtube.com/playlist?list=PLuT35kJIui0H5kXjxNOZlHoOPZbQLr4qh", - ), - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - FaIcon( - FontAwesomeIcons.youtube, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(width: 10), - Text( - "MIH Beginners Guide", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - MihButton( - onPressed: () { - launchSocialUrl( - Uri.parse( - "https://patreon.com/MzansiInnovationHub?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink", - ), - ); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 300, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - FaIcon( - FontAwesomeIcons.patreon, - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(width: 10), - Text( - "Support Our Journey", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ], - ), - const SizedBox( - height: 10, - ), - // // ===================== Divider - Padding( - padding: EdgeInsets.symmetric( - vertical: 10.0, - horizontal: 25, - ), - child: Divider( - thickness: 1, - color: MihColors.getGreyColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 25.0), - child: Wrap( - alignment: WrapAlignment.start, - crossAxisAlignment: WrapCrossAlignment.start, - spacing: 10, - runSpacing: 10, - children: [ - womenForChange(), - ourVision(), - ourMission(), - ], - ), - ), - const SizedBox( - height: 25, - ), - const SizedBox( - height: 10, - ), - // ===================== Divider - Padding( - padding: EdgeInsets.symmetric( - vertical: 10.0, - horizontal: 25, - ), - child: Divider( - thickness: 1, - color: MihColors.getGreyColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - // spacing: 10, - // runSpacing: 10, - children: [ - founderTitle(), - founderBio(), - ], - ), - // ===================== Divider - Padding( - padding: EdgeInsets.symmetric( - vertical: 10.0, - horizontal: 25, - ), - child: Divider( - thickness: 1, - color: MihColors.getGreyColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), + aboutHeadings(), + communityCounter(), + callToActionsButtons(), + // mihDivider(), + // womenForChange(), + mihDivider(), + missionAndVission(), + mihDivider(), + founderDetails(), + mihDivider(), mihSocials(), ], ), @@ -984,11 +801,11 @@ class _MihInfoState extends State { children: [ SpeedDialChild( child: Icon( - Icons.vpn_lock, + Icons.android, color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), - label: "MIH - Web", + label: "Android", labelBackgroundColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), labelStyle: TextStyle( @@ -1001,8 +818,8 @@ class _MihInfoState extends State { onTap: () { shareMIHLink( context, - "Check out the MIH app on the Web", - "https://app.mzansi-innovation-hub.co.za/", + "Check out the MIH app on the Play Store", + "https://play.google.com/store/apps/details?id=za.co.mzansiinnovationhub.mih", ); }, ), @@ -1012,7 +829,7 @@ class _MihInfoState extends State { color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), - label: "MIH - iOS", + label: "iOS", labelBackgroundColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), labelStyle: TextStyle( @@ -1032,11 +849,11 @@ class _MihInfoState extends State { ), SpeedDialChild( child: Icon( - Icons.android, + Icons.store, color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), - label: "MIH - Android", + label: "Huawei", labelBackgroundColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), labelStyle: TextStyle( @@ -1049,8 +866,32 @@ class _MihInfoState extends State { onTap: () { shareMIHLink( context, - "Check out the MIH app on the Play Store", - "https://play.google.com/store/apps/details?id=za.co.mzansiinnovationhub.mih", + "Check out the MIH app on the App Gallery", + "https://appgallery.huawei.com/app/C113315335?pkgName=za.co.mzansiinnovationhub.mih", + ); + }, + ), + SpeedDialChild( + child: Icon( + Icons.vpn_lock, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + label: "Web", + 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: () { + shareMIHLink( + context, + "Check out the MIH app on the Web", + "https://app.mzansi-innovation-hub.co.za/", ); }, ), diff --git a/Frontend/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart b/mih_ui/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart similarity index 100% rename from Frontend/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart rename to mih_ui/lib/mih_packages/about_mih/package_tools/mih_privacy_policy.dart diff --git a/Frontend/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart b/mih_ui/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart similarity index 100% rename from Frontend/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart rename to mih_ui/lib/mih_packages/about_mih/package_tools/mih_terms_of_service.dart diff --git a/Frontend/lib/mih_packages/calendar/builder/build_access_request_list.dart b/mih_ui/lib/mih_packages/access_review/builder/build_access_request_list.dart similarity index 98% rename from Frontend/lib/mih_packages/calendar/builder/build_access_request_list.dart rename to mih_ui/lib/mih_packages/access_review/builder/build_access_request_list.dart index 1756bffe..e44e0272 100644 --- a/Frontend/lib/mih_packages/calendar/builder/build_access_request_list.dart +++ b/mih_ui/lib/mih_packages/access_review/builder/build_access_request_list.dart @@ -2,12 +2,12 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; -import 'package:mzansi_innovation_hub/mih_objects/access_request.dart'; -import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.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_objects/access_request.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:supertokens_flutter/http.dart' as http; @@ -221,6 +221,9 @@ class _BuildPatientsListState extends State { ), ), Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, runSpacing: 10, spacing: 10, children: [ diff --git a/Frontend/lib/mih_packages/access_review/builder/build_business_access_list.dart b/mih_ui/lib/mih_packages/access_review/builder/build_business_access_list.dart similarity index 99% rename from Frontend/lib/mih_packages/access_review/builder/build_business_access_list.dart rename to mih_ui/lib/mih_packages/access_review/builder/build_business_access_list.dart index f5508113..8743ae25 100644 --- a/Frontend/lib/mih_packages/access_review/builder/build_business_access_list.dart +++ b/mih_ui/lib/mih_packages/access_review/builder/build_business_access_list.dart @@ -323,6 +323,9 @@ class _BuildPatientsListState extends State { Visibility( visible: accessProvider.accessList![index].status == 'pending', child: Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, runSpacing: 10, spacing: 10, children: [ @@ -483,8 +486,6 @@ class _BuildPatientsListState extends State { MihAccessControllsProvider accessProvider, Widget? child) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, index) { return Divider( color: MihColors.getSecondaryColor( diff --git a/Frontend/lib/mih_packages/access_review/mih_access.dart b/mih_ui/lib/mih_packages/access_review/mih_access.dart similarity index 91% rename from Frontend/lib/mih_packages/access_review/mih_access.dart rename to mih_ui/lib/mih_packages/access_review/mih_access.dart index 56646629..329ac58b 100644 --- a/Frontend/lib/mih_packages/access_review/mih_access.dart +++ b/mih_ui/lib/mih_packages/access_review/mih_access.dart @@ -21,6 +21,7 @@ class MihAccess extends StatefulWidget { class _MihAccessState extends State { bool _isLoadingInitialData = true; + late final MihAccessRequest _accessRequest; Future _loadInitialData() async { setState(() { @@ -28,9 +29,11 @@ class _MihAccessState extends State { }); MzansiProfileProvider mzansiProfileProvider = context.read(); - await MihDataHelperServices().loadUserDataOnly( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + } setState(() { _isLoadingInitialData = false; }); @@ -39,6 +42,7 @@ class _MihAccessState extends State { @override void initState() { super.initState(); + _accessRequest = MihAccessRequest(); _loadInitialData(); } @@ -93,10 +97,9 @@ class _MihAccessState extends State { } List getToolBody() { - List toolBodies = [ - MihAccessRequest(), + return [ + _accessRequest, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/access_review/package_tile/mih_access_tile.dart b/mih_ui/lib/mih_packages/access_review/package_tile/mih_access_tile.dart similarity index 89% rename from Frontend/lib/mih_packages/access_review/package_tile/mih_access_tile.dart rename to mih_ui/lib/mih_packages/access_review/package_tile/mih_access_tile.dart index e58b387b..759ee745 100644 --- a/Frontend/lib/mih_packages/access_review/package_tile/mih_access_tile.dart +++ b/mih_ui/lib/mih_packages/access_review/package_tile/mih_access_tile.dart @@ -39,9 +39,7 @@ class _MihAccessTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart b/mih_ui/lib/mih_packages/access_review/package_tools/mih_access_requests.dart similarity index 72% rename from Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart rename to mih_ui/lib/mih_packages/access_review/package_tools/mih_access_requests.dart index a40ad884..241fce12 100644 --- a/Frontend/lib/mih_packages/access_review/package_tools/mih_access_requests.dart +++ b/mih_ui/lib/mih_packages/access_review/package_tools/mih_access_requests.dart @@ -7,7 +7,6 @@ import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_packages/access_review/builder/build_business_access_list.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_access_controls_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:flutter/material.dart'; @@ -83,50 +82,50 @@ class _MihAccessRequestState extends State { child: Mihloadingcircle(), ); } - return MihSingleChildScroll( - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisSize: MainAxisSize.max, - children: [ - Flexible( - child: MihDropdownField( - controller: filterController, - hintText: "Access Type", - dropdownOptions: const [ - "All", - "Approved", - "Pending", - "Declined", - "Cancelled", - ], - requiredText: true, - editable: true, - enableSearch: true, - validator: (value) { - return MihValidationServices().isEmpty(value); - }, - ), - ), - IconButton( - iconSize: 35, - onPressed: () { - setState(() { - forceRefresh = true; - }); - KenLogger.warning("Refreshing Access List"); - refreshList(); + return Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + child: MihDropdownField( + controller: filterController, + hintText: "Access Type", + dropdownOptions: const [ + "All", + "Approved", + "Pending", + "Declined", + "Cancelled", + ], + requiredText: true, + editable: true, + enableSearch: true, + validator: (value) { + return MihValidationServices().isEmpty(value); }, - icon: const Icon( - Icons.refresh, - ), ), - ], - ), - const SizedBox(height: 10), - BuildBusinessAccessList( + ), + IconButton( + iconSize: 35, + onPressed: () { + setState(() { + forceRefresh = true; + }); + KenLogger.warning("Refreshing Access List"); + refreshList(); + }, + icon: const Icon( + Icons.refresh, + ), + ), + ], + ), + const SizedBox(height: 10), + Expanded( + child: BuildBusinessAccessList( filterText: filterController.text, onSuccessUpate: () { setState(() { @@ -135,8 +134,8 @@ class _MihAccessRequestState extends State { refreshList(); }, ), - ], - ), + ), + ], ); }, ); diff --git a/Frontend/lib/mih_packages/calculator/mih_calculator.dart b/mih_ui/lib/mih_packages/calculator/mih_calculator.dart similarity index 89% rename from Frontend/lib/mih_packages/calculator/mih_calculator.dart rename to mih_ui/lib/mih_packages/calculator/mih_calculator.dart index 3e78b66e..e80bdb0a 100644 --- a/Frontend/lib/mih_packages/calculator/mih_calculator.dart +++ b/mih_ui/lib/mih_packages/calculator/mih_calculator.dart @@ -20,6 +20,10 @@ class MIHCalculator extends StatefulWidget { } class _MIHCalculatorState extends State { + late final SimpleCalc _simpleCalc; + late final TipCalc _tipCalc; + late final CurrencyExchangeRate _currencyExchangeRate; + Future getCurrencyCodeList() async { await MihCurrencyExchangeRateServices.getCurrencyCodeList(context); } @@ -27,6 +31,9 @@ class _MIHCalculatorState extends State { @override void initState() { super.initState(); + _simpleCalc = SimpleCalc(); + _tipCalc = TipCalc(); + _currencyExchangeRate = CurrencyExchangeRate(); WidgetsBinding.instance.addPostFrameCallback((_) async { await getCurrencyCodeList(); }); @@ -77,12 +84,11 @@ class _MIHCalculatorState extends State { } List getToolBody() { - List toolBodies = [ - const SimpleCalc(), - const TipCalc(), - const CurrencyExchangeRate(), + return [ + _simpleCalc, + _tipCalc, + _currencyExchangeRate, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart b/mih_ui/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart similarity index 87% rename from Frontend/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart rename to mih_ui/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart index 62daac41..6aa393b1 100644 --- a/Frontend/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart +++ b/mih_ui/lib/mih_packages/calculator/package_tiles/mih_calculator_tile.dart @@ -34,9 +34,7 @@ class _MihCalculatorTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart b/mih_ui/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart similarity index 98% rename from Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart rename to mih_ui/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart index 7c49f855..ba7ea0a5 100644 --- a/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart +++ b/mih_ui/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart @@ -374,6 +374,9 @@ class _CurrencyExchangeRateState extends State { const SizedBox(height: 25), Center( child: Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, spacing: 10, runSpacing: 10, children: [ diff --git a/Frontend/lib/mih_packages/calculator/package_tools/simple_calc.dart b/mih_ui/lib/mih_packages/calculator/package_tools/simple_calc.dart similarity index 100% rename from Frontend/lib/mih_packages/calculator/package_tools/simple_calc.dart rename to mih_ui/lib/mih_packages/calculator/package_tools/simple_calc.dart diff --git a/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart b/mih_ui/lib/mih_packages/calculator/package_tools/tip_calc.dart similarity index 98% rename from Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart rename to mih_ui/lib/mih_packages/calculator/package_tools/tip_calc.dart index 9516f533..3553a4c0 100644 --- a/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart +++ b/mih_ui/lib/mih_packages/calculator/package_tools/tip_calc.dart @@ -384,6 +384,9 @@ class _TipCalcState extends State { const SizedBox(height: 10), Center( child: Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, spacing: 10, runSpacing: 10, children: [ diff --git a/Frontend/lib/mih_packages/access_review/builder/build_access_request_list.dart b/mih_ui/lib/mih_packages/calendar/builder/build_access_request_list.dart similarity index 98% rename from Frontend/lib/mih_packages/access_review/builder/build_access_request_list.dart rename to mih_ui/lib/mih_packages/calendar/builder/build_access_request_list.dart index 2ca66184..53f22147 100644 --- a/Frontend/lib/mih_packages/access_review/builder/build_access_request_list.dart +++ b/mih_ui/lib/mih_packages/calendar/builder/build_access_request_list.dart @@ -2,12 +2,12 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_objects/access_request.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.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_objects/access_request.dart'; -import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:supertokens_flutter/http.dart' as http; @@ -221,6 +221,9 @@ class _BuildPatientsListState extends State { ), ), Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, runSpacing: 10, spacing: 10, children: [ diff --git a/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart b/mih_ui/lib/mih_packages/calendar/builder/build_appointment_list.dart similarity index 99% rename from Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart rename to mih_ui/lib/mih_packages/calendar/builder/build_appointment_list.dart index 04ede238..669c97f9 100644 --- a/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart +++ b/mih_ui/lib/mih_packages/calendar/builder/build_appointment_list.dart @@ -512,6 +512,8 @@ class _BuildAppointmentListState extends State { const SizedBox(height: 20), Center( child: Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, alignment: WrapAlignment.center, runSpacing: 10, spacing: 10, @@ -748,8 +750,6 @@ class _BuildAppointmentListState extends State { return Padding( padding: EdgeInsets.symmetric(horizontal: getPaddingSize()), child: ListView.builder( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, itemCount: mzansiProfileProvider.personalHome ? mihCalendarProvider.personalAppointments!.length : mihCalendarProvider.businessAppointments!.length, diff --git a/Frontend/lib/mih_packages/calendar/builder/build_queue_list.dart b/mih_ui/lib/mih_packages/calendar/builder/build_queue_list.dart similarity index 100% rename from Frontend/lib/mih_packages/calendar/builder/build_queue_list.dart rename to mih_ui/lib/mih_packages/calendar/builder/build_queue_list.dart diff --git a/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart b/mih_ui/lib/mih_packages/calendar/mzansi_calendar.dart similarity index 92% rename from Frontend/lib/mih_packages/calendar/mzansi_calendar.dart rename to mih_ui/lib/mih_packages/calendar/mzansi_calendar.dart index 4bf45ca9..66199e12 100644 --- a/Frontend/lib/mih_packages/calendar/mzansi_calendar.dart +++ b/mih_ui/lib/mih_packages/calendar/mzansi_calendar.dart @@ -21,6 +21,7 @@ class MzansiCalendar extends StatefulWidget { class _MzansiCalendarState extends State { bool _isLoadingInitialData = true; + late final Appointments _appointments; Future _loadInitialData() async { setState(() { @@ -28,9 +29,11 @@ class _MzansiCalendarState extends State { }); MzansiProfileProvider mzansiProfileProvider = context.read(); - await MihDataHelperServices().loadUserDataOnly( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + } setState(() { _isLoadingInitialData = false; }); @@ -39,6 +42,7 @@ class _MzansiCalendarState extends State { @override void initState() { super.initState(); + _appointments = Appointments(); _loadInitialData(); } @@ -95,11 +99,9 @@ class _MzansiCalendarState extends State { } List getToolBody() { - List toolBodies = [ - //appointment here - Appointments(), + return [ + _appointments, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart b/mih_ui/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart similarity index 88% rename from Frontend/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart rename to mih_ui/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart index 93c1b680..f29fff14 100644 --- a/Frontend/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart +++ b/mih_ui/lib/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart @@ -38,9 +38,7 @@ class _MzansiCalendarTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart b/mih_ui/lib/mih_packages/calendar/package_tools/appointments.dart similarity index 81% rename from Frontend/lib/mih_packages/calendar/package_tools/appointments.dart rename to mih_ui/lib/mih_packages/calendar/package_tools/appointments.dart index 3a81d8df..ab0967e2 100644 --- a/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart +++ b/mih_ui/lib/mih_packages/calendar/package_tools/appointments.dart @@ -11,7 +11,6 @@ import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.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_date_field.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; @@ -53,78 +52,80 @@ class _PatientAccessRequestState extends State { List appointmentList = mzansiProfileProvider.personalHome ? mihCalendarProvider.personalAppointments! : mihCalendarProvider.businessAppointments!; - if (appointmentList.isNotEmpty) { - return Expanded( - child: BuildAppointmentList( - inWaitingRoom: false, - titleController: _appointmentTitleController, - descriptionIDController: _appointmentDescriptionIDController, - patientIdController: null, - dateController: _appointmentDateController, - timeController: _appointmentTimeController, - ), - ); - } - return Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.calendar, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + + return appointmentList.isNotEmpty + ? Expanded( + child: BuildAppointmentList( + inWaitingRoom: false, + titleController: _appointmentTitleController, + descriptionIDController: _appointmentDescriptionIDController, + patientIdController: null, + dateController: _appointmentDateController, + timeController: _appointmentTimeController, ), - const SizedBox(height: 10), - Text( - "No appointments for ${mihCalendarProvider.selectedDay}", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - const SizedBox(height: 25), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, + ) + : Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.calendar, + size: 165, color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), - children: [ - TextSpan(text: "Press "), - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Icon( - Icons.menu, - size: 20, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), + const SizedBox(height: 10), + Text( + "No appointments for ${mihCalendarProvider.selectedDay}", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + const SizedBox(height: 25), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.menu, + size: 20, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + TextSpan( + text: + " to add an appointment or select a different date"), + ], ), ), - TextSpan( - text: - " to add an appointment or select a different date"), - ], - ), + ), + ], ), ), - ], - ), - ), - ); + ); } void addAppointmentWindow(MzansiProfileProvider mzansiProfileProvider, @@ -370,32 +371,25 @@ class _PatientAccessRequestState extends State { Widget? child) { return Stack( children: [ - MihSingleChildScroll( - child: Column( - children: [ - MIHCalendar( - calendarWidth: 500, - rowHeight: 35, - setDate: (value) { - mihCalendarProvider.setSelectedDay(value); - setState(() { - selectedAppointmentDateController.text = value; - }); - }), - // Divider( - // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // ), - Row( - mainAxisSize: MainAxisSize.max, - children: [ - displayAppointmentList( - mzansiProfileProvider, - mihCalendarProvider, - ), - ], - ) - ], - ), + Column( + children: [ + MIHCalendar( + calendarWidth: 500, + rowHeight: 35, + setDate: (value) { + mihCalendarProvider.setSelectedDay(value); + setState(() { + selectedAppointmentDateController.text = value; + }); + }), + // Divider( + // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + // ), + displayAppointmentList( + mzansiProfileProvider, + mihCalendarProvider, + ) + ], ), Positioned( right: 10, diff --git a/Frontend/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart b/mih_ui/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart similarity index 90% rename from Frontend/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart rename to mih_ui/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart index 1e9e0397..5ed9cad9 100644 --- a/Frontend/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart +++ b/mih_ui/lib/mih_packages/mih_authentication/mih_auth_forgot_password.dart @@ -14,6 +14,13 @@ class MihAuthForgotPassword extends StatefulWidget { class _MihAuthForgotPasswordState extends State { int _selcetedIndex = 0; + late final MihForgotPassword _forgotPassword; + + @override + void initState() { + super.initState(); + _forgotPassword = MihForgotPassword(); + } @override Widget build(BuildContext context) { @@ -59,9 +66,8 @@ class _MihAuthForgotPasswordState extends State { } List getToolBody() { - List toolBodies = [ - MihForgotPassword(), + return [ + _forgotPassword, ]; - return toolBodies; } } diff --git a/Frontend/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart b/mih_ui/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart similarity index 90% rename from Frontend/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart rename to mih_ui/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart index 1e22987d..a458cbd3 100644 --- a/Frontend/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart +++ b/mih_ui/lib/mih_packages/mih_authentication/mih_auth_password_reset.dart @@ -19,6 +19,13 @@ class MihAuthPasswordReset extends StatefulWidget { class _MihAuthPasswordResetState extends State { int _selcetedIndex = 0; + late final MihResetPassword _resetPassword; + + @override + void initState() { + super.initState(); + _resetPassword = MihResetPassword(token: widget.token); + } @override Widget build(BuildContext context) { @@ -67,11 +74,8 @@ class _MihAuthPasswordResetState extends State { } List getToolBody() { - List toolBodies = [ - MihResetPassword( - token: widget.token, - ), + return [ + _resetPassword, ]; - return toolBodies; } } diff --git a/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart b/mih_ui/lib/mih_packages/mih_authentication/mih_authentication.dart similarity index 90% rename from Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart rename to mih_ui/lib/mih_packages/mih_authentication/mih_authentication.dart index 2a3407a7..adbd4139 100644 --- a/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart +++ b/mih_ui/lib/mih_packages/mih_authentication/mih_authentication.dart @@ -17,6 +17,16 @@ class MihAuthentication extends StatefulWidget { } class _MihAuthenticationState extends State { + late final MihSignIn _signIn; + late final MihRegister _register; + + @override + void initState() { + super.initState(); + _signIn = MihSignIn(); + _register = MihRegister(); + } + @override Widget build(BuildContext context) { return MihPackage( @@ -32,8 +42,10 @@ class _MihAuthenticationState extends State { } List getToolBody() { - List toolBodies = [MihSignIn(), MihRegister()]; - return toolBodies; + return [ + _signIn, + _register, + ]; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_forgot_password.dart b/mih_ui/lib/mih_packages/mih_authentication/package_tools/mih_forgot_password.dart similarity index 100% rename from Frontend/lib/mih_packages/mih_authentication/package_tools/mih_forgot_password.dart rename to mih_ui/lib/mih_packages/mih_authentication/package_tools/mih_forgot_password.dart diff --git a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_register.dart b/mih_ui/lib/mih_packages/mih_authentication/package_tools/mih_register.dart similarity index 100% rename from Frontend/lib/mih_packages/mih_authentication/package_tools/mih_register.dart rename to mih_ui/lib/mih_packages/mih_authentication/package_tools/mih_register.dart diff --git a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_reset_password.dart b/mih_ui/lib/mih_packages/mih_authentication/package_tools/mih_reset_password.dart similarity index 100% rename from Frontend/lib/mih_packages/mih_authentication/package_tools/mih_reset_password.dart rename to mih_ui/lib/mih_packages/mih_authentication/package_tools/mih_reset_password.dart diff --git a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart b/mih_ui/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart similarity index 98% rename from Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart rename to mih_ui/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart index 7de9afe2..69c327f0 100644 --- a/Frontend/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart +++ b/mih_ui/lib/mih_packages/mih_authentication/package_tools/mih_sign_in.dart @@ -87,8 +87,7 @@ class _MihSignInState extends State { size: 200, ), iconSize: 200, - primaryColor: getPrim(), - secondaryColor: getSec(), + textColor: getPrim(), authenticateUser: false, )); tileList.add(MihPackageTile( @@ -110,8 +109,7 @@ class _MihSignInState extends State { size: 200, ), iconSize: 200, - primaryColor: getPrim(), - secondaryColor: getSec(), + textColor: getPrim(), authenticateUser: false, )); //if (AppEnviroment.getEnv() == "Dev") { @@ -134,8 +132,7 @@ class _MihSignInState extends State { size: 200, ), iconSize: 200, - primaryColor: getPrim(), - secondaryColor: getSec(), + textColor: getPrim(), authenticateUser: false, )); tileList.add(MihPackageTile( @@ -157,8 +154,7 @@ class _MihSignInState extends State { size: 200, ), iconSize: 200, - primaryColor: getPrim(), - secondaryColor: getSec(), + textColor: getPrim(), authenticateUser: false, )); //} diff --git a/Frontend/lib/mih_packages/mih_file_viewer/components/mih_print_prevew.dart b/mih_ui/lib/mih_packages/mih_file_viewer/components/mih_print_prevew.dart similarity index 100% rename from Frontend/lib/mih_packages/mih_file_viewer/components/mih_print_prevew.dart rename to mih_ui/lib/mih_packages/mih_file_viewer/components/mih_print_prevew.dart diff --git a/Frontend/lib/mih_packages/mih_file_viewer/mih_fle_viewer.dart b/mih_ui/lib/mih_packages/mih_file_viewer/mih_fle_viewer.dart similarity index 100% rename from Frontend/lib/mih_packages/mih_file_viewer/mih_fle_viewer.dart rename to mih_ui/lib/mih_packages/mih_file_viewer/mih_fle_viewer.dart diff --git a/Frontend/lib/mih_packages/mih_file_viewer/package_tools/mih_expanded_file_view.dart b/mih_ui/lib/mih_packages/mih_file_viewer/package_tools/mih_expanded_file_view.dart similarity index 100% rename from Frontend/lib/mih_packages/mih_file_viewer/package_tools/mih_expanded_file_view.dart rename to mih_ui/lib/mih_packages/mih_file_viewer/package_tools/mih_expanded_file_view.dart diff --git a/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart b/mih_ui/lib/mih_packages/mih_home/components/mih_app_drawer.dart similarity index 100% rename from Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart rename to mih_ui/lib/mih_packages/mih_home/components/mih_app_drawer.dart diff --git a/Frontend/lib/mih_packages/mih_home/mih_home.dart b/mih_ui/lib/mih_packages/mih_home/mih_home.dart similarity index 90% rename from Frontend/lib/mih_packages/mih_home/mih_home.dart rename to mih_ui/lib/mih_packages/mih_home/mih_home.dart index 554224f8..f3f49482 100644 --- a/Frontend/lib/mih_packages/mih_home/mih_home.dart +++ b/mih_ui/lib/mih_packages/mih_home/mih_home.dart @@ -1,22 +1,18 @@ 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/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_objects/business_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/user_consent.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; -import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_scack_bar.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_providers/about_mih_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_env.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_home/components/mih_app_drawer.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_home/package_tools/mih_business_home.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_home/package_tools/mih_personal_home.dart'; @@ -38,6 +34,8 @@ class _MihHomeState extends State { DateTime latestPrivacyPolicyDate = DateTime.parse("2024-12-01"); DateTime latestTermOfServiceDate = DateTime.parse("2024-12-01"); bool _isLoadingInitialData = true; + late final MihPersonalHome _personalHome; + late final MihBusinessHome? _businessHome; Future _loadInitialData() async { setState(() { @@ -45,12 +43,21 @@ class _MihHomeState extends State { }); MzansiProfileProvider mzansiProfileProvider = context.read(); - await MihDataHelperServices().loadUserDataWithBusinessesData( - mzansiProfileProvider, - ); - setState(() { - _isLoadingInitialData = false; - }); + + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); + } + _personalHome = const MihPersonalHome(); + _businessHome = mzansiProfileProvider.business != null + ? MihBusinessHome(isLoading: _isLoadingInitialData) + : null; + if (mounted) { + setState(() { + _isLoadingInitialData = false; + }); + } } bool showPolicyWindow(UserConsent? userConsent) { @@ -79,6 +86,7 @@ class _MihHomeState extends State { context, ) .then((value) { + if (!mounted) return; if (value == 200) { context.goNamed("mihHome"); ScaffoldMessenger.of(context).showSnackBar( @@ -166,6 +174,8 @@ class _MihHomeState extends State { const SizedBox(height: 20), Center( child: Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, alignment: WrapAlignment.center, spacing: 10, runSpacing: 10, @@ -375,15 +385,11 @@ class _MihHomeState extends State { MzansiProfileProvider mzansiProfileProvider, bool isBusinessUser) { Map temp = {}; temp[const Icon(Icons.person)] = () { - setState(() { - mzansiProfileProvider.setPersonalHome(true); - }); + mzansiProfileProvider.setPersonalHome(true); }; if (isBusinessUser) { temp[const Icon(Icons.business_center)] = () { - setState(() { - mzansiProfileProvider.setPersonalHome(false); - }); + mzansiProfileProvider.setPersonalHome(false); }; } return MihPackageTools( @@ -393,32 +399,15 @@ class _MihHomeState extends State { } List getToolBody(MzansiProfileProvider mzansiProfileProvider) { - List toolBodies = []; - AppUser? user = mzansiProfileProvider.user; - Business? business = mzansiProfileProvider.business; - BusinessUser? businessUser = mzansiProfileProvider.businessUser; - String userProfilePictureUrl = - mzansiProfileProvider.userProfilePicUrl ?? ""; - toolBodies.add( - MihPersonalHome( - signedInUser: user!, - personalSelected: mzansiProfileProvider.personalHome, - business: business, - businessUser: businessUser, - propicFile: userProfilePictureUrl != "" - ? NetworkImage(userProfilePictureUrl) - : null, - isDevActive: AppEnviroment.getEnv() == "Dev", - isUserNew: user.username == "", - ), - ); - if (user.type != "personal") { - toolBodies.add( - MihBusinessHome( - isLoading: _isLoadingInitialData, - ), - ); + if (mzansiProfileProvider.business == null) { + return [ + _personalHome, + ]; + } else { + return [ + _personalHome, + _businessHome!, + ]; } - return toolBodies; } } diff --git a/Frontend/lib/mih_packages/mih_home/mih_home_error.dart b/mih_ui/lib/mih_packages/mih_home/mih_home_error.dart similarity index 100% rename from Frontend/lib/mih_packages/mih_home/mih_home_error.dart rename to mih_ui/lib/mih_packages/mih_home/mih_home_error.dart diff --git a/Frontend/lib/mih_packages/mih_home/mih_route_error.dart b/mih_ui/lib/mih_packages/mih_home/mih_route_error.dart similarity index 100% rename from Frontend/lib/mih_packages/mih_home/mih_route_error.dart rename to mih_ui/lib/mih_packages/mih_home/mih_route_error.dart diff --git a/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart b/mih_ui/lib/mih_packages/mih_home/package_tools/mih_business_home.dart similarity index 83% rename from Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart rename to mih_ui/lib/mih_packages/mih_home/package_tools/mih_business_home.dart index b14199e4..d0155b07 100644 --- a/Frontend/lib/mih_packages/mih_home/package_tools/mih_business_home.dart +++ b/mih_ui/lib/mih_packages/mih_home/package_tools/mih_business_home.dart @@ -1,6 +1,5 @@ import 'package:go_router/go_router.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_icons.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; @@ -203,44 +202,37 @@ class _MihBusinessHomeState extends State MzansiProfileProvider mzansiProfileProvider, MzansiAiProvider mzansiAiProvider, Widget? child) { - // if (mzansiProfileProvider.user == null || - // mzansiProfileProvider.business == null || - // mzansiProfileProvider.businessUser == null) { - // return Center( - // child: Mihloadingcircle(), - // ); - // } - return MihSingleChildScroll( - child: Column( - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: Visibility( - visible: mzansiProfileProvider.business != null, - child: MihSearchBar( - controller: searchController, - hintText: "Ask Mzansi", - prefixIcon: Icons.search, - prefixAltIcon: MihIcons.mzansiAi, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - hintColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onPrefixIconTap: () { - mzansiAiProvider.ollamaProvider.resetChat(); - if (searchController.text.isNotEmpty) { - mzansiAiProvider - .setStartUpQuestion(searchController.text); - } - context.goNamed("mzansiAi"); - searchController.clear(); - }, - searchFocusNode: _searchFocusNode, - ), + return Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: Visibility( + visible: mzansiProfileProvider.business != null, + child: MihSearchBar( + controller: searchController, + hintText: "Ask Mzansi", + prefixIcon: Icons.search, + prefixAltIcon: MihIcons.mzansiAi, + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + hintColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onPrefixIconTap: () { + mzansiAiProvider.ollamaProvider.resetChat(); + if (searchController.text.isNotEmpty) { + mzansiAiProvider + .setStartUpQuestion(searchController.text); + } + context.goNamed("mzansiAi"); + searchController.clear(); + }, + searchFocusNode: _searchFocusNode, ), ), - const SizedBox(height: 20), - ValueListenableBuilder( + ), + const SizedBox(height: 10), + Expanded( + child: ValueListenableBuilder( valueListenable: searchPackageName, builder: (context, value, child) { List filteredPackages = value @@ -251,10 +243,7 @@ class _MihBusinessHomeState extends State .toList(); if (filteredPackages.isNotEmpty) { return GridView.builder( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, padding: getPadding(width, height), - // shrinkWrap: true, itemCount: filteredPackages.length, gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: packageSize, @@ -295,8 +284,8 @@ class _MihBusinessHomeState extends State } }, ), - ], - ), + ), + ], ); }, ); diff --git a/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart b/mih_ui/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart similarity index 71% rename from Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart rename to mih_ui/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart index b8249ce9..b1e74f8a 100644 --- a/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart +++ b/mih_ui/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart @@ -1,14 +1,10 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:mzansi_innovation_hub/mih_package_components/Example/package_tiles/test_package_tile.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; -import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; -import 'package:mzansi_innovation_hub/mih_objects/business.dart'; -import 'package:mzansi_innovation_hub/mih_objects/business_user.dart'; import 'package:mzansi_innovation_hub/mih_providers/mzansi_ai_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/about_mih/package_tile/about_mih_tile.dart'; @@ -23,26 +19,12 @@ import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profi import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:provider/provider.dart'; class MihPersonalHome extends StatefulWidget { - final AppUser signedInUser; - final bool personalSelected; - final Business? business; - final BusinessUser? businessUser; - final ImageProvider? propicFile; - final bool isUserNew; - final bool isDevActive; - const MihPersonalHome({ super.key, - required this.signedInUser, - required this.personalSelected, - required this.business, - required this.businessUser, - required this.propicFile, - required this.isUserNew, - required this.isDevActive, }); @override @@ -104,13 +86,6 @@ class _MihPersonalHomeState extends State //=============== Patient Profile =============== temp.add({ "Patient Profile": PatientProfileTile( - arguments: PatientViewArguments( - widget.signedInUser, - null, - null, - null, - "personal", - ), packageSize: packageSize, ) }); @@ -141,7 +116,6 @@ class _MihPersonalHomeState extends State //=============== Mine Sweeper =============== temp.add({ "Mine Sweeper": MihMineSweeperTile( - personalSelected: widget.personalSelected, packageSize: packageSize, ) }); @@ -158,11 +132,9 @@ class _MihPersonalHomeState extends State ) }); //=============== Dev =============== - if (widget.isDevActive) { + if (AppEnviroment.getEnv() == "Dev") { temp.add({ "test": TestPackageTile( - signedInUser: widget.signedInUser, - business: widget.business, packageSize: packageSize, ) }); @@ -205,10 +177,6 @@ class _MihPersonalHomeState extends State WidgetsBinding.instance.addPostFrameCallback((_) { context.goNamed( 'mzansiProfileManage', - extra: AppProfileUpdateArguments( - widget.signedInUser, - widget.propicFile, - ), ); }); } @@ -227,7 +195,9 @@ class _MihPersonalHomeState extends State void initState() { super.initState(); searchController.addListener(searchPackage); - if (widget.isUserNew) { + MzansiProfileProvider profileProvider = + context.read(); + if (profileProvider.user!.username == "") { personalPackagesMap = setNerUserPersonalPackage(); autoNavToProfile(); } else { @@ -249,57 +219,40 @@ class _MihPersonalHomeState extends State } Widget getBody(double width, double height) { - return Consumer( - builder: (BuildContext context, MzansiAiProvider mzansiAiProvider, - Widget? child) { - return MihSingleChildScroll( - child: Column( - children: [ - // Icon( - // MihIcons.mihLogo, - // size: 200, - // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // ), - // const SizedBox(height: 10), - // Text( - // // "Welcome, ${widget.signedInUser.fname}!", - // "Mzansi Innovation Hub", - // textAlign: TextAlign.center, - // style: TextStyle( - // fontSize: 30, - // fontWeight: FontWeight.bold, - // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // ), - // ), - // const SizedBox(height: 20), - Visibility( - visible: !widget.isUserNew, - child: Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: MihSearchBar( - controller: searchController, - hintText: "Ask Mzansi", - prefixIcon: Icons.search, - prefixAltIcon: MihIcons.mzansiAi, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - hintColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onPrefixIconTap: () { - mzansiAiProvider.ollamaProvider.resetChat(); - if (searchController.text.isNotEmpty) { - mzansiAiProvider - .setStartUpQuestion(searchController.text); - } - context.goNamed("mzansiAi"); - searchController.clear(); - }, - searchFocusNode: _searchFocusNode, - ), + return Consumer2( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + MzansiAiProvider mzansiAiProvider, Widget? child) { + return Column( + children: [ + Visibility( + visible: profileProvider.user!.username != "", + child: Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: MihSearchBar( + controller: searchController, + hintText: "Ask Mzansi", + prefixIcon: Icons.search, + prefixAltIcon: MihIcons.mzansiAi, + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + hintColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onPrefixIconTap: () { + mzansiAiProvider.ollamaProvider.resetChat(); + if (searchController.text.isNotEmpty) { + mzansiAiProvider + .setStartUpQuestion(searchController.text); + } + context.goNamed("mzansiAi"); + searchController.clear(); + }, + searchFocusNode: _searchFocusNode, ), ), - const SizedBox(height: 20), - ValueListenableBuilder( + ), + const SizedBox(height: 10), + Expanded( + child: ValueListenableBuilder( valueListenable: searchPackageName, builder: (context, value, child) { List filteredPackages = value @@ -310,10 +263,7 @@ class _MihPersonalHomeState extends State .toList(); if (filteredPackages.isNotEmpty) { return GridView.builder( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, padding: getPadding(width, height), - // shrinkWrap: true, itemCount: filteredPackages.length, gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: packageSize, @@ -321,7 +271,6 @@ class _MihPersonalHomeState extends State ), itemBuilder: (context, index) { return filteredPackages[index]; - // return personalPackages[index]; }, ); } else { @@ -355,8 +304,8 @@ class _MihPersonalHomeState extends State } }, ), - ], - ), + ), + ], ); }, ); diff --git a/mih_ui/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart b/mih_ui/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart new file mode 100644 index 00000000..7f870c46 --- /dev/null +++ b/mih_ui/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart @@ -0,0 +1,152 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_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:provider/provider.dart'; + +class BuildMinesweeperLeaderboardList extends StatefulWidget { + const BuildMinesweeperLeaderboardList({super.key}); + + @override + State createState() => + _BuildMinesweeperLeaderboardListState(); +} + +class _BuildMinesweeperLeaderboardListState + extends State { + Color getMedalColor(int index) { + switch (index) { + case (0): + return MihColors.getGoldColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"); + case (1): + return MihColors.getSilverColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"); + case (2): + return MihColors.getBronze( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"); + default: + return MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"); + } + } + + @override + Widget build(BuildContext context) { + final double width = MediaQuery.sizeOf(context).width; + return Consumer2( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + MihMineSweeperProvider mineSweeperProvider, Widget? child) { + return ListView.separated( + separatorBuilder: (BuildContext context, index) { + return Divider( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + }, + itemCount: mineSweeperProvider.leaderboard!.length, + itemBuilder: (context, index) { + return FutureBuilder( + future: mineSweeperProvider.leaderboardUserPicturesUrl[index], + builder: (context, asyncSnapshot) { + ImageProvider? imageFile; + bool loading = true; + if (asyncSnapshot.connectionState == ConnectionState.done) { + loading = false; + if (asyncSnapshot.hasData) { + imageFile = asyncSnapshot.requireData != "" + ? CachedNetworkImageProvider( + asyncSnapshot.requireData) + : null; + } else { + imageFile = null; + } + } else { + imageFile = null; + } + return Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: Row( + children: [ + Text( + "#${index + 1}", + style: TextStyle( + fontSize: 25, + color: getMedalColor(index), + ), + ), + const SizedBox(width: 10), + loading + ? Icon( + MihIcons.mihRing, + size: 80, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + ) + : imageFile == null + ? Icon( + MihIcons.iDontKnow, + size: 80, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + ) + : MihCircleAvatar( + key: UniqueKey(), + imageFile: imageFile, + width: 80, + editable: false, + fileNameController: null, + userSelectedfile: null, + frameColor: getMedalColor(index), + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + onChange: () {}, + ), + const SizedBox(width: 10), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "${mineSweeperProvider.leaderboard![index].username}${profileProvider.user!.username == mineSweeperProvider.leaderboard![index].username ? " (You)" : ""}", + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + color: getMedalColor(index), + ), + ), + Text( + "Score: ${mineSweeperProvider.leaderboard![index].game_score}\nTime: ${mineSweeperProvider.leaderboard![index].game_time}", + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + // fontWeight: FontWeight.bold, + color: getMedalColor(index), + ), + ), + ], + ) + ], + ), + ); + }); + }, + ); + }, + ); + } +} diff --git a/Frontend/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart b/mih_ui/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart similarity index 97% rename from Frontend/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart rename to mih_ui/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart index 44d64644..59f7f3a4 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart +++ b/mih_ui/lib/mih_packages/mine_sweeper/builders/build_my_scoreboard_list.dart @@ -39,8 +39,6 @@ class _BuildMinesweeperLeaderboardListState builder: (BuildContext context, MzansiProfileProvider profileProvider, MihMineSweeperProvider mineSweeperProvider, Widget? child) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, index) { return Divider( color: MihColors.getSecondaryColor( diff --git a/Frontend/lib/mih_packages/mine_sweeper/components/board_square.dart b/mih_ui/lib/mih_packages/mine_sweeper/components/board_square.dart similarity index 100% rename from Frontend/lib/mih_packages/mine_sweeper/components/board_square.dart rename to mih_ui/lib/mih_packages/mine_sweeper/components/board_square.dart diff --git a/Frontend/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart b/mih_ui/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart similarity index 100% rename from Frontend/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart rename to mih_ui/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart diff --git a/Frontend/lib/mih_packages/mine_sweeper/components/mih_mine_sweeper_start_game_window.dart b/mih_ui/lib/mih_packages/mine_sweeper/components/mih_mine_sweeper_start_game_window.dart similarity index 100% rename from Frontend/lib/mih_packages/mine_sweeper/components/mih_mine_sweeper_start_game_window.dart rename to mih_ui/lib/mih_packages/mine_sweeper/components/mih_mine_sweeper_start_game_window.dart diff --git a/Frontend/lib/mih_packages/mine_sweeper/components/mine_tile.dart b/mih_ui/lib/mih_packages/mine_sweeper/components/mine_tile.dart similarity index 100% rename from Frontend/lib/mih_packages/mine_sweeper/components/mine_tile.dart rename to mih_ui/lib/mih_packages/mine_sweeper/components/mine_tile.dart diff --git a/Frontend/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart b/mih_ui/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart similarity index 85% rename from Frontend/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart rename to mih_ui/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart index ec066b30..c259798c 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart +++ b/mih_ui/lib/mih_packages/mine_sweeper/mih_mine_sweeper.dart @@ -24,6 +24,10 @@ class MihMineSweeper extends StatefulWidget { class _MihMineSweeperState extends State { bool _isLoadingInitialData = true; + late final MineSweeperGame _mineSweeperGame; + late final MihMineSweeperLeaderBoard _mineSweeperLeaderBoard; + late final MyScoreBoard _myScoreBoard; + late final MineSweeperQuickStartGuide _mineSweeperQuickStartGuide; Future _loadInitialData() async { setState(() { @@ -32,9 +36,11 @@ class _MihMineSweeperState extends State { MzansiProfileProvider mzansiProfileProvider = context.read(); MihBannerAdProvider bannerAdProvider = context.read(); - await MihDataHelperServices().loadUserDataOnly( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + } bannerAdProvider.loadBannerAd(); setState(() { _isLoadingInitialData = false; @@ -44,6 +50,10 @@ class _MihMineSweeperState extends State { @override void initState() { super.initState(); + _mineSweeperGame = MineSweeperGame(); + _mineSweeperLeaderBoard = MihMineSweeperLeaderBoard(); + _myScoreBoard = MyScoreBoard(); + _mineSweeperQuickStartGuide = MineSweeperQuickStartGuide(); _loadInitialData(); } @@ -121,12 +131,11 @@ class _MihMineSweeperState extends State { } List getToolBody() { - List toolBodies = [ - const MineSweeperGame(), - const MihMineSweeperLeaderBoard(), - const MyScoreBoard(), - const MineSweeperQuickStartGuide(), + return [ + _mineSweeperGame, + _mineSweeperLeaderBoard, + _myScoreBoard, + _mineSweeperQuickStartGuide, ]; - return toolBodies; } } diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart b/mih_ui/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart similarity index 83% rename from Frontend/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart rename to mih_ui/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart index 1c15c4e9..7171697d 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart +++ b/mih_ui/lib/mih_packages/mine_sweeper/package_tiles/mih_mine_sweeper_tile.dart @@ -6,11 +6,9 @@ import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.da import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; class MihMineSweeperTile extends StatefulWidget { - final bool personalSelected; final double packageSize; const MihMineSweeperTile({ super.key, - required this.personalSelected, required this.packageSize, }); @@ -35,9 +33,7 @@ class _MihMineSweeperTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/mih_ui/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart b/mih_ui/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart new file mode 100644 index 00000000..d2865b2a --- /dev/null +++ b/mih_ui/lib/mih_packages/mine_sweeper/package_tools/mih_mine_sweeper_leader_board.dart @@ -0,0 +1,201 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:ken_logger/ken_logger.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_provider.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_minesweeper_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; +import 'package:provider/provider.dart'; + +class MihMineSweeperLeaderBoard extends StatefulWidget { + const MihMineSweeperLeaderBoard({super.key}); + + @override + State createState() => + _MihMineSweeperLeaderBoardState(); +} + +class _MihMineSweeperLeaderBoardState extends State { + TextEditingController filterController = TextEditingController(); + bool isLoading = true; + Future initialiseLeaderboard() async { + MihMineSweeperProvider mineSweeperProvider = + context.read(); + filterController.text = mineSweeperProvider.difficulty; + KenLogger.success("getting data"); + await MihMinesweeperServices().getTop20Leaderboard(mineSweeperProvider); + List> userPicturesUrl = []; + Future userPicUrl; + for (final ranking in mineSweeperProvider.leaderboard!) { + userPicUrl = MihFileApi.getMinioFileUrl(ranking.proPicUrl); + userPicturesUrl.add(userPicUrl); + } + mineSweeperProvider.setLeaderboardUserPictures( + leaderboardUserPicturesUrl: userPicturesUrl); + setState(() { + isLoading = false; + }); + } + + void refreshLeaderBoard( + MihMineSweeperProvider mineSweeperProvider, String difficulty) { + setState(() { + isLoading = true; + }); + mineSweeperProvider.setDifficulty(difficulty); + mineSweeperProvider.setLeaderboard(leaderboard: null); + mineSweeperProvider.setMyScoreboard(myScoreboard: null); + initialiseLeaderboard(); + } + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await initialiseLeaderboard(); + }); + } + + @override + Widget build(BuildContext context) { + final double width = MediaQuery.sizeOf(context).width; + return Consumer( + builder: (BuildContext context, + MihMineSweeperProvider mineSweeperProvider, Widget? child) { + return RefreshIndicator( + onRefresh: () async { + refreshLeaderBoard(mineSweeperProvider, filterController.text); + }, + child: MihPackageToolBody( + borderOn: false, + bodyItem: getBody(width), + ), + ); + }, + ); + } + + Widget getBody(double width) { + return Consumer( + builder: (BuildContext context, + MihMineSweeperProvider mineSweeperProvider, Widget? child) { + if (isLoading) { + return Center( + child: Mihloadingcircle(), + ); + } else { + return Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + child: MihDropdownField( + controller: filterController, + hintText: "Leaderboards", + dropdownOptions: const [ + "Very Easy", + "Easy", + "Intermediate", + "Hard", + ], + requiredText: true, + editable: true, + enableSearch: false, + validator: (value) { + return MihValidationServices().isEmpty(value); + }, + onSelected: (selection) { + refreshLeaderBoard(mineSweeperProvider, selection!); + }, + ), + ), + ], + ), + ), + const SizedBox(height: 10), + !isLoading && mineSweeperProvider.leaderboard!.isEmpty + ? Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.mineSweeper, + size: 165, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + const SizedBox(height: 10), + Text( + "Be the first on the leaderboard.", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + const SizedBox(height: 25), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + FontAwesomeIcons.bomb, + size: 20, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + ), + ), + TextSpan(text: " and start a new game"), + ], + ), + ), + ), + ], + ), + ) + : Expanded( + child: BuildMinesweeperLeaderboardList(), + ), + ], + ); + } + }, + ); + } +} diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart b/mih_ui/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart similarity index 99% rename from Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart rename to mih_ui/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart index b43ee2d1..adc07fda 100644 --- a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart +++ b/mih_ui/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_game.dart @@ -393,6 +393,7 @@ class _MineSweeperGameState extends State { Wrap( runAlignment: WrapAlignment.center, crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, spacing: 10, runSpacing: 10, children: [ @@ -524,6 +525,7 @@ class _MineSweeperGameState extends State { Wrap( runAlignment: WrapAlignment.center, crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, spacing: 10, runSpacing: 10, children: [ diff --git a/Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_quick_start_guide.dart b/mih_ui/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_quick_start_guide.dart similarity index 100% rename from Frontend/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_quick_start_guide.dart rename to mih_ui/lib/mih_packages/mine_sweeper/package_tools/mine_sweeper_quick_start_guide.dart diff --git a/mih_ui/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart b/mih_ui/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart new file mode 100644 index 00000000..31e18824 --- /dev/null +++ b/mih_ui/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart @@ -0,0 +1,204 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:ken_logger/ken_logger.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mih_mine_sweeper_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_packages/mine_sweeper/builders/build_my_scoreboard_list.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_minesweeper_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; +import 'package:provider/provider.dart'; + +class MyScoreBoard extends StatefulWidget { + const MyScoreBoard({super.key}); + + @override + State createState() => _MihMineSweeperLeaderBoardState(); +} + +class _MihMineSweeperLeaderBoardState extends State { + TextEditingController filterController = TextEditingController(); + + Future initialiseLeaderboard() async { + MzansiProfileProvider profileProvider = + context.read(); + MihMineSweeperProvider mineSweeperProvider = + context.read(); + filterController.text = mineSweeperProvider.difficulty; + KenLogger.success("getting data"); + await MihMinesweeperServices() + .getMyScoreboard(profileProvider, mineSweeperProvider); + KenLogger.success("${mineSweeperProvider.myScoreboard}"); + } + + void refreshLeaderBoard( + MihMineSweeperProvider mineSweeperProvider, String difficulty) { + mineSweeperProvider.setDifficulty(difficulty); + mineSweeperProvider.setLeaderboard(leaderboard: null); + mineSweeperProvider.setMyScoreboard(myScoreboard: null); + initialiseLeaderboard(); + } + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await initialiseLeaderboard(); + }); + } + + @override + Widget build(BuildContext context) { + final double width = MediaQuery.sizeOf(context).width; + return Consumer( + builder: (BuildContext context, + MihMineSweeperProvider mineSweeperProvider, Widget? child) { + return RefreshIndicator( + onRefresh: () async { + refreshLeaderBoard(mineSweeperProvider, filterController.text); + }, + child: MihPackageToolBody( + borderOn: false, + bodyItem: getBody(width), + ), + ); + }, + ); + } + + Widget getBody(double width) { + return Consumer2( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + MihMineSweeperProvider mineSweeperProvider, Widget? child) { + if (mineSweeperProvider.myScoreboard == null) { + return Center( + child: Mihloadingcircle(), + ); + } else { + return Column( + children: [ + Center( + child: MihCircleAvatar( + imageFile: profileProvider.userProfilePicture, + width: 150, + editable: false, + fileNameController: null, + userSelectedfile: null, + frameColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onChange: (selectedImage) {}, + key: ValueKey(profileProvider.userProfilePicUrl), + ), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + child: MihDropdownField( + controller: filterController, + hintText: "Scoreboards", + dropdownOptions: const [ + "Very Easy", + "Easy", + "Intermediate", + "Hard", + ], + requiredText: true, + editable: true, + enableSearch: false, + validator: (value) { + return MihValidationServices().isEmpty(value); + }, + onSelected: (selection) { + refreshLeaderBoard(mineSweeperProvider, selection!); + }, + ), + ), + ], + ), + ), + const SizedBox(height: 10), + mineSweeperProvider.myScoreboard!.isEmpty + ? Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.mineSweeper, + size: 165, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + const SizedBox(height: 10), + Text( + "You have played and ${mineSweeperProvider.difficulty} yet.", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + const SizedBox(height: 25), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + FontAwesomeIcons.bomb, + size: 20, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + ), + ), + TextSpan(text: " and start a new game"), + ], + ), + ), + ), + ], + ), + ) + : Expanded(child: BuildMyScoreBoardList()), + ], + ); + } + }, + ); + } +} diff --git a/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart b/mih_ui/lib/mih_packages/mzansi_ai/mzansi_ai.dart similarity index 92% rename from Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart rename to mih_ui/lib/mih_packages/mzansi_ai/mzansi_ai.dart index 2bb0fabf..9d7de91d 100644 --- a/Frontend/lib/mih_packages/mzansi_ai/mzansi_ai.dart +++ b/mih_ui/lib/mih_packages/mzansi_ai/mzansi_ai.dart @@ -21,6 +21,7 @@ class MzansiAi extends StatefulWidget { class _MzansiAiState extends State { bool _isLoadingInitialData = true; + late final MihAiChat _aiChat; Future _loadInitialData() async { setState(() { @@ -28,9 +29,11 @@ class _MzansiAiState extends State { }); MzansiProfileProvider mzansiProfileProvider = context.read(); - await MihDataHelperServices().loadUserDataOnly( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + } setState(() { _isLoadingInitialData = false; }); @@ -39,6 +42,7 @@ class _MzansiAiState extends State { @override void initState() { super.initState(); + _aiChat = MihAiChat(); _loadInitialData(); } @@ -93,10 +97,9 @@ class _MzansiAiState extends State { } List getToolBody() { - List toolBodies = [ - MihAiChat(), + return [ + _aiChat, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart b/mih_ui/lib/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart similarity index 89% rename from Frontend/lib/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart rename to mih_ui/lib/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart index e2fbcb75..47c94016 100644 --- a/Frontend/lib/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart +++ b/mih_ui/lib/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart @@ -41,9 +41,7 @@ class _MzansiAiTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart b/mih_ui/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart similarity index 74% rename from Frontend/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart rename to mih_ui/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart index e4e43085..f4da1b6c 100644 --- a/Frontend/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart +++ b/mih_ui/lib/mih_packages/mzansi_ai/package_tools/mih_ai_chat.dart @@ -1,8 +1,11 @@ +import 'dart:convert'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_ai_toolkit/flutter_ai_toolkit.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:flutter_tts/flutter_tts.dart'; +import 'package:intl/intl.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; @@ -10,6 +13,7 @@ import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.d import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_providers/mzansi_ai_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:provider/provider.dart'; class MihAiChat extends StatefulWidget { @@ -121,6 +125,63 @@ class _MihAiChatState extends State with WidgetsBindingObserver { } } + void saveHistory( + MzansiProfileProvider profileProvider, MzansiAiProvider aiProvider) { + final history = aiProvider.ollamaProvider.history.toList(); + DateTime now = DateTime.now(); + DateFormat formatter = DateFormat('yyyy-MM-ddTHH:mm:ss'); + String formattedDateTimeNow = formatter.format(now); + + // 1. Build the list of message Maps + List> messages = []; + for (int i = 0; i < history.length; i++) { + final map = history[i].toJson(); + map["order"] = i; // Add the order field + messages.add(map); + } + + // 2. Build the main history Map (the root JSON object) + final historyMap = { + "conversation_id": "1234-asdf-5678-qwert", + "app_id": profileProvider.user!.app_id, + "modified_date": formattedDateTimeNow, + "messages": messages, // The list of messages is included here + }; + + // 3. Use JsonEncoder to convert the entire Map to a formatted JSON string + const encoder = JsonEncoder.withIndent(' '); + String jsonHistory = encoder.convert(historyMap); + + // The output string will now be a correctly formatted and escaped JSON object. + debugPrint("History: $jsonHistory"); + } + + // void saveHistory( + // MzansiProfileProvider profileProvider, MzansiAiProvider aiProvider) { + // final history = aiProvider.ollamaProvider.history.toList(); + // DateTime now = DateTime.now(); + // DateFormat formatter = DateFormat('yyyy-MM-ddTHH:mm:ss'); + // String formattedDateTimeNow = formatter.format(now); + // String jsonHistory = '{"conversation_id":"1234-asdf-5678-qwert",\n'; + // jsonHistory += '"app_id":"${profileProvider.user!.app_id}",\n'; + // jsonHistory += '"modified_date":"$formattedDateTimeNow",\n'; + // jsonHistory += '"messages":[\n'; + // KenLogger.success("History Length: ${history.length}"); + // for (int i = 0; i != history.length; i++) { + // final map = history[i].toJson(); + // map["order"] = i; + // final json = JsonEncoder.withIndent(' ').convert(map); + // jsonHistory += json; + // if (i != history.length - 1) { + // KenLogger.success("i: $i"); + // jsonHistory += ","; + // } + // jsonHistory += "\n"; + // } + // jsonHistory += ']}'; + // debugPrint("History: $jsonHistory"); + // } + void stopTTS(MzansiAiProvider aiProvider) { _flutterTts.stop(); aiProvider.setTTSstate(false); @@ -213,9 +274,9 @@ class _MihAiChatState extends State with WidgetsBindingObserver { @override Widget build(BuildContext context) { - return Consumer( - builder: - (BuildContext context, MzansiAiProvider aiProvider, Widget? child) { + return Consumer2( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + MzansiAiProvider aiProvider, Widget? child) { bool hasHistory = aiProvider.ollamaProvider.history.isNotEmpty; String? lastMessage; if (hasHistory) { @@ -228,17 +289,38 @@ class _MihAiChatState extends State with WidgetsBindingObserver { LlmChatView( provider: aiProvider.ollamaProvider, messageSender: aiProvider.ollamaProvider.sendMessageStream, + speechToText: aiProvider.ollamaProvider.speechToText, // welcomeMessage: // "Mzansi AI is here to help. Send us a messahe and we'll try our best to assist you.", autofocus: false, - enableAttachments: false, + enableAttachments: true, enableVoiceNotes: false, style: aiProvider.getChatStyle(context), suggestions: [ - "What is mih all about?", + "What is MIH all about?", "What are the features of MIH?" ], ), + // Positioned( + // top: 10, + // left: 10, + // child: MihButton( + // width: 200, + // height: 30, + // onPressed: () { + // saveHistory(profileProvider, aiProvider); + // }, + // buttonColor: MihColors.getGreenColor( + // MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + // child: Text( + // "View History as json", + // style: TextStyle( + // color: MihColors.getPrimaryColor( + // MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + // ), + // ), + // ), + // ), if (hasHistory && lastMessage != null) Positioned( bottom: 80, diff --git a/Frontend/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart b/mih_ui/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart similarity index 63% rename from Frontend/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart rename to mih_ui/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart index 122d5014..0861cf7b 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart +++ b/mih_ui/lib/mih_packages/mzansi_directory/builders/build_business_search_resultsList.dart @@ -1,3 +1,4 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; @@ -27,8 +28,8 @@ class _BuildBusinessSearchResultsListState builder: (BuildContext context, MzansiDirectoryProvider directoryProvider, Widget? child) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), + // shrinkWrap: true, + // physics: const NeverScrollableScrollPhysics(), itemCount: widget.businessList.length, separatorBuilder: (BuildContext context, index) { return Divider( @@ -58,9 +59,32 @@ class _BuildBusinessSearchResultsListState // vertical: 5, horizontal: 25, ), - child: MihBusinessProfilePreview( - business: widget.businessList[index], - ), + child: FutureBuilder( + future: directoryProvider.busSearchImagesUrl![ + widget.businessList[index].business_id], + builder: (context, asyncSnapshot) { + ImageProvider? imageFile; + bool loading = true; + if (asyncSnapshot.connectionState == + ConnectionState.done) { + loading = false; + if (asyncSnapshot.hasData) { + imageFile = asyncSnapshot.requireData != "" + ? CachedNetworkImageProvider( + asyncSnapshot.requireData) + : null; + } else { + imageFile = null; + } + } else { + imageFile = null; + } + return MihBusinessProfilePreview( + business: widget.businessList[index], + imageFile: imageFile, + loading: loading, + ); + }), ), ), ); diff --git a/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart b/mih_ui/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart similarity index 64% rename from Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart rename to mih_ui/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart index 665fddd0..74fa0c35 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart +++ b/mih_ui/lib/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart @@ -1,3 +1,4 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; @@ -21,14 +22,17 @@ class BuildFavouriteBusinessesList extends StatefulWidget { class _BuildFavouriteBusinessesListState extends State { + @override + void initState() { + super.initState(); + } + @override Widget build(BuildContext context) { return Consumer( builder: (BuildContext context, MzansiDirectoryProvider directoryProvider, Widget? child) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), itemCount: widget.favouriteBusinesses.length, separatorBuilder: (BuildContext context, index) { return Divider( @@ -59,9 +63,32 @@ class _BuildFavouriteBusinessesListState padding: EdgeInsets.symmetric( horizontal: 25, ), - child: MihBusinessProfilePreview( - business: widget.favouriteBusinesses[index]!, - ), + child: FutureBuilder( + future: directoryProvider.favBusImagesUrl![ + widget.favouriteBusinesses[index]!.business_id], + builder: (context, asyncSnapshot) { + ImageProvider? imageFile; + bool loading = true; + if (asyncSnapshot.connectionState == + ConnectionState.done) { + loading = false; + if (asyncSnapshot.hasData) { + imageFile = asyncSnapshot.requireData != "" + ? CachedNetworkImageProvider( + asyncSnapshot.requireData) + : null; + } else { + imageFile = null; + } + } else { + imageFile = null; + } + return MihBusinessProfilePreview( + business: widget.favouriteBusinesses[index]!, + imageFile: imageFile, + loading: loading, + ); + }), ), ), ); diff --git a/Frontend/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart b/mih_ui/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart similarity index 62% rename from Frontend/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart rename to mih_ui/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart index 1ba4f568..2d50b15e 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart +++ b/mih_ui/lib/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart @@ -1,3 +1,4 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; @@ -27,8 +28,8 @@ class _BuildUserSearchResultsListState builder: (BuildContext context, MzansiDirectoryProvider directoryProvider, Widget? child) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), + // shrinkWrap: true, + // physics: const NeverScrollableScrollPhysics(), itemCount: widget.userList.length, separatorBuilder: (BuildContext context, index) { return Divider( @@ -57,8 +58,32 @@ class _BuildUserSearchResultsListState // vertical: 5, horizontal: 25, ), - child: - MihPersonalProfilePreview(user: widget.userList[index]), + child: FutureBuilder( + future: directoryProvider + .userSearchImagesUrl![widget.userList[index].app_id], + builder: (context, asyncSnapshot) { + ImageProvider? imageFile; + bool loading = true; + if (asyncSnapshot.connectionState == + ConnectionState.done) { + loading = false; + if (asyncSnapshot.hasData) { + imageFile = asyncSnapshot.requireData != "" + ? CachedNetworkImageProvider( + asyncSnapshot.requireData) + : null; + } else { + imageFile = null; + } + } else { + imageFile = null; + } + return MihPersonalProfilePreview( + user: widget.userList[index], + imageFile: imageFile, + loading: loading, + ); + }), ), ), ); diff --git a/Frontend/lib/mih_packages/mzansi_directory/mzansi_directory.dart b/mih_ui/lib/mih_packages/mzansi_directory/mzansi_directory.dart similarity index 76% rename from Frontend/lib/mih_packages/mzansi_directory/mzansi_directory.dart rename to mih_ui/lib/mih_packages/mzansi_directory/mzansi_directory.dart index f61b2914..207eb19b 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/mzansi_directory.dart +++ b/mih_ui/lib/mih_packages/mzansi_directory/mzansi_directory.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:go_router/go_router.dart'; -import 'package:mzansi_innovation_hub/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; @@ -10,10 +9,8 @@ import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.da import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart'; import 'package:provider/provider.dart'; class MzansiDirectory extends StatefulWidget { @@ -29,6 +26,8 @@ class _MzansiDirectoryState extends State { bool _isLoadingInitialData = true; late Future futurePosition = MIHLocationAPI().getGPSPosition(context); + late final MihSearchMzansi _searchTool; + late final MihFavouriteBusinesses _favouritesTool; Future _loadInitialData() async { setState(() { @@ -36,14 +35,15 @@ class _MzansiDirectoryState extends State { }); MzansiProfileProvider mzansiProfileProvider = context.read(); - await MihDataHelperServices().loadUserDataOnly( - mzansiProfileProvider, - ); - await getFavouriteBusinesses(); - initialiseGPSLocation(); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + } setState(() { _isLoadingInitialData = false; }); + initialiseGPSLocation(); } Future initialiseGPSLocation() async { @@ -53,29 +53,11 @@ class _MzansiDirectoryState extends State { directoryProvider.setUserPosition(userPos); } - Future getFavouriteBusinesses() async { - MzansiDirectoryProvider directoryProvider = - context.read(); - MzansiProfileProvider profileProvider = - context.read(); - await MihMzansiDirectoryServices().getAllUserBookmarkedBusiness( - profileProvider.user!.app_id, - directoryProvider, - ); - List favBus = []; - for (var bus in directoryProvider.bookmarkedBusinesses) { - await MihBusinessDetailsServices() - .getBusinessDetailsByBusinessId(bus.business_id) - .then((business) { - favBus.add(business!); - }); - } - directoryProvider.setFavouriteBusinesses(businesses: favBus); - } - @override void initState() { super.initState(); + _searchTool = const MihSearchMzansi(); + _favouritesTool = const MihFavouriteBusinesses(); _loadInitialData(); } @@ -106,12 +88,10 @@ class _MzansiDirectoryState extends State { } List getToolBody() { - List toolBodies = []; - toolBodies.addAll([ - MihSearchMzansi(), - MihFavouriteBusinesses(), - ]); - return toolBodies; + return [ + _searchTool, + _favouritesTool, + ]; } MihPackageAction getAction() { diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart b/mih_ui/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart similarity index 89% rename from Frontend/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart rename to mih_ui/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart index 4fe5ae30..aeb5b6f4 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart +++ b/mih_ui/lib/mih_packages/mzansi_directory/package_tiles/mzansi_directory_tile.dart @@ -40,9 +40,7 @@ class _MzansiDirectoryTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_contacts.dart b/mih_ui/lib/mih_packages/mzansi_directory/package_tools/mih_contacts.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_contacts.dart rename to mih_ui/lib/mih_packages/mzansi_directory/package_tools/mih_contacts.dart diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart b/mih_ui/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart similarity index 76% rename from Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart rename to mih_ui/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart index a9a272cf..cff989f5 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart +++ b/mih_ui/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart @@ -5,11 +5,14 @@ import 'package:mzansi_innovation_hub/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; -import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.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_directory/builders/build_favourite_businesses_list.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.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'; class MihFavouriteBusinesses extends StatefulWidget { @@ -29,6 +32,34 @@ class _MihFavouriteBusinessesState extends State { ValueNotifier([]); Timer? _debounce; + Future getFavouriteBusinesses( + MzansiDirectoryProvider directoryProvider) async { + MzansiProfileProvider profileProvider = + context.read(); + if (directoryProvider.bookmarkedBusinesses.isEmpty) { + await MihMzansiDirectoryServices().getAllUserBookmarkedBusiness( + profileProvider.user!.app_id, + directoryProvider, + ); + List favBus = []; + Map> favBusImages = {}; + Future businessLogoUrl; + for (var bus in directoryProvider.bookmarkedBusinesses) { + await MihBusinessDetailsServices() + .getBusinessDetailsByBusinessId(bus.business_id) + .then((business) async { + favBus.add(business!); + businessLogoUrl = MihFileApi.getMinioFileUrl(business.logo_path); + favBusImages[business.business_id] = businessLogoUrl; + }); + } + directoryProvider.setFavouriteBusinesses( + businesses: favBus, + businessesImagesUrl: favBusImages, + ); + } + } + void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) { List businessesToDisplay = []; String query = businessSearchController.text.toLowerCase(); @@ -59,6 +90,7 @@ class _MihFavouriteBusinessesState extends State { // mzansiProfileProvider, // directoryProvider, // ); + getFavouriteBusinesses(directoryProvider); _filterAndSetBusinesses(directoryProvider); businessSearchController.addListener(() { if (_debounce?.isActive ?? false) { @@ -84,30 +116,31 @@ class _MihFavouriteBusinessesState extends State { return Consumer( builder: (BuildContext context, MzansiDirectoryProvider directoryProvider, Widget? child) { + _filterAndSetBusinesses(directoryProvider); if (directoryProvider.favouriteBusinessesList == null) { return Center( child: Mihloadingcircle(), ); } - return MihSingleChildScroll( - child: Column( - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: MihSearchBar( - controller: businessSearchController, - hintText: "Search Businesses", - prefixIcon: Icons.search, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - hintColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onPrefixIconTap: () {}, - searchFocusNode: searchFocusNode, - ), + return Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: MihSearchBar( + controller: businessSearchController, + hintText: "Search Businesses", + prefixIcon: Icons.search, + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + hintColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onPrefixIconTap: () {}, + searchFocusNode: searchFocusNode, ), - const SizedBox(height: 10), - ValueListenableBuilder>( + ), + const SizedBox(height: 10), + Expanded( + child: ValueListenableBuilder>( valueListenable: searchBookmarkedBusinesses, builder: (context, filteredBusinesses, child) { if (filteredBusinesses.isEmpty && @@ -142,7 +175,7 @@ class _MihFavouriteBusinessesState extends State { return Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0), child: Column( - mainAxisAlignment: MainAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox(height: 50), @@ -200,8 +233,8 @@ class _MihFavouriteBusinessesState extends State { favouriteBusinesses: filteredBusinesses, ); }), - ], - ), + ), + ], ); }, ); diff --git a/mih_ui/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart b/mih_ui/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart new file mode 100644 index 00000000..fa2fc911 --- /dev/null +++ b/mih_ui/lib/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart @@ -0,0 +1,573 @@ +import 'package:flutter/material.dart'; +import 'package:ken_logger/ken_logger.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_dropdwn_field.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_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_packages/mzansi_directory/builders/build_business_search_resultsList.dart'; +import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart'; +import 'package:mzansi_innovation_hub/mih_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_user_services.dart'; +import 'package:provider/provider.dart'; + +class MihSearchMzansi extends StatefulWidget { + const MihSearchMzansi({ + super.key, + }); + + @override + State createState() => _MihSearchMzansiState(); +} + +class _MihSearchMzansiState extends State { + final TextEditingController mzansiSearchController = TextEditingController(); + final TextEditingController businessTypeController = TextEditingController(); + final FocusNode searchFocusNode = FocusNode(); + // late bool userSearch; + // Future?> futureUserSearchResults = Future.value(); + List userSearchResults = []; + List businessSearchResults = []; + late Future> availableBusinessTypes; + bool filterOn = false; + bool loadingSearchResults = false; + + Future swapPressed(MzansiProfileProvider profileProvider, + MzansiDirectoryProvider directoryProvider) async { + directoryProvider.setPersonalSearch(!directoryProvider.personalSearch); + setState(() { + if (filterOn) { + filterOn = !filterOn; + } + }); + if (businessTypeController.text.isNotEmpty) { + setState(() { + businessTypeController.clear(); + }); + } + await searchPressed(profileProvider, directoryProvider); + } + + void clearAll(MzansiDirectoryProvider directoryProvider) { + directoryProvider + .setSearchedBusinesses(searchedBusinesses: [], businessesImagesUrl: {}); + directoryProvider.setSearchedUsers(searchedUsers: [], userImagesUrl: {}); + directoryProvider.setSearchTerm(searchTerm: ""); + setState(() { + mzansiSearchController.clear(); + businessTypeController.clear(); + }); + } + + Future searchPressed(MzansiProfileProvider profileProvider, + MzansiDirectoryProvider directoryProvider) async { + setState(() { + loadingSearchResults = true; + }); + directoryProvider.setSearchTerm(searchTerm: mzansiSearchController.text); + directoryProvider.setBusinessTypeFilter( + businessTypeFilter: businessTypeController.text); + if (directoryProvider.personalSearch && + directoryProvider.searchTerm.isNotEmpty) { + final userResults = await MihUserServices() + .searchUsers(profileProvider, directoryProvider.searchTerm, context); + Map> userImages = {}; + Future usernProPicUrl; + for (var user in userResults) { + KenLogger.success("Business Logo Path: ${user.pro_pic_path}"); + usernProPicUrl = MihFileApi.getMinioFileUrl(user.pro_pic_path); + KenLogger.success("Business Logo Path: ${user.pro_pic_path}"); + userImages[user.app_id] = usernProPicUrl; + // != "" + // ? CachedNetworkImageProvider(usernProPicUrl) + // : null; + } + + directoryProvider.setSearchedUsers( + searchedUsers: userResults, + userImagesUrl: userImages, + ); + } else { + List? businessSearchResults = []; + if (directoryProvider.businessTypeFilter.isNotEmpty) { + businessSearchResults = await MihBusinessDetailsServices() + .searchBusinesses(directoryProvider.searchTerm, + directoryProvider.businessTypeFilter, context); + } else if (directoryProvider.searchTerm.isNotEmpty) { + businessSearchResults = await MihBusinessDetailsServices() + .searchBusinesses(directoryProvider.searchTerm, + directoryProvider.businessTypeFilter, context); + } + Map> busImagesUrl = {}; + Future businessLogoUrl; + for (var bus in businessSearchResults) { + KenLogger.success("Business Logo Path: ${bus.logo_path}"); + businessLogoUrl = MihFileApi.getMinioFileUrl(bus.logo_path); + KenLogger.success("Business Logo Path: ${bus.logo_path}"); + busImagesUrl[bus.business_id] = businessLogoUrl; + // != "" + // ? CachedNetworkImageProvider(businessLogoUrl) + // : null; + } + directoryProvider.setSearchedBusinesses( + searchedBusinesses: businessSearchResults, + businessesImagesUrl: busImagesUrl, + ); + } + setState(() { + loadingSearchResults = false; + }); + } + + @override + void dispose() { + super.dispose(); + businessTypeController.dispose(); + mzansiSearchController.dispose(); + } + + @override + void initState() { + super.initState(); + MzansiDirectoryProvider directoryProvider = + context.read(); + availableBusinessTypes = + MihBusinessDetailsServices().fetchAllBusinessTypes(); + mzansiSearchController.text = directoryProvider.searchTerm; + } + + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.sizeOf(context); + final double width = size.width; + return MihPackageToolBody( + borderOn: false, + bodyItem: getBody(width), + ); + } + + Widget getBody(double width) { + return Consumer2( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + MzansiDirectoryProvider directoryProvider, Widget? child) { + return Column( + children: [ + Text( + directoryProvider.personalSearch + ? "People Search" + : "Businesses Search", + style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 10), + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + child: MihSearchBar( + controller: mzansiSearchController, + hintText: "Search Mzansi", + prefixIcon: Icons.search, + prefixAltIcon: directoryProvider.personalSearch + ? Icons.person + : Icons.business, + suffixTools: [ + IconButton( + onPressed: () { + swapPressed(profileProvider, directoryProvider); + }, + icon: Icon( + Icons.swap_horiz_rounded, + size: 35, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ], + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + hintColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + onPrefixIconTap: () { + searchPressed(profileProvider, directoryProvider); + }, + onClearIconTap: () { + clearAll(directoryProvider); + }, + searchFocusNode: searchFocusNode, + ), + ), + Visibility( + visible: !directoryProvider.personalSearch, + child: const SizedBox(width: 10), + ), + Visibility( + visible: !directoryProvider.personalSearch, + child: IconButton( + onPressed: () { + if (filterOn) { + clearAll(directoryProvider); + } + setState(() { + filterOn = !filterOn; + }); + }, + icon: Icon( + !filterOn + ? Icons.filter_list_rounded + : Icons.filter_list_off_rounded, + size: 35, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ), + ], + ), + ), + const SizedBox(height: 10), + FutureBuilder( + future: availableBusinessTypes, + builder: (context, asyncSnapshot) { + List options = []; + if (asyncSnapshot.connectionState == ConnectionState.done) { + options.addAll(asyncSnapshot.data!); + } + return Visibility( + visible: filterOn, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Expanded( + child: MihDropdownField( + controller: businessTypeController, + hintText: "Business Type", + dropdownOptions: options, + requiredText: true, + editable: true, + enableSearch: true, + ), + ), + const SizedBox(width: 10), + MihButton( + onPressed: () { + if (businessTypeController.text.isNotEmpty) { + searchPressed( + profileProvider, directoryProvider); + } else { + MihAlertServices().errorBasicAlert( + "Business Type Not Selected", + "Please ensure you have selected a Business Type before seareching for Businesses of Mzansi", + context, + ); + } + }, + buttonColor: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + elevation: 10, + child: Text( + "Search", + style: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ); + }), + const SizedBox(height: 10), + Expanded( + child: directoryProvider.personalSearch + ? displayPersonalSearchResults(directoryProvider) + : displayBusinessSearchResults(directoryProvider), + ), + ], + ); + }, + ); + } + + Widget displayBusinessSearchResults( + MzansiDirectoryProvider directoryProvider) { + if (loadingSearchResults) { + return Center( + child: const Mihloadingcircle(), + ); + } else if (directoryProvider.searchedBusinesses.isNotEmpty) { + // return Text("Pulled Data successfully"); + directoryProvider.searchedBusinesses + .sort((a, b) => a.Name.compareTo(b.Name)); + return BuildBusinessSearchResultsList( + businessList: directoryProvider.searchedBusinesses, + ); + } else if (directoryProvider.searchedBusinesses.isEmpty && + directoryProvider.searchTerm.isNotEmpty) { + return MihSingleChildScroll( + child: Column( + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.iDontKnow, + size: 165, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + const SizedBox(height: 25), + Text( + "Let's try refining your search", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + ], + ), + ); + } else if (directoryProvider.searchedBusinesses.isEmpty && + directoryProvider.searchTerm.isEmpty) { + return MihSingleChildScroll( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.businessProfile, + size: 165, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + const SizedBox(height: 10), + Text( + "Search for businesses of Mzansi!", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + const SizedBox(height: 25), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.swap_horiz_rounded, + size: 20, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + TextSpan(text: " to search for people of Mzansi"), + ], + ), + ), + ), + const SizedBox(height: 10), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.filter_list_rounded, + size: 20, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + TextSpan(text: " to filter business types"), + ], + ), + ), + ), + ], + ), + ), + ); + } else { + return Center( + child: Text( + "Error pulling Patients Data\n/users/search/${directoryProvider.searchTerm}", + style: TextStyle( + fontSize: 25, + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark")), + textAlign: TextAlign.center, + ), + ); + } + } + + Widget displayPersonalSearchResults( + MzansiDirectoryProvider directoryProvider) { + if (loadingSearchResults) { + return Center( + child: const Mihloadingcircle(), + ); + } else if (directoryProvider.searchedUsers.isNotEmpty) { + directoryProvider.searchedUsers + .sort((a, b) => a.username.compareTo(b.username)); + return BuildUserSearchResultsList( + userList: directoryProvider.searchedUsers); + } else if (directoryProvider.searchedUsers.isEmpty && + directoryProvider.searchTerm.isEmpty) { + return MihSingleChildScroll( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.personalProfile, + size: 165, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + const SizedBox(height: 10), + Text( + "Search for people of Mzansi!", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + const SizedBox(height: 25), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + children: [ + TextSpan(text: "Press "), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.swap_horiz_rounded, + size: 20, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + TextSpan(text: " to search for businesses of Mzansi"), + ], + ), + ), + ), + ], + ), + ), + ); + } else if (directoryProvider.searchedUsers.isEmpty && + directoryProvider.searchTerm.isNotEmpty) { + return MihSingleChildScroll( + child: Column( + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.iDontKnow, + size: 165, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + const SizedBox(height: 10), + Text( + "Let's try refining your search", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + ], + ), + ); + } else { + return Center( + child: Text( + "Error pulling Patients Data\n/users/search/${directoryProvider.searchTerm}", + style: TextStyle( + fontSize: 25, + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark")), + textAlign: TextAlign.center, + ), + ); + } + } +} diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart similarity index 97% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart index 6ea114da..b15b6d4f 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart @@ -35,8 +35,6 @@ class _BuildEmployeeListState extends State { builder: (BuildContext context, MzansiProfileProvider mzansiProfileProvider, Widget? child) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, index) { return Divider( color: MihColors.getSecondaryColor( diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart similarity index 96% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart index 5e840533..73e5ecea 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/builders/build_user_list.dart @@ -42,8 +42,6 @@ class _BuildUserListState extends State { builder: (BuildContext context, MzansiProfileProvider profileProvider, Widget? child) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, index) { return Divider( color: MihColors.getSecondaryColor( diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart similarity index 83% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart index f03544de..36510f89 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/busines_profile.dart @@ -24,6 +24,12 @@ class BusinesProfile extends StatefulWidget { class _BusinesProfileState extends State { bool _isLoadingInitialData = true; + late final MihBusinessDetails _businessDetails; + late final MihMyBusinessUser _businessUser; + late final MihMyBusinessTeam _businessTeam; + late final MihBusinessUserSearch _businessUserSearch; + late final MihBusinessReviews _businessReviews; + late final MihBusinessQrCode _businessQrCode; Future _loadInitialData() async { setState(() { @@ -31,9 +37,11 @@ class _BusinesProfileState extends State { }); MzansiProfileProvider mzansiProfileProvider = context.read(); - await MihDataHelperServices().loadUserDataWithBusinessesData( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); + } await MihBusinessEmployeeServices() .fetchEmployees(mzansiProfileProvider, context); setState(() { @@ -44,6 +52,12 @@ class _BusinesProfileState extends State { @override void initState() { super.initState(); + _businessDetails = MihBusinessDetails(); + _businessUser = MihMyBusinessUser(); + _businessTeam = MihMyBusinessTeam(); + _businessUserSearch = MihBusinessUserSearch(); + _businessReviews = MihBusinessReviews(business: null); + _businessQrCode = MihBusinessQrCode(business: null); _loadInitialData(); } @@ -132,14 +146,13 @@ class _BusinesProfileState extends State { } List getToolBody() { - List toolBodies = [ - MihBusinessDetails(), - MihMyBusinessUser(), - MihMyBusinessTeam(), - MihBusinessUserSearch(), - MihBusinessReviews(business: null), - MihBusinessQrCode(business: null), + return [ + _businessDetails, + _businessUser, + _businessTeam, + _businessUserSearch, + _businessReviews, + _businessQrCode, ]; - return toolBodies; } } diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart similarity index 88% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart index e7173d62..cee5eb0c 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_bookmark_alert.dart @@ -10,6 +10,7 @@ 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_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'; @@ -37,14 +38,21 @@ class _MihAddBookmarkAlertState extends State { directoryProvider, ); List favBus = []; + Map> favBusImages = {}; + Future businessLogoUrl; for (var bus in directoryProvider.bookmarkedBusinesses) { await MihBusinessDetailsServices() .getBusinessDetailsByBusinessId(bus.business_id) - .then((business) { + .then((business) async { favBus.add(business!); + businessLogoUrl = MihFileApi.getMinioFileUrl(business.logo_path); + favBusImages[business.business_id] = businessLogoUrl; }); } - directoryProvider.setFavouriteBusinesses(businesses: favBus); + directoryProvider.setFavouriteBusinesses( + businesses: favBus, + businessesImagesUrl: favBusImages, + ); } Future addBookmark( @@ -114,19 +122,21 @@ class _MihAddBookmarkAlertState extends State { fullscreen: false, windowTitle: null, onWindowTapClose: null, + backgroundColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), windowBody: Column( children: [ Icon( Icons.warning_rounded, size: 150, - color: MihColors.getSecondaryColor( + color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), Text( "Bookmark Business", textAlign: TextAlign.center, style: TextStyle( - color: MihColors.getSecondaryColor( + color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), fontSize: 25, fontWeight: FontWeight.bold, @@ -136,13 +146,16 @@ class _MihAddBookmarkAlertState extends State { Text( "Are you sure you want to save ${widget.business.Name} to your Mzansi Directory?", style: TextStyle( - color: MihColors.getSecondaryColor( + color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), fontSize: 18, ), ), const SizedBox(height: 25), Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, spacing: 10, runSpacing: 10, children: [ diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_employee_window.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_employee_window.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_employee_window.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_add_employee_window.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart similarity index 88% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart index df496d72..e2c7f100 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_delete_bookmark_alert.dart @@ -11,6 +11,7 @@ import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.da 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'; @@ -42,14 +43,21 @@ class _MihDeleteBookmarkAlertState extends State { directoryProvider, ); List favBus = []; + Map> favBusImages = {}; + Future businessLogoUrl; for (var bus in directoryProvider.bookmarkedBusinesses) { await MihBusinessDetailsServices() .getBusinessDetailsByBusinessId(bus.business_id) - .then((business) { + .then((business) async { favBus.add(business!); + businessLogoUrl = MihFileApi.getMinioFileUrl(business.logo_path); + favBusImages[business.business_id] = businessLogoUrl; }); } - directoryProvider.setFavouriteBusinesses(businesses: favBus); + directoryProvider.setFavouriteBusinesses( + businesses: favBus, + businessesImagesUrl: favBusImages, + ); } Future deleteBookmark(int idbookmarked_businesses) async { @@ -115,19 +123,21 @@ class _MihDeleteBookmarkAlertState extends State { fullscreen: false, windowTitle: null, onWindowTapClose: null, + backgroundColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), windowBody: Column( children: [ Icon( Icons.warning_rounded, size: 150, - color: MihColors.getSecondaryColor( + color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), Text( "Remove Bookmark", textAlign: TextAlign.center, style: TextStyle( - color: MihColors.getSecondaryColor( + color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), fontSize: 25, fontWeight: FontWeight.bold, @@ -137,13 +147,16 @@ class _MihDeleteBookmarkAlertState extends State { Text( "Are you sure you want to remove ${widget.business.Name} from your Mzansi Directory?", style: TextStyle( - color: MihColors.getSecondaryColor( + color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), fontSize: 18, ), ), const SizedBox(height: 25), Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, spacing: 10, runSpacing: 10, children: [ diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_edit_employee_details_window.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_edit_employee_details_window.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_edit_employee_details_window.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_edit_employee_details_window.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_my_business_user_details.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_my_business_user_details.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_my_business_user_details.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_my_business_user_details.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart similarity index 87% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart index a9cb770b..df8a9795 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart @@ -6,7 +6,6 @@ import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.d import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart'; -import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart'; @@ -15,9 +14,11 @@ import 'package:provider/provider.dart'; class MzansiBusinessProfileView extends StatefulWidget { final String? businessId; + final bool fromMzansiDirectory; const MzansiBusinessProfileView({ super.key, required this.businessId, + required this.fromMzansiDirectory, }); @override @@ -27,6 +28,9 @@ class MzansiBusinessProfileView extends StatefulWidget { class _MzansiBusinessProfileViewState extends State { int _selcetedIndex = 0; + late final MihBusinessDetailsView _businessDetailsView; + late final MihBusinessReviews _businessReviews; + late final MihBusinessQrCode _businessQrCode; Future _fetchBusinessDetails( MzansiDirectoryProvider directoryProvider) async { @@ -43,6 +47,12 @@ class _MzansiBusinessProfileViewState extends State { directoryProvider.setSelectedBusiness(business: biz); } } + _businessDetailsView = MihBusinessDetailsView(); + _businessReviews = + MihBusinessReviews(business: directoryProvider.selectedBusiness!); + _businessQrCode = MihBusinessQrCode( + business: directoryProvider.selectedBusiness!, + ); } @override @@ -88,9 +98,7 @@ class _MzansiBusinessProfileViewState extends State { icon: const Icon(Icons.arrow_back), iconSize: 35, onTap: () { - MzansiProfileProvider profileProvider = - context.read(); - if (profileProvider.user == null) { + if (!widget.fromMzansiDirectory) { context.goNamed( 'mihHome', ); @@ -129,14 +137,11 @@ class _MzansiBusinessProfileViewState extends State { } List getToolBody(MzansiDirectoryProvider directoryProvider) { - List toolBodies = [ - MihBusinessDetailsView(), - MihBusinessReviews(business: directoryProvider.selectedBusiness!), - MihBusinessQrCode( - business: directoryProvider.selectedBusiness!, - ) + return [ + _businessDetailsView, + _businessReviews, + _businessQrCode, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart similarity index 90% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart index 0c4b10c5..852ae249 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart @@ -17,6 +17,14 @@ class MzansiSetUpBusinessProfile extends StatefulWidget { class _MzansiSetUpBusinessProfileState extends State { + late final MihBusinessDetailsSetUp _businessDetailsSetUp; + + @override + void initState() { + _businessDetailsSetUp = MihBusinessDetailsSetUp(); + super.initState(); + } + @override Widget build(BuildContext context) { return MihPackage( @@ -64,9 +72,8 @@ class _MzansiSetUpBusinessProfileState } List getToolBody() { - List toolBodies = [ - MihBusinessDetailsSetUp(), + return [ + _businessDetailsSetUp, ]; - return toolBodies; } } diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart similarity index 89% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart index 825ecc29..d9a26e98 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_business_profile_tile.dart @@ -38,9 +38,7 @@ class _MzansiBusinessProfileTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart similarity index 90% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart index 418c84c1..470bd19b 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart @@ -43,9 +43,7 @@ class _MzansiSetupBusinessProfileTileState MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart similarity index 98% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart index 68b47705..29e12043 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.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_packages/mzansi_profile/business_profile/components/mih_business_info_card.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_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_button.dart'; diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart similarity index 97% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart index 1d4a1adc..ea6a1edf 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart @@ -1,3 +1,4 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:custom_rating_bar/custom_rating_bar.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; @@ -5,7 +6,7 @@ import 'package:mzansi_innovation_hub/main.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_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.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_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; @@ -72,8 +73,8 @@ class _MihBusinessDetailsViewState extends State { asyncSnapshot.hasData) { if (asyncSnapshot.requireData != "") { return MihCircleAvatar( - imageFile: - NetworkImage(asyncSnapshot.requireData), + imageFile: CachedNetworkImageProvider( + asyncSnapshot.requireData), width: profilePictureWidth, editable: false, fileNameController: TextEditingController(), diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart similarity index 99% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart index 0c9dc106..f1d695f8 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart @@ -208,7 +208,8 @@ class _MihBusinessQrCodeState extends State { if (asyncSnapshot.requireData != "" || asyncSnapshot.requireData.isNotEmpty) { return MihCircleAvatar( - imageFile: NetworkImage(asyncSnapshot.requireData), + imageFile: CachedNetworkImageProvider( + asyncSnapshot.requireData), width: profilePictureWidth, editable: false, fileNameController: TextEditingController(), diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart similarity index 81% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart index bab9181f..024fe46b 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart @@ -1,6 +1,5 @@ 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_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_search_bar.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; @@ -44,7 +43,7 @@ class _MihBusinessUserSearchState extends State { Widget displayUserList(MzansiProfileProvider profileProvider) { if (profileProvider.userSearchResults.isNotEmpty) { - return BuildUserList(); + return Expanded(child: BuildUserList()); } if (hasSearchedBefore && userSearch.isNotEmpty) { return Column( @@ -168,37 +167,35 @@ class _MihBusinessUserSearchState extends State { return Consumer( builder: (BuildContext context, MzansiProfileProvider profileProvider, Widget? child) { - return MihSingleChildScroll( - child: Column( - mainAxisSize: MainAxisSize.max, - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: MihSearchBar( - controller: searchController, - hintText: "Search Users", - prefixIcon: Icons.search, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - hintColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onPrefixIconTap: () { - submitUserForm(profileProvider); - }, - onClearIconTap: () { - setState(() { - searchController.clear(); - userSearch = ""; - }); - profileProvider.setUserearchResults(userSearchResults: []); - }, - searchFocusNode: _searchFocusNode, - ), + return Column( + mainAxisSize: MainAxisSize.max, + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: MihSearchBar( + controller: searchController, + hintText: "Search Users", + prefixIcon: Icons.search, + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + hintColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onPrefixIconTap: () { + submitUserForm(profileProvider); + }, + onClearIconTap: () { + setState(() { + searchController.clear(); + userSearch = ""; + }); + profileProvider.setUserearchResults(userSearchResults: []); + }, + searchFocusNode: _searchFocusNode, ), - const SizedBox(height: 10), - displayUserList(profileProvider), - ], - ), + ), + const SizedBox(height: 10), + displayUserList(profileProvider), + ], ); }, ); diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart similarity index 90% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart index 90b7a440..330a4db4 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart @@ -1,5 +1,4 @@ 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_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; @@ -31,7 +30,7 @@ class _MihMyBusinessTeamState extends State { Widget displayEmployeeList(List employeeList) { if (employeeList.isNotEmpty) { - return BuildEmployeeList(); + return Expanded(child: BuildEmployeeList()); } return Center( child: Text( @@ -71,10 +70,10 @@ class _MihMyBusinessTeamState extends State { child: Mihloadingcircle(), ); } - return MihSingleChildScroll( - child: Column(mainAxisSize: MainAxisSize.max, children: [ + return Column( + children: [ displayEmployeeList(mzansiProfileProvider.employeeList!), - ]), + ], ); }, ); diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart rename to mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart rename to mih_ui/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart similarity index 88% rename from Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart rename to mih_ui/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart index 0143133c..f51b7947 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart @@ -21,6 +21,8 @@ class MzansiProfile extends StatefulWidget { class _MzansiProfileState extends State { bool _isLoadingInitialData = true; + late final MihPersonalProfile _personalProfile; + late final MihPersonalSettings _personalSettings; Future _loadInitialData() async { setState(() { @@ -28,9 +30,11 @@ class _MzansiProfileState extends State { }); MzansiProfileProvider mzansiProfileProvider = context.read(); - await MihDataHelperServices().loadUserDataWithBusinessesData( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); + } setState(() { _isLoadingInitialData = false; }); @@ -39,6 +43,8 @@ class _MzansiProfileState extends State { @override void initState() { super.initState(); + _personalProfile = const MihPersonalProfile(); + _personalSettings = const MihPersonalSettings(); _loadInitialData(); } @@ -100,11 +106,10 @@ class _MzansiProfileState extends State { } List getToolBody() { - List toolBodies = []; - toolBodies.add(MihPersonalProfile()); - // toolBodies.add(MihPersonalProfile()); - toolBodies.add(MihPersonalSettings()); - return toolBodies; + return [ + _personalProfile, + _personalSettings, + ]; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart similarity index 88% rename from Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart rename to mih_ui/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart index 526493f9..e58de9e8 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/mzansi_profile_view.dart @@ -16,6 +16,13 @@ class MzansiProfileView extends StatefulWidget { class _MzansiProfileViewState extends State { int _selcetedIndex = 0; + late final MihPersonalProfileView _personalProfileView; + + @override + void initState() { + super.initState(); + _personalProfileView = MihPersonalProfileView(); + } @override Widget build(BuildContext context) { @@ -58,11 +65,9 @@ class _MzansiProfileViewState extends State { } List getToolBody() { - List toolBodies = []; - toolBodies.add( - MihPersonalProfileView(), - ); - return toolBodies; + return [ + _personalProfileView, + ]; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart similarity index 88% rename from Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart rename to mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart index fd976a2c..7fd9045a 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart @@ -35,9 +35,7 @@ class _MzansiProfileTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart similarity index 88% rename from Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart rename to mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart index 7d411207..678b5299 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_setup_profile_tile.dart @@ -34,9 +34,7 @@ class _MzansiSetupProfileTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart new file mode 100644 index 00000000..2c36bea8 --- /dev/null +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart @@ -0,0 +1,301 @@ +import 'package:file_picker/file_picker.dart'; +import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_objects/profile_link.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_package_tool_body.dart'; +// import 'package:mzansi_innovation_hub/mih_package_components/mih_profile_links.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.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_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart'; +import 'package:provider/provider.dart'; + +class MihPersonalProfile extends StatefulWidget { + const MihPersonalProfile({super.key}); + + @override + State createState() => _MihPersonalProfileState(); +} + +class _MihPersonalProfileState extends State { + TextEditingController proPicController = TextEditingController(); + PlatformFile? newSelectedProPic; + + void editProfileWindow(double width) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) => Consumer( + builder: (BuildContext context, + MzansiProfileProvider mzansiProfileProvider, Widget? child) { + return MihEditPersonalProfileWindow(); + }, + ), + ); + } + + List getTempLinks() { + return [ + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Youtube", + web_link: "https://www.youtube.com/@MzansiInnovationHub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Threads", + web_link: "https://www.threads.com/@mzansi.innovation.hub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "TikTok", + web_link: "https://www.tiktok.com/@mzansiinnovationhub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "WhatsApp", + web_link: "https://whatsapp.com/channel/0029Vax3INCIyPtMn8KgeM2F", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Twitch", + web_link: "https://www.twitch.tv/mzansiinnovationhub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Instagram", + web_link: "https://www.instagram.com/mzansi.innovation.hub/", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "X", + web_link: "https://x.com/mzansi_inno_hub", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "LinkedIn", + web_link: "https://www.linkedin.com/in/yasien-meth-172352108/", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Facebook", + web_link: "https://www.facebook.com/profile.php?id=61565345762136", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Reddit", + web_link: "https://www.reddit.com/r/Mzani_Innovation_Hub/", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "Discord", + web_link: "https://discord.gg/ZtTZYd5d", + ), + ProfileLink( + idprofile_links: 1, + app_id: "1234", + business_id: "", + destination: "My App", + web_link: "https://app.mzansi-innovation-hub.co.za/about", + ), + ]; + } + + @override + Widget build(BuildContext context) { + double screenWidth = MediaQuery.of(context).size.width; + return MihPackageToolBody( + borderOn: false, + bodyItem: getBody(screenWidth), + ); + } + + Widget getBody(double width) { + return Consumer( + builder: (BuildContext context, + MzansiProfileProvider mzansiProfileProvider, Widget? child) { + if (mzansiProfileProvider.user == null) { + //Change to new user flow + return Center( + child: Mihloadingcircle(), + ); + } else { + return MihSingleChildScroll( + child: Padding( + padding: + MzansiInnovationHub.of(context)!.theme.screenType == "desktop" + ? EdgeInsets.symmetric(horizontal: width * 0.2) + : EdgeInsets.symmetric(horizontal: width * 0.075), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Stack( + children: [ + MihCircleAvatar( + imageFile: mzansiProfileProvider.userProfilePicture, + width: 150, + editable: false, + fileNameController: proPicController, + userSelectedfile: newSelectedProPic, + frameColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + onChange: (selectedImage) { + setState(() { + newSelectedProPic = selectedImage; + }); + }, + key: ValueKey(mzansiProfileProvider.userProfilePicUrl), + ), + Positioned( + bottom: 5, + right: 5, + child: MihButton( + onPressed: () { + editProfileWindow(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: 10.0), + FittedBox( + child: Text( + mzansiProfileProvider.user!.username.isNotEmpty + ? mzansiProfileProvider.user!.username + : "username", + style: TextStyle( + fontSize: 35, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ), + FittedBox( + child: Text( + mzansiProfileProvider.user!.fname.isNotEmpty + ? "${mzansiProfileProvider.user!.fname} ${mzansiProfileProvider.user!.lname}" + : "Name Surname", + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ), + FittedBox( + child: Text( + mzansiProfileProvider.user!.type == "business" + ? "Business".toUpperCase() + : "Personal".toUpperCase(), + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ), + const SizedBox(height: 10.0), + Center( + child: SizedBox( + width: 700, + child: Text( + mzansiProfileProvider.user!.purpose.isNotEmpty + ? mzansiProfileProvider.user!.purpose + : "", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ), + ), + const SizedBox(height: 15.0), + // Stack( + // children: [ + // MihProfileLinks( + // // links: mzansiProfileProvider.personalLinks, + // links: getTempLinks(), + // buttonSize: 80, + // paddingOn: false, + // ), + // Positioned( + // top: 5, + // left: 5, + // child: MihButton( + // onPressed: () { + // editProfileWindow(width); + // }, + // buttonColor: MihColors.getGreenColor( + // MzansiInnovationHub.of(context)!.theme.mode == + // "Dark"), + // width: 35, + // height: 35, + // child: Icon( + // Icons.link, + // color: MihColors.getPrimaryColor( + // MzansiInnovationHub.of(context)!.theme.mode == + // "Dark"), + // ), + // ), + // ), + // ], + // ), + ], + ), + ), + ); + } + }, + ); + } +} diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart similarity index 97% rename from Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart rename to mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart index 1e9a8171..d95e9ad0 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart @@ -1,3 +1,4 @@ +import 'package:cached_network_image/cached_network_image.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_providers/mzansi_directory_provider.dart'; @@ -69,7 +70,8 @@ class _MihPersonalProfileViewState extends State { asyncSnapshot.hasData) { if (asyncSnapshot.requireData != "") { return MihCircleAvatar( - imageFile: NetworkImage(asyncSnapshot.requireData), + imageFile: CachedNetworkImageProvider( + asyncSnapshot.requireData), width: profilePictureWidth, editable: false, fileNameController: TextEditingController(), diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart rename to mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_settings.dart diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/mih_ui/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart similarity index 99% rename from Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart rename to mih_ui/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index c9d279fe..9a7e84bf 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/mih_ui/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -659,8 +659,6 @@ class _BuildLoyaltyCardListState extends State { MzansiWalletProvider walletProvider, Widget? child) { return GridView.builder( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, padding: EdgeInsets.only( left: getHorizontalPaddingSize(size), right: getHorizontalPaddingSize(size), diff --git a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_add_card_window.dart b/mih_ui/lib/mih_packages/mzansi_wallet/components/mih_add_card_window.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_wallet/components/mih_add_card_window.dart rename to mih_ui/lib/mih_packages/mzansi_wallet/components/mih_add_card_window.dart diff --git a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_barcode_scanner.dart b/mih_ui/lib/mih_packages/mzansi_wallet/components/mih_barcode_scanner.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_wallet/components/mih_barcode_scanner.dart rename to mih_ui/lib/mih_packages/mzansi_wallet/components/mih_barcode_scanner.dart diff --git a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart b/mih_ui/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart similarity index 100% rename from Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart rename to mih_ui/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart diff --git a/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart b/mih_ui/lib/mih_packages/mzansi_wallet/mih_wallet.dart similarity index 92% rename from Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart rename to mih_ui/lib/mih_packages/mzansi_wallet/mih_wallet.dart index 5f1fe247..88eebbdb 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/mih_wallet.dart +++ b/mih_ui/lib/mih_packages/mzansi_wallet/mih_wallet.dart @@ -23,6 +23,8 @@ class MihWallet extends StatefulWidget { class _MihWalletState extends State { bool _isLoadingInitialData = true; + late final MihCards _cards; + late final MihCardFavourites _cardFavourites; Future _loadInitialData() async { setState(() { @@ -31,9 +33,11 @@ class _MihWalletState extends State { MzansiProfileProvider mzansiProfileProvider = context.read(); MzansiWalletProvider walletProvider = context.read(); - await MihDataHelperServices().loadUserDataOnly( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + } await setLoyaltyCards(mzansiProfileProvider, walletProvider); await setFavouritesCards(mzansiProfileProvider, walletProvider); setState(() { @@ -60,6 +64,8 @@ class _MihWalletState extends State { @override void initState() { super.initState(); + _cards = MihCards(); + _cardFavourites = MihCardFavourites(); _loadInitialData(); } @@ -117,11 +123,10 @@ class _MihWalletState extends State { } List getToolBody() { - List toolBodies = [ - MihCards(), - MihCardFavourites(), + return [ + _cards, + _cardFavourites, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart b/mih_ui/lib/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart similarity index 89% rename from Frontend/lib/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart rename to mih_ui/lib/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart index df42f0bb..74a3951d 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart +++ b/mih_ui/lib/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart @@ -39,9 +39,7 @@ class _MihWalletTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart b/mih_ui/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart similarity index 72% rename from Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart rename to mih_ui/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart index 726c445a..9e5a0f62 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart +++ b/mih_ui/lib/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.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_objects/loyalty_card.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart'; @@ -40,21 +39,11 @@ class _MihCardFavouritesState extends State { } Widget getBody() { - return Stack( - children: [ - MihSingleChildScroll( - child: Column( - children: [ - BuildLoyaltyCardList( - cardList: listOfCards, - navIndex: 0, - favouritesMode: true, - searchText: TextEditingController(), - ), - ], - ), - ), - ], + return BuildLoyaltyCardList( + cardList: listOfCards, + navIndex: 0, + favouritesMode: true, + searchText: TextEditingController(), ); } } diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart b/mih_ui/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart similarity index 81% rename from Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart rename to mih_ui/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart index 98f5b828..3fa5eae6 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart +++ b/mih_ui/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart @@ -3,7 +3,6 @@ import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_providers/mzansi_wallet_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_add_card_window.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_floating_menu.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_search_bar.dart'; @@ -111,30 +110,28 @@ class _MihCardsState extends State { } return Stack( children: [ - MihSingleChildScroll( - child: Column( - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: MihSearchBar( - controller: cardSearchController, - hintText: "Search Cards", - // prefixIcon: Icons.search, - prefixIcon: Icons.search, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - hintColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - onPrefixIconTap: () { - // print("Search Icon Pressed: ${cardSearchController.text}"); - }, - searchFocusNode: searchFocusNode, - ), + Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: MihSearchBar( + controller: cardSearchController, + hintText: "Search Cards", + // prefixIcon: Icons.search, + prefixIcon: Icons.search, + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + hintColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onPrefixIconTap: () { + // print("Search Icon Pressed: ${cardSearchController.text}"); + }, + searchFocusNode: searchFocusNode, ), - const SizedBox(height: 10), - ValueListenableBuilder>( + ), + const SizedBox(height: 10), + Expanded( + child: ValueListenableBuilder>( valueListenable: searchShopName, builder: (context, filteredCards, child) { return BuildLoyaltyCardList( @@ -145,8 +142,8 @@ class _MihCardsState extends State { ); }, ), - ], - ), + ), + ], ), Positioned( right: 10, diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart b/mih_ui/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart similarity index 99% rename from Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart index fbaf353a..10c97f4d 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart @@ -558,8 +558,6 @@ class _BuildPatientsListState extends State { builder: (BuildContext context, MzansiProfileProvider profileProvider, PatientManagerProvider patientManagerProvider, Widget? child) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, index) { return Divider( color: MihColors.getSecondaryColor( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart b/mih_ui/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart similarity index 99% rename from Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart index 692f13bd..14760a10 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart @@ -351,6 +351,9 @@ class _BuildPatientsListState extends State { const SizedBox(height: 30.0), Center( child: Wrap( + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.center, runSpacing: 10, spacing: 10, children: [ @@ -522,8 +525,6 @@ class _BuildPatientsListState extends State { builder: (BuildContext context, MzansiProfileProvider profileProvider, PatientManagerProvider patientManagerProvider, Widget? child) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, index) { return Divider( color: MihColors.getSecondaryColor( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_waiting_room_list.dart b/mih_ui/lib/mih_packages/patient_manager/pat_manager/list_builders/build_waiting_room_list.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_manager/list_builders/build_waiting_room_list.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_manager/list_builders/build_waiting_room_list.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart b/mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart similarity index 90% rename from Frontend/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart index d0aa5f42..5179a99f 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tiles/pat_manager_tile.dart @@ -41,9 +41,7 @@ class _PatManagerTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart b/mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart similarity index 80% rename from Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart index 0497e3b9..1a1e3a50 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart @@ -3,7 +3,6 @@ import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.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_search_bar.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; @@ -34,38 +33,36 @@ class _MihPatientSearchState extends State { return Consumer( builder: (BuildContext context, PatientManagerProvider patientManagerProvider, Widget? child) { - return MihSingleChildScroll( - child: Column(mainAxisSize: MainAxisSize.max, children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: MihSearchBar( - controller: _mihPatientSearchController, - hintText: "Search Patient ID/ Aid No.", - prefixIcon: Icons.search, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - hintColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onPrefixIconTap: () { - submitPatientSearch(patientManagerProvider); - }, - onClearIconTap: () { - setState(() { - _mihPatientSearchController.clear(); - _mihPatientSearchString = ""; - }); - patientManagerProvider - .setPatientSearchResults(patientSearchResults: []); - }, - searchFocusNode: _searchFocusNode, - ), + return Column(mainAxisSize: MainAxisSize.max, children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: MihSearchBar( + controller: _mihPatientSearchController, + hintText: "Search Patient ID/ Aid No.", + prefixIcon: Icons.search, + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + hintColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onPrefixIconTap: () { + submitPatientSearch(patientManagerProvider); + }, + onClearIconTap: () { + setState(() { + _mihPatientSearchController.clear(); + _mihPatientSearchString = ""; + }); + patientManagerProvider + .setPatientSearchResults(patientSearchResults: []); + }, + searchFocusNode: _searchFocusNode, ), - //spacer - const SizedBox(height: 10), + ), + //spacer + const SizedBox(height: 10), - displayPatientList(patientManagerProvider, _mihPatientSearchString), - ]), - ); + displayPatientList(patientManagerProvider, _mihPatientSearchString), + ]); }, ); } @@ -86,7 +83,9 @@ class _MihPatientSearchState extends State { Widget displayPatientList( PatientManagerProvider patientManagerProvider, String searchString) { if (patientManagerProvider.patientSearchResults.isNotEmpty) { - return BuildMihPatientSearchList(); + return Expanded( + child: BuildMihPatientSearchList(), + ); } else if (patientManagerProvider.patientSearchResults.isEmpty && searchString != "") { return Column( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart b/mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart similarity index 80% rename from Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart index f35c2fa7..e1cbd787 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart @@ -4,7 +4,6 @@ import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.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_search_bar.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; @@ -33,46 +32,44 @@ class _MyPatientListState extends State { Widget myPatientListTool(MzansiProfileProvider profileProvider, PatientManagerProvider patientManagerProvider, double width) { - return MihSingleChildScroll( - child: Column(mainAxisSize: MainAxisSize.max, children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: MihSearchBar( - controller: _myPatientSearchController, - hintText: "Search Patient ID", - prefixIcon: Icons.search, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - hintColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onPrefixIconTap: () { - setState(() async { - _myPatientIdSearchString = _myPatientSearchController.text; - await MihPatientServices().getPatientAccessListOfBusiness( - patientManagerProvider, - profileProvider.business!.business_id); - }); - }, - onClearIconTap: () { - setState(() { - _myPatientSearchController.clear(); - _myPatientIdSearchString = ""; - }); - getMyPatientList(profileProvider, patientManagerProvider); - }, - searchFocusNode: _searchFocusNode, - ), + return Column(mainAxisSize: MainAxisSize.max, children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: MihSearchBar( + controller: _myPatientSearchController, + hintText: "Search Patient ID", + prefixIcon: Icons.search, + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + hintColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onPrefixIconTap: () { + setState(() async { + _myPatientIdSearchString = _myPatientSearchController.text; + await MihPatientServices().getPatientAccessListOfBusiness( + patientManagerProvider, + profileProvider.business!.business_id); + }); + }, + onClearIconTap: () { + setState(() { + _myPatientSearchController.clear(); + _myPatientIdSearchString = ""; + }); + getMyPatientList(profileProvider, patientManagerProvider); + }, + searchFocusNode: _searchFocusNode, ), - //spacer - const SizedBox(height: 10), - displayMyPatientList(patientManagerProvider), - ]), - ); + ), + //spacer + const SizedBox(height: 10), + displayMyPatientList(patientManagerProvider), + ]); } Widget displayMyPatientList(PatientManagerProvider patientManagerProvider) { if (patientManagerProvider.myPaitentList!.isNotEmpty) { - return BuildMyPatientListList(); + return Expanded(child: BuildMyPatientListList()); } if (hasSearchedBefore && _myPatientIdSearchString.isNotEmpty) { return Column( @@ -199,7 +196,6 @@ class _MyPatientListState extends State { @override void dispose() { - // TODO: implement dispose super.dispose(); _myPatientSearchController.dispose(); _searchFocusNode.dispose(); diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart b/mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart similarity index 95% rename from Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart index dfcae152..d447f76c 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart @@ -10,7 +10,6 @@ import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_calendar.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_date_field.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; @@ -71,29 +70,22 @@ class _WaitingRoomState extends State { } return Stack( children: [ - MihSingleChildScroll( - child: Column( - children: [ - MIHCalendar( - calendarWidth: 500, - rowHeight: 35, - setDate: (value) { - mihCalendarProvider.setSelectedDay(value); - setState(() { - selectedAppointmentDateController.text = value; - }); - }), - // Divider( - // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - // ), - Row( - mainAxisSize: MainAxisSize.max, - children: [ - displayAppointmentList(mihCalendarProvider), - ], - ) - ], - ), + Column( + children: [ + MIHCalendar( + calendarWidth: 500, + rowHeight: 35, + setDate: (value) { + mihCalendarProvider.setSelectedDay(value); + setState(() { + selectedAppointmentDateController.text = value; + }); + }), + // Divider( + // color: MihColors.getSecondaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + // ), + displayAppointmentList(mihCalendarProvider) + ], ), Positioned( right: 10, @@ -152,7 +144,7 @@ class _WaitingRoomState extends State { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0), child: Column( - mainAxisAlignment: MainAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox(height: 50), diff --git a/Frontend/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart b/mih_ui/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart similarity index 89% rename from Frontend/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart index 0a6091d6..0ac192b0 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_manager/pat_manager.dart @@ -26,6 +26,9 @@ class PatManager extends StatefulWidget { class _PatManagerState extends State { bool _isLoadingInitialData = true; + late final WaitingRoom _waitingRoom; + late final MyPatientList _myPatientList; + late final MihPatientSearch _mihPatientSearch; Future _loadInitialData() async { setState(() { @@ -37,9 +40,11 @@ class _PatManagerState extends State { context.read(); MihCalendarProvider mihCalendarProvider = context.read(); - await MihDataHelperServices().loadUserDataWithBusinessesData( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataWithBusinessesData( + mzansiProfileProvider, + ); + } patientManagerProvider.setPersonalMode(false); if (mzansiProfileProvider.business != null) { await MihMzansiCalendarApis.getBusinessAppointments( @@ -59,7 +64,12 @@ class _PatManagerState extends State { @override void initState() { super.initState(); - _loadInitialData(); + _waitingRoom = WaitingRoom(); + _myPatientList = MyPatientList(); + _mihPatientSearch = MihPatientSearch(); + WidgetsBinding.instance.addPostFrameCallback((_) { + _loadInitialData(); + }); } @override @@ -131,12 +141,11 @@ class _PatManagerState extends State { } List getToolBody() { - List toolBodies = [ - WaitingRoom(), - MyPatientList(), - MihPatientSearch(), + return [ + _waitingRoom, + _myPatientList, + _mihPatientSearch, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/claim_statement_window.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/components/claim_statement_window.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/components/claim_statement_window.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/components/claim_statement_window.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/icd10_search_window.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/components/icd10_search_window.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/components/icd10_search_window.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/components/icd10_search_window.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/medicine_search.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/components/medicine_search.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/components/medicine_search.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/components/medicine_search.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/mih_edit_patient_details_window.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/components/mih_edit_patient_details_window.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/components/mih_edit_patient_details_window.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/components/mih_edit_patient_details_window.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/components/prescip_input.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/components/prescip_input.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/components/prescip_input.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/components/prescip_input.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart similarity index 99% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart index 026900ca..115c6963 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_claim_statement_files_list.dart @@ -266,8 +266,6 @@ class _BuildClaimStatementFileListState PatientManagerProvider patientManagerProvider, Widget? child) { if (patientManagerProvider.patientClaimsDocuments!.isNotEmpty) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, int index) { return Divider( color: MihColors.getSecondaryColor( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_file_view.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart similarity index 99% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart index 20abecb5..b491aa73 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_files_list.dart @@ -299,8 +299,6 @@ class _BuildFilesListState extends State { PatientManagerProvider patientManagerProvider, Widget? child) { if (patientManagerProvider.patientDocuments!.isNotEmpty) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, int index) { return Divider( color: MihColors.getSecondaryColor( @@ -311,7 +309,8 @@ class _BuildFilesListState extends State { itemBuilder: (context, index) { String fileExtension = patientManagerProvider .patientDocuments![index].file_name - .split(".")[1] + .split(".") + .last .toLowerCase(); KenLogger.success(fileExtension); return ListTile( @@ -345,7 +344,6 @@ class _BuildFilesListState extends State { .patientDocuments![index].file_path); fileViewerProvider.setFileLink(urlHere); }); - viewFilePopUp( patientManagerProvider, patientManagerProvider.patientDocuments![index].file_name, diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_icd10_code_list.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_icd10_code_list.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_icd10_code_list.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_icd10_code_list.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_med_list.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_med_list.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_med_list.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_med_list.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart similarity index 99% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart index 6bbc2b10..93cefa2d 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/list_builders/build_notes_list.dart @@ -222,8 +222,6 @@ class _BuildNotesListState extends State { PatientManagerProvider patientManagerProvider, Widget? child) { if (patientManagerProvider.consultationNotes!.isNotEmpty) { return ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, int index) { return Divider( color: MihColors.getSecondaryColor( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart similarity index 79% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart index c22b49f0..a7bc289a 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tiles/patient_profile_tile.dart @@ -2,17 +2,16 @@ import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tile.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; +import 'package:provider/provider.dart'; class PatientProfileTile extends StatefulWidget { - final PatientViewArguments arguments; final double packageSize; const PatientProfileTile({ super.key, - required this.arguments, required this.packageSize, }); @@ -26,6 +25,9 @@ class _PatientProfileTileState extends State { return MihPackageTile( authenticateUser: true, onTap: () async { + PatientManagerProvider patManProvider = + context.read(); + patManProvider.setPersonalMode(true); context.goNamed("patientProfile"); }, appName: "Patient Profile", @@ -36,9 +38,7 @@ class _PatientProfileTileState extends State { // size: widget.packageSize, ), iconSize: widget.packageSize, - primaryColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - secondaryColor: MihColors.getPrimaryColor( + textColor: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); } diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart similarity index 95% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart index e28a3bae..c76e6bd7 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_claim_or_statement.dart @@ -48,12 +48,7 @@ class _PatientClaimOrStatementState extends State { PatientManagerProvider patientManagerProvider, Widget? child) { return Stack( children: [ - Column( - children: [ - //const Placeholder(), - BuildClaimStatementFileList(), - ], - ), + BuildClaimStatementFileList(), Visibility( visible: !patientManagerProvider.personalMode, child: Positioned( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart similarity index 98% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart index 02858370..7e784ef1 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_consultation.dart @@ -8,7 +8,6 @@ import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.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_form.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; @@ -290,10 +289,7 @@ class _PatientConsultationState extends State { PatientManagerProvider patientManagerProvider, Widget? child) { return Stack( children: [ - MihSingleChildScroll( - child: Column(children: [ - BuildNotesList(), - ])), + BuildNotesList(), Visibility( visible: !patientManagerProvider.personalMode, child: Positioned( diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart similarity index 98% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart index 9354feb0..6f65e00c 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart @@ -8,7 +8,6 @@ import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.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_date_field.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_form.dart'; @@ -565,11 +564,7 @@ class _PatientDocumentsState extends State { PatientManagerProvider patientManagerProvider, Widget? child) { return Stack( children: [ - MihSingleChildScroll( - child: Column(children: [ - BuildFilesList(), - ]), - ), + BuildFilesList(), getMenu(profileProvider, patientManagerProvider, width), ], ); diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart similarity index 91% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart index c73f779b..1579db92 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart @@ -6,6 +6,7 @@ import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window. import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_floating_menu.dart'; import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/mih_providers/patient_manager_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; @@ -304,29 +305,31 @@ class _PatientInfoState extends State { initialiseControllers(patientManagerProvider); return Stack( children: [ - Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - MihCircleAvatar( - imageFile: - patientManagerProvider.selectedPatientProfilePicture, - width: 160, - editable: false, - fileNameController: null, - userSelectedfile: null, - frameColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - backgroundColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onChange: () {}, - ), - const SizedBox(height: 10), - buildPatientInfoCard(patientManagerProvider), - const SizedBox(height: 10), - if (patientManagerProvider.selectedPatient!.medical_aid == - "Yes") - buildMedAidInfoCard(patientManagerProvider), - ], + MihSingleChildScroll( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + MihCircleAvatar( + imageFile: + patientManagerProvider.selectedPatientProfilePicture, + width: 160, + editable: false, + fileNameController: null, + userSelectedfile: null, + frameColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onChange: () {}, + ), + const SizedBox(height: 10), + buildPatientInfoCard(patientManagerProvider), + const SizedBox(height: 10), + if (patientManagerProvider.selectedPatient!.medical_aid == + "Yes") + buildMedAidInfoCard(patientManagerProvider), + ], + ), ), Positioned( right: 5, diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_setup_form.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_setup_form.dart similarity index 100% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_setup_form.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_setup_form.dart diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart similarity index 75% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart index 8016a307..2bcf7265 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/patient_profile.dart @@ -1,4 +1,5 @@ import 'package:go_router/go_router.dart'; +import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; @@ -12,7 +13,9 @@ import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_profile/p import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_claim_statement_generation_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_user_services.dart'; import 'package:provider/provider.dart'; class PatientProfile extends StatefulWidget { @@ -26,6 +29,10 @@ class PatientProfile extends StatefulWidget { class _PatientProfileState extends State { bool _isLoadingInitialData = true; + late final PatientInfo _patientInfo; + late final PatientConsultation _patienConsultation; + late final PatientDocuments _patientDocuments; + late final PatientClaimOrStatement _patientClaimOrStatement; Future _loadInitialData() async { setState(() { @@ -35,19 +42,35 @@ class _PatientProfileState extends State { context.read(); PatientManagerProvider patientManagerProvider = context.read(); - await MihDataHelperServices().loadUserDataOnly( - mzansiProfileProvider, - ); + if (mzansiProfileProvider.user == null) { + await MihDataHelperServices().loadUserDataOnly( + mzansiProfileProvider, + ); + } if (patientManagerProvider.selectedPatient == null) { await MihPatientServices().getPatientDetails( mzansiProfileProvider.user!.app_id, patientManagerProvider); } + if (patientManagerProvider.selectedPatient!.app_id != + mzansiProfileProvider.user!.app_id && + patientManagerProvider.personalMode) { + await MihPatientServices().getPatientDetails( + mzansiProfileProvider.user!.app_id, patientManagerProvider); + } if (patientManagerProvider.selectedPatient == null) { context.goNamed("patientProfileSetup"); return; } - patientManagerProvider.setSelectedPatientProfilePicUrl( - mzansiProfileProvider.userProfilePicUrl!); + if (patientManagerProvider.personalMode) { + patientManagerProvider.setSelectedPatientProfilePicUrl( + mzansiProfileProvider.userProfilePicUrl!); + } else { + AppUser? patientUserDetails = await MihUserServices().getMIHUserDetails( + patientManagerProvider.selectedPatient!.app_id, context); + String patientProPicUrl = + await MihFileApi.getMinioFileUrl(patientUserDetails!.pro_pic_path); + patientManagerProvider.setSelectedPatientProfilePicUrl(patientProPicUrl); + } patientManagerProvider.setPersonalMode(mzansiProfileProvider.personalHome); if (patientManagerProvider.selectedPatient != null) { await MihPatientServices() @@ -64,6 +87,10 @@ class _PatientProfileState extends State { @override void initState() { super.initState(); + _patientInfo = PatientInfo(); + _patienConsultation = PatientConsultation(); + _patientDocuments = PatientDocuments(); + _patientClaimOrStatement = PatientClaimOrStatement(); _loadInitialData(); } @@ -140,13 +167,12 @@ class _PatientProfileState extends State { } List getToolBody() { - List toolBodies = [ - PatientInfo(), - PatientConsultation(), - PatientDocuments(), - PatientClaimOrStatement(), + return [ + _patientInfo, + _patienConsultation, + _patientDocuments, + _patientClaimOrStatement, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart similarity index 91% rename from Frontend/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart rename to mih_ui/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart index cc968072..bafd272e 100644 --- a/Frontend/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/patient_set_up.dart @@ -15,6 +15,14 @@ class PatientSetUp extends StatefulWidget { } class _PatientSetUpState extends State { + late final PatientSetupForm _patientSetupForm; + + @override + void initState() { + super.initState(); + _patientSetupForm = PatientSetupForm(); + } + @override Widget build(BuildContext context) { return MihPackage( @@ -57,10 +65,9 @@ class _PatientSetUpState extends State { } List getToolBody() { - List toolBodies = [ - PatientSetupForm(), + return [ + _patientSetupForm, ]; - return toolBodies; } List getToolTitle() { diff --git a/Frontend/lib/mih_providers/about_mih_provider.dart b/mih_ui/lib/mih_providers/about_mih_provider.dart similarity index 100% rename from Frontend/lib/mih_providers/about_mih_provider.dart rename to mih_ui/lib/mih_providers/about_mih_provider.dart diff --git a/Frontend/lib/mih_providers/mih_access_controlls_provider.dart b/mih_ui/lib/mih_providers/mih_access_controlls_provider.dart similarity index 100% rename from Frontend/lib/mih_providers/mih_access_controlls_provider.dart rename to mih_ui/lib/mih_providers/mih_access_controlls_provider.dart diff --git a/Frontend/lib/mih_providers/mih_authentication_provider.dart b/mih_ui/lib/mih_providers/mih_authentication_provider.dart similarity index 100% rename from Frontend/lib/mih_providers/mih_authentication_provider.dart rename to mih_ui/lib/mih_providers/mih_authentication_provider.dart diff --git a/Frontend/lib/mih_providers/mih_banner_ad_provider.dart b/mih_ui/lib/mih_providers/mih_banner_ad_provider.dart similarity index 100% rename from Frontend/lib/mih_providers/mih_banner_ad_provider.dart rename to mih_ui/lib/mih_providers/mih_banner_ad_provider.dart diff --git a/Frontend/lib/mih_providers/mih_calculator_provider.dart b/mih_ui/lib/mih_providers/mih_calculator_provider.dart similarity index 100% rename from Frontend/lib/mih_providers/mih_calculator_provider.dart rename to mih_ui/lib/mih_providers/mih_calculator_provider.dart diff --git a/Frontend/lib/mih_providers/mih_calendar_provider.dart b/mih_ui/lib/mih_providers/mih_calendar_provider.dart similarity index 100% rename from Frontend/lib/mih_providers/mih_calendar_provider.dart rename to mih_ui/lib/mih_providers/mih_calendar_provider.dart diff --git a/Frontend/lib/mih_providers/mih_file_viewer_provider.dart b/mih_ui/lib/mih_providers/mih_file_viewer_provider.dart similarity index 100% rename from Frontend/lib/mih_providers/mih_file_viewer_provider.dart rename to mih_ui/lib/mih_providers/mih_file_viewer_provider.dart diff --git a/Frontend/lib/mih_providers/mih_mine_sweeper_provider.dart b/mih_ui/lib/mih_providers/mih_mine_sweeper_provider.dart similarity index 89% rename from Frontend/lib/mih_providers/mih_mine_sweeper_provider.dart rename to mih_ui/lib/mih_providers/mih_mine_sweeper_provider.dart index dd1e9bf8..2a942979 100644 --- a/Frontend/lib/mih_providers/mih_mine_sweeper_provider.dart +++ b/mih_ui/lib/mih_providers/mih_mine_sweeper_provider.dart @@ -9,7 +9,7 @@ class MihMineSweeperProvider extends ChangeNotifier { int totalMines; List? leaderboard; List? myScoreboard; - List?> leaderboardUserPictures = []; + List> leaderboardUserPicturesUrl = []; MihMineSweeperProvider({ this.difficulty = "Easy", @@ -74,8 +74,8 @@ class MihMineSweeperProvider extends ChangeNotifier { } void setLeaderboardUserPictures( - {required List?> leaderboardUserPictures}) { - this.leaderboardUserPictures = leaderboardUserPictures; + {required List> leaderboardUserPicturesUrl}) { + this.leaderboardUserPicturesUrl = leaderboardUserPicturesUrl; notifyListeners(); } } diff --git a/mih_ui/lib/mih_providers/mzansi_ai_provider.dart b/mih_ui/lib/mih_providers/mzansi_ai_provider.dart new file mode 100644 index 00000000..be9c7f2b --- /dev/null +++ b/mih_ui/lib/mih_providers/mzansi_ai_provider.dart @@ -0,0 +1,384 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_ai_toolkit/flutter_ai_toolkit.dart'; +import 'package:flutter_markdown_plus/flutter_markdown_plus.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_providers/ollama_provider.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; + +class MzansiAiProvider extends ChangeNotifier { + bool ttsOn; + int toolIndex; + String? startUpQuestion; + late OllamaProvider ollamaProvider; + + MzansiAiProvider({ + this.toolIndex = 0, + this.ttsOn = false, + }) { + ollamaProvider = OllamaProvider( + baseUrl: "${AppEnviroment.baseAiUrl}/api", + model: AppEnviroment.getEnv() == "Prod" + ? 'qwen3-vl:8b' + : "qwen3-vl:2b-instruct", + think: false, + systemPrompt: "---INSTRUCTION START---\n" + "You are Mzansi AI, a helpful and friendly AI assistant running on the 'MIH App'.\n" + "The MIH App was created by 'Mzansi Innovation Hub', a South African-based startup company." + "Your primary purpose is to assist users by answering general questions and helping with creative writing tasks or any other task a user might have for you.\n" + "Maintain a casual and friendly tone, but always remain professional.\n" + "Strive for a balance between being empathetic and delivering factual information accurately.\n" + "You may use lighthearted or playful language if the context is appropriate and enhances the user experience.\n" + "You operate within the knowledge domain of the 'MIH App'.\n" + "Here is a description of the MIH App and its features:\n" + "MIH App Description: MIH is the first super app of Mzansi, designed to streamline both personal and business life. It's an all-in-one platform for managing professional profiles, teams, appointments, and quick calculations. \n" + "Key Features:\n" + "- Mzansi Profile: Central hub for managing personal and business information, including business team details." + "- Mzansi Wallet: Digitally store loyalty cards.\n" + "- Patient Manager (For Medical Practices): Seamless patient appointment scheduling and data management.\n" + "- Mzansi AI: Your friendly AI assistant for quick answers and support (that's you!).\n" + "- Mzansi Directory: A place to search and find out more about the people and businesses across Mzansi.\n" + "- Calendar: Integrated calendar for managing personal and business appointments.\n" + "- Calculator: Simple calculator with tip and forex calculation functionality.\n" + "- MIH Minesweeper: The first game from MIH! It's the classic brain-teaser ready to entertain you no matter where you are.\n" + "- MIH Access: Manage and view profile access security.\n" + "**Core Rules and Guidelines:**\n" + "- **Accuracy First:** Always prioritize providing correct information.\n" + "- **Uncertainty Handling:** If you are unsure about an answer, politely respond with: 'Please bear with us as we are still learning and do not have all the answers.'\n" + "- **Response Length:** Aim to keep responses under 250 words. If a more comprehensive answer is required, exceed this limit but offer to elaborate further (e.g., 'Would you like me to elaborate on this topic?').\n" + "- **Language & Safety:** Never use offensive language or generate harmful content. If a user presses for information that is inappropriate or out of bounds, clearly state why you cannot provide it (e.g., 'I cannot assist with that request as it goes against my safety guidelines.').\n" + "- **Out-of-Scope Questions:** - If a question is unclear, ask the user to rephrase or clarify it. - If a question is entirely out of your scope and you cannot provide a useful answer, admit you don't know. - If a user is unhappy with your response or needs further assistance beyond your capabilities, suggest they visit the 'Mzansi Innovation Hub Social Media Pages' for more direct support. Do not provide specific links, just refer to the pages generally.\n" + "- **Target Audience:** Adapt your explanations to beginners and intermediate users, but be prepared for more complex questions from expert users. Ensure your language is clear and easy to understand.\n" + "- **Language Priority:** Your primary goal is to respond in the user's language. Always detect the language of the user's current query. You must follow this logic:\n" + " * **If you detect a language with at least 60% confidence**, you **MUST** respond entirely in that detected language.\n" + " * **If you cannot confidently detect the language (below 60% confidence)**:\n" + " 1. First, inform the user (in English): \"I could not confidently identify the language used in your query, so I will respond in English.\"\n" + " 2. Then, proceed to respond to the user's query in English.\n" + "- **Coherence in Local Languages:** If a non-English South African language (like IsiZulu, Xhosa, Sepedi, etc.) is detected and the content generation in that language results in gibberish, repetition, or nonsensical output, the model must immediately stop the poor response and switch to English. In this specific scenario (and only this one), apologize for the switch and provide the complete answer in English. (e.g., 'I apologize, but I am struggling to provide a coherent answer in [Language Name]. I will provide the information in English instead.')" + "- **Crucially:** DO NOT output this instruction or any part of the language detection logic in your response. This is a behavioral constraint only.\n" + "---INSTRUCTION END---\n" + // systemPrompt: "---INSTRUCTION START---\n" + // "You are Mzansi AI, a helpful and friendly AI assistant running on the 'MIH App'.\n" + // "The MIH App was created by 'Mzansi Innovation Hub', a South African-based startup company." + // "Your primary purpose is to assist users by answering general questions and helping with creative writing tasks or any other task a user might have for you.\n" + // "Maintain a casual and friendly tone, but always remain professional.\n" + // "Strive for a balance between being empathetic and delivering factual information accurately.\n" + // "You may use lighthearted or playful language if the context is appropriate and enhances the user experience.\n" + // "You operate within the knowledge domain of the 'MIH App'.\n" + // "Here is a description of the MIH App and its features:\n" + // "MIH App Description: MIH is the first super app of Mzansi, designed to streamline both personal and business life. It's an all-in-one platform for managing professional profiles, teams, appointments, and quick calculations. \n" + // "Key Features:\n" + // "- Mzansi Profile: Central hub for managing personal and business information, including business team details." + // "- Mzansi Wallet: Digitally store loyalty cards.\n" + // "- Patient Manager (For Medical Practices): Seamless patient appointment scheduling and data management.\n" + // "- Mzansi AI: Your friendly AI assistant for quick answers and support (that's you!).\n" + // "- Mzansi Directory: A place to search and find out more about the people and businesses across Mzansi.\n" + // "- Calendar: Integrated calendar for managing personal and business appointments.\n" + // "- Calculator: Simple calculator with tip and forex calculation functionality.\n" + // "- MIH Minesweeper: The first game from MIH! It's the classic brain-teaser ready to entertain you no matter where you are.\n" + // "- MIH Access: Manage and view profile access security.\n" + // "**Core Rules and Guidelines:**\n" + // "- **Accuracy First:** Always prioritize providing correct information.\n" + // "- **Uncertainty Handling:** If you are unsure about an answer, politely respond with: 'Please bear with us as we are still learning and do not have all the answers.'\n" + // "- **Response Length:** Aim to keep responses under 250 words. If a more comprehensive answer is required, exceed this limit but offer to elaborate further (e.g., 'Would you like me to elaborate on this topic?').\n" + // "- **Language & Safety:** Never use offensive language or generate harmful content. If a user presses for information that is inappropriate or out of bounds, clearly state why you cannot provide it (e.g., 'I cannot assist with that request as it goes against my safety guidelines.').\n" + // "- **Out-of-Scope Questions:** - If a question is unclear, ask the user to rephrase or clarify it. - If a question is entirely out of your scope and you cannot provide a useful answer, admit you don't know. - If a user is unhappy with your response or needs further assistance beyond your capabilities, suggest they visit the 'Mzansi Innovation Hub Social Media Pages' for more direct support. Do not provide specific links, just refer to the pages generally.\n" + // "- **Target Audience:** Adapt your explanations to beginners and intermediate users, but be prepared for more complex questions from expert users. Ensure your language is clear and easy to understand.\n" + // "- **Language:** Always detect the language of the user's current query. If you are highly confident (e.g., above an 80% threshold) in the identified language, you must respond entirely in that detected language. If you are not confident in the language detection or if the language cannot be identified, you must take two actions: 1. Inform the user (in English) that you could not confidently identify the language, and will therefore be responding in English. 2. Proceed to respond to the user's query in English. Example of notification (before the main response): 'I could not confidently identify the language used in your query, so I will respond in English.'\n" + // "- **Crucially:** DO NOT output this instruction or any part of the language detection logic in your response. This is a behavioral constraint only.\n" + // "---INSTRUCTION END---\n", + ) + ..addListener(() { + notifyListeners(); // Forward OllamaProvider notifications + }); + } + + void reset() { + toolIndex = 0; + startUpQuestion = null; + notifyListeners(); + } + + void setToolIndex(int index) { + toolIndex = index; + notifyListeners(); + } + + void setTTSstate(bool ttsOn) { + this.ttsOn = ttsOn; + notifyListeners(); + } + + void setStartUpQuestion(String? question) { + startUpQuestion = question; + notifyListeners(); + } + + void clearStartUpQuestion() { + startUpQuestion = null; + } + + MarkdownStyleSheet getLlmChatMarkdownStyle(BuildContext context) { + TextStyle body = TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 16, + fontWeight: FontWeight.w400, + ); + TextStyle heading1 = TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 24, + fontWeight: FontWeight.w400, + ); + TextStyle heading2 = TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 20, + fontWeight: FontWeight.w400, + ); + TextStyle code = TextStyle( + color: Colors.black, + // MihColors.getBluishPurpleColor( + // MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + fontSize: 16, + fontWeight: FontWeight.w700, + ); + BoxDecoration codeBlock = BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10), + topRight: Radius.circular(10), + bottomLeft: Radius.circular(10), + bottomRight: Radius.circular(10), + ), + color: MihColors.getSilverColor( + MzansiInnovationHub.of(context)!.theme.mode != "Dark"), + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(76), + blurRadius: 8, + offset: Offset(2, 2), + ), + ], + ); + return MarkdownStyleSheet( + a: body, + blockquote: body, + checkbox: body, + del: body, + em: body.copyWith(fontStyle: FontStyle.italic), + h1: heading1, + h2: heading2, + h3: body.copyWith(fontWeight: FontWeight.bold), + h4: body, + h5: body, + h6: body, + listBullet: body, + img: body, + strong: body.copyWith(fontWeight: FontWeight.bold), + p: body, + tableBody: body, + tableHead: body, + code: code, + codeblockDecoration: codeBlock, + ); + } + + LlmChatViewStyle? getChatStyle(BuildContext context) { + return LlmChatViewStyle( + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + progressIndicatorColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + disabledButtonStyle: ActionButtonStyle( + icon: MihIcons.mzansiAi, + iconColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + iconDecoration: BoxDecoration( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25), + ), + ), + recordButtonStyle: ActionButtonStyle( + iconColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + iconDecoration: BoxDecoration( + color: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25), + ), + textStyle: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + submitButtonStyle: ActionButtonStyle( + icon: Icons.send, + iconColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + iconDecoration: BoxDecoration( + color: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25), + ), + textStyle: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + stopButtonStyle: ActionButtonStyle( + iconColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + iconDecoration: BoxDecoration( + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25), + ), + textStyle: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + actionButtonBarDecoration: BoxDecoration( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25), + ), + // Mzansi AI Chat Style + llmMessageStyle: LlmMessageStyle( + icon: MihIcons.mzansiAi, + iconColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + iconDecoration: BoxDecoration( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25), + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topRight: Radius.circular(25), + bottomLeft: Radius.circular(25), + bottomRight: Radius.circular(25), + ), + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(76), + blurRadius: 8, + offset: Offset(2, 2), + ), + ], + ), + markdownStyle: getLlmChatMarkdownStyle(context), + ), + // User Chat Style + userMessageStyle: UserMessageStyle( + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(25), + bottomLeft: Radius.circular(25), + bottomRight: Radius.circular(25), + ), + color: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(76), + blurRadius: 8, + offset: Offset(2, 2), + ), + ], + ), + textStyle: TextStyle( + fontSize: 16, + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + // User Input Style + chatInputStyle: ChatInputStyle( + backgroundColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + decoration: BoxDecoration( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25), + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(76), + blurRadius: 8, + offset: Offset(2, 2), + ), + ], + ), + hintStyle: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + hintText: "Ask Mzansi AI...", + ), + // Suggestions Style + suggestionStyle: SuggestionStyle( + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(25), + bottomLeft: Radius.circular(25), + bottomRight: Radius.circular(25), + ), + color: MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(76), + blurRadius: 8, + offset: Offset(2, 2), + ), + ], + ), + textStyle: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + copyButtonStyle: ActionButtonStyle( + iconColor: MihColors.getSecondaryInvertedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + editButtonStyle: ActionButtonStyle( + iconColor: MihColors.getSecondaryInvertedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + cancelButtonStyle: ActionButtonStyle( + iconDecoration: BoxDecoration( + color: MihColors.getRedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25), + ), + iconColor: MihColors.getSecondaryInvertedColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + textStyle: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + addButtonStyle: ActionButtonStyle( + iconDecoration: BoxDecoration( + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + borderRadius: BorderRadius.circular(25), + ), + iconColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + textStyle: TextStyle( + color: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ), + ), + menuColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + ); + } +} diff --git a/Frontend/lib/mih_providers/mzansi_directory_provider.dart b/mih_ui/lib/mih_providers/mzansi_directory_provider.dart similarity index 74% rename from Frontend/lib/mih_providers/mzansi_directory_provider.dart rename to mih_ui/lib/mih_providers/mzansi_directory_provider.dart index ed88e863..a68795c7 100644 --- a/Frontend/lib/mih_providers/mzansi_directory_provider.dart +++ b/mih_ui/lib/mih_providers/mzansi_directory_provider.dart @@ -11,9 +11,12 @@ class MzansiDirectoryProvider extends ChangeNotifier { bool personalSearch; List bookmarkedBusinesses = []; List? favouriteBusinessesList; - List? searchedBusinesses; + Map>? favBusImagesUrl; + List searchedBusinesses = []; + Map>? busSearchImagesUrl; Business? selectedBusiness; - List? searchedUsers; + List searchedUsers = []; + Map>? userSearchImagesUrl; AppUser? selectedUser; String searchTerm; String businessTypeFilter; @@ -32,9 +35,9 @@ class MzansiDirectoryProvider extends ChangeNotifier { userLocation = "Unknown Location"; personalSearch = true; bookmarkedBusinesses = []; - searchedBusinesses = null; + searchedBusinesses = []; selectedBusiness = null; - searchedUsers = null; + searchedUsers = []; selectedUser = null; searchTerm = ""; businessTypeFilter = ""; @@ -67,13 +70,21 @@ class MzansiDirectoryProvider extends ChangeNotifier { notifyListeners(); } - void setFavouriteBusinesses({required List businesses}) { + void setFavouriteBusinesses({ + required List businesses, + required Map> businessesImagesUrl, + }) { favouriteBusinessesList = businesses; + favBusImagesUrl = businessesImagesUrl; notifyListeners(); } - void setSearchedBusinesses({required List searchedBusinesses}) { + void setSearchedBusinesses({ + required List searchedBusinesses, + required Map> businessesImagesUrl, + }) { this.searchedBusinesses = searchedBusinesses; + busSearchImagesUrl = businessesImagesUrl; notifyListeners(); } @@ -82,8 +93,12 @@ class MzansiDirectoryProvider extends ChangeNotifier { notifyListeners(); } - void setSearchedUsers({required List searchedUsers}) { + void setSearchedUsers({ + required List searchedUsers, + required Map> userImagesUrl, + }) { this.searchedUsers = searchedUsers; + this.userSearchImagesUrl = userImagesUrl; notifyListeners(); } diff --git a/Frontend/lib/mih_providers/mzansi_profile_provider.dart b/mih_ui/lib/mih_providers/mzansi_profile_provider.dart similarity index 86% rename from Frontend/lib/mih_providers/mzansi_profile_provider.dart rename to mih_ui/lib/mih_providers/mzansi_profile_provider.dart index 333d6dfb..c35483d8 100644 --- a/Frontend/lib/mih_providers/mzansi_profile_provider.dart +++ b/mih_ui/lib/mih_providers/mzansi_profile_provider.dart @@ -1,8 +1,10 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_objects/business_employee.dart'; import 'package:mzansi_innovation_hub/mih_objects/business_user.dart'; +import 'package:mzansi_innovation_hub/mih_objects/profile_link.dart'; import 'package:mzansi_innovation_hub/mih_objects/user_consent.dart'; class MzansiProfileProvider extends ChangeNotifier { @@ -22,6 +24,7 @@ class MzansiProfileProvider extends ChangeNotifier { List? employeeList; List userSearchResults = []; bool hideBusinessUserDetails; + List personalLinks = []; MzansiProfileProvider({ this.personalHome = true, @@ -76,7 +79,8 @@ class MzansiProfileProvider extends ChangeNotifier { void setUserProfilePicUrl(String url) { userProfilePicUrl = url; - userProfilePicture = url.isNotEmpty ? NetworkImage(url) : null; + userProfilePicture = + url.isNotEmpty ? CachedNetworkImageProvider(url) : null; notifyListeners(); } @@ -89,7 +93,8 @@ class MzansiProfileProvider extends ChangeNotifier { void setBusinessProfilePicUrl(String url) { businessProfilePicUrl = url; - businessProfilePicture = url.isNotEmpty ? NetworkImage(url) : null; + businessProfilePicture = + url.isNotEmpty ? CachedNetworkImageProvider(url) : null; notifyListeners(); } @@ -100,7 +105,8 @@ class MzansiProfileProvider extends ChangeNotifier { void setBusinessUserSignatureUrl(String url) { businessUserSignatureUrl = url; - businessUserSignature = url.isNotEmpty ? NetworkImage(url) : null; + businessUserSignature = + url.isNotEmpty ? CachedNetworkImageProvider(url) : null; notifyListeners(); } @@ -145,4 +151,9 @@ class MzansiProfileProvider extends ChangeNotifier { this.userSearchResults = userSearchResults; notifyListeners(); } + + void setPersonalLinks({required List personalLinks}) { + this.personalLinks = personalLinks; + notifyListeners(); + } } diff --git a/Frontend/lib/mih_providers/mzansi_wallet_provider.dart b/mih_ui/lib/mih_providers/mzansi_wallet_provider.dart similarity index 100% rename from Frontend/lib/mih_providers/mzansi_wallet_provider.dart rename to mih_ui/lib/mih_providers/mzansi_wallet_provider.dart diff --git a/Frontend/lib/mih_providers/ollama_provider.dart b/mih_ui/lib/mih_providers/ollama_provider.dart similarity index 58% rename from Frontend/lib/mih_providers/ollama_provider.dart rename to mih_ui/lib/mih_providers/ollama_provider.dart index 13d31c69..16e6942f 100644 --- a/Frontend/lib/mih_providers/ollama_provider.dart +++ b/mih_ui/lib/mih_providers/ollama_provider.dart @@ -4,14 +4,16 @@ import 'package:flutter/foundation.dart'; import 'package:flutter_ai_toolkit/flutter_ai_toolkit.dart'; import 'package:ken_logger/ken_logger.dart'; import 'package:ollama_dart/ollama_dart.dart'; +import 'package:cross_file/cross_file.dart'; class OllamaProvider extends LlmProvider with ChangeNotifier { OllamaProvider({ String? baseUrl, Map? headers, - Map? queryParams, + Map? queryParams, required String model, String? systemPrompt, + bool? think, }) : _client = OllamaClient( baseUrl: baseUrl, headers: headers, @@ -19,11 +21,13 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { ), _model = model, _systemPrompt = systemPrompt, + _think = think, _history = []; final OllamaClient _client; final String _model; final List _history; final String? _systemPrompt; + final bool? _think; @override Stream generateStream( @@ -36,6 +40,29 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { yield* _generateStream(messages); } + Stream speechToText(XFile audioFile) async* { + KenLogger.success("Inside Custom speechToText funtion"); + // 1. Convert the XFile to the attachment format needed for the LLM. + final attachments = [await FileAttachment.fromFile(audioFile)]; + KenLogger.success("added attachment for audio file"); + + // 2. Define the transcription prompt, mirroring the logic from LlmChatView. + const prompt = + 'translate the attached audio to text; provide the result of that ' + 'translation as just the text of the translation itself. be careful to ' + 'separate the background audio from the foreground audio and only ' + 'provide the result of translating the foreground audio.'; + + KenLogger.success("Created Prompt"); + // 3. Use your existing Ollama API call to process the prompt and attachment. + // We are essentially running a new, one-off chat session for transcription. + yield* generateStream( + prompt, + attachments: attachments, + ); + KenLogger.success("done"); + } + @override Stream sendMessageStream( String prompt, { @@ -76,6 +103,7 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { Stream _generateStream(List messages) async* { final allMessages = []; if (_systemPrompt != null && _systemPrompt.isNotEmpty) { + KenLogger.success("Adding system prompt to the conversation"); allMessages.add(Message( role: MessageRole.system, content: _systemPrompt, @@ -87,6 +115,7 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { request: GenerateChatCompletionRequest( model: _model, messages: allMessages, + think: _think, ), ); // final stream = _client.generateChatCompletionStream( @@ -109,19 +138,32 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { content: message.text ?? '', ); } - + final imageAttachments = []; + final docAttachments = []; + if (message.text != null && message.text!.isNotEmpty) { + docAttachments.add(message.text!); + } + for (final attachment in message.attachments) { + if (attachment is FileAttachment) { + final mimeType = attachment.mimeType.toLowerCase(); + if (mimeType.startsWith('image/')) { + imageAttachments.add(base64Encode(attachment.bytes)); + } else if (mimeType == 'application/pdf' || + mimeType.startsWith('text/')) { + throw LlmFailureException( + "\n\nAww, that file is a little too advanced for us right now ($mimeType)! We're still learning, but we'll get there! Please try sending us a different file type.\n\nHint: We can handle images quite well!", + ); + } + } else { + throw LlmFailureException( + 'Unsupported attachment type: $attachment', + ); + } + } return Message( role: MessageRole.user, - content: message.text ?? '', - images: [ - for (final attachment in message.attachments) - if (attachment is ImageFileAttachment) - base64Encode(attachment.bytes) - else - throw LlmFailureException( - 'Unsupported attachment type: $attachment', - ), - ], + content: docAttachments.join(' '), + images: imageAttachments, ); case MessageOrigin.llm: diff --git a/Frontend/lib/mih_providers/patient_manager_provider.dart b/mih_ui/lib/mih_providers/patient_manager_provider.dart similarity index 94% rename from Frontend/lib/mih_providers/patient_manager_provider.dart rename to mih_ui/lib/mih_providers/patient_manager_provider.dart index b7fa1b7d..7081ad3a 100644 --- a/Frontend/lib/mih_providers/patient_manager_provider.dart +++ b/mih_ui/lib/mih_providers/patient_manager_provider.dart @@ -1,3 +1,4 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_objects/claim_statement_file.dart'; import 'package:mzansi_innovation_hub/mih_objects/files.dart'; @@ -62,7 +63,8 @@ class PatientManagerProvider extends ChangeNotifier { void setSelectedPatientProfilePicUrl(String url) { selectedPatientProfilePictureUrl = url; - selectedPatientProfilePicture = url.isNotEmpty ? NetworkImage(url) : null; + selectedPatientProfilePicture = + url.isNotEmpty ? CachedNetworkImageProvider(url) : null; notifyListeners(); } diff --git a/Frontend/lib/mih_services/mih_access_controls_services.dart b/mih_ui/lib/mih_services/mih_access_controls_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_access_controls_services.dart rename to mih_ui/lib/mih_services/mih_access_controls_services.dart diff --git a/Frontend/lib/mih_services/mih_alert_services.dart b/mih_ui/lib/mih_services/mih_alert_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_alert_services.dart rename to mih_ui/lib/mih_services/mih_alert_services.dart diff --git a/Frontend/lib/mih_services/mih_authentication_services.dart b/mih_ui/lib/mih_services/mih_authentication_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_authentication_services.dart rename to mih_ui/lib/mih_services/mih_authentication_services.dart diff --git a/Frontend/lib/mih_services/mih_business_details_services.dart b/mih_ui/lib/mih_services/mih_business_details_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_business_details_services.dart rename to mih_ui/lib/mih_services/mih_business_details_services.dart diff --git a/Frontend/lib/mih_services/mih_business_employee_services.dart b/mih_ui/lib/mih_services/mih_business_employee_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_business_employee_services.dart rename to mih_ui/lib/mih_services/mih_business_employee_services.dart diff --git a/Frontend/lib/mih_services/mih_claim_statement_generation_services.dart b/mih_ui/lib/mih_services/mih_claim_statement_generation_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_claim_statement_generation_services.dart rename to mih_ui/lib/mih_services/mih_claim_statement_generation_services.dart diff --git a/Frontend/lib/mih_services/mih_currency_exchange_rate_services.dart b/mih_ui/lib/mih_services/mih_currency_exchange_rate_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_currency_exchange_rate_services.dart rename to mih_ui/lib/mih_services/mih_currency_exchange_rate_services.dart diff --git a/Frontend/lib/mih_services/mih_data_helper_services.dart b/mih_ui/lib/mih_services/mih_data_helper_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_data_helper_services.dart rename to mih_ui/lib/mih_services/mih_data_helper_services.dart diff --git a/Frontend/lib/mih_services/mih_file_services.dart b/mih_ui/lib/mih_services/mih_file_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_file_services.dart rename to mih_ui/lib/mih_services/mih_file_services.dart diff --git a/Frontend/lib/mih_services/mih_icd10_code_services.dart b/mih_ui/lib/mih_services/mih_icd10_code_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_icd10_code_services.dart rename to mih_ui/lib/mih_services/mih_icd10_code_services.dart diff --git a/Frontend/lib/mih_services/mih_install_services.dart b/mih_ui/lib/mih_services/mih_install_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_install_services.dart rename to mih_ui/lib/mih_services/mih_install_services.dart diff --git a/Frontend/lib/mih_services/mih_location_services.dart b/mih_ui/lib/mih_services/mih_location_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_location_services.dart rename to mih_ui/lib/mih_services/mih_location_services.dart diff --git a/Frontend/lib/mih_services/mih_minesweeper_services.dart b/mih_ui/lib/mih_services/mih_minesweeper_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_minesweeper_services.dart rename to mih_ui/lib/mih_services/mih_minesweeper_services.dart diff --git a/Frontend/lib/mih_services/mih_my_business_user_services.dart b/mih_ui/lib/mih_services/mih_my_business_user_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_my_business_user_services.dart rename to mih_ui/lib/mih_services/mih_my_business_user_services.dart diff --git a/Frontend/lib/mih_services/mih_mzansi_calendar_services.dart b/mih_ui/lib/mih_services/mih_mzansi_calendar_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_mzansi_calendar_services.dart rename to mih_ui/lib/mih_services/mih_mzansi_calendar_services.dart diff --git a/Frontend/lib/mih_services/mih_mzansi_directory_services.dart b/mih_ui/lib/mih_services/mih_mzansi_directory_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_mzansi_directory_services.dart rename to mih_ui/lib/mih_services/mih_mzansi_directory_services.dart diff --git a/Frontend/lib/mih_services/mih_mzansi_wallet_services.dart b/mih_ui/lib/mih_services/mih_mzansi_wallet_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_mzansi_wallet_services.dart rename to mih_ui/lib/mih_services/mih_mzansi_wallet_services.dart diff --git a/Frontend/lib/mih_services/mih_notification_services.dart b/mih_ui/lib/mih_services/mih_notification_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_notification_services.dart rename to mih_ui/lib/mih_services/mih_notification_services.dart diff --git a/Frontend/lib/mih_services/mih_patient_services.dart b/mih_ui/lib/mih_services/mih_patient_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_patient_services.dart rename to mih_ui/lib/mih_services/mih_patient_services.dart diff --git a/Frontend/lib/mih_services/mih_user_consent_services.dart b/mih_ui/lib/mih_services/mih_user_consent_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_user_consent_services.dart rename to mih_ui/lib/mih_services/mih_user_consent_services.dart diff --git a/Frontend/lib/mih_services/mih_user_services.dart b/mih_ui/lib/mih_services/mih_user_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_user_services.dart rename to mih_ui/lib/mih_services/mih_user_services.dart diff --git a/Frontend/lib/mih_services/mih_validation_services.dart b/mih_ui/lib/mih_services/mih_validation_services.dart similarity index 100% rename from Frontend/lib/mih_services/mih_validation_services.dart rename to mih_ui/lib/mih_services/mih_validation_services.dart diff --git a/Frontend/linux/.gitignore b/mih_ui/linux/.gitignore similarity index 100% rename from Frontend/linux/.gitignore rename to mih_ui/linux/.gitignore diff --git a/Frontend/linux/CMakeLists.txt b/mih_ui/linux/CMakeLists.txt similarity index 100% rename from Frontend/linux/CMakeLists.txt rename to mih_ui/linux/CMakeLists.txt diff --git a/Frontend/linux/flutter/CMakeLists.txt b/mih_ui/linux/flutter/CMakeLists.txt similarity index 100% rename from Frontend/linux/flutter/CMakeLists.txt rename to mih_ui/linux/flutter/CMakeLists.txt diff --git a/Frontend/linux/flutter/generated_plugin_registrant.cc b/mih_ui/linux/flutter/generated_plugin_registrant.cc similarity index 100% rename from Frontend/linux/flutter/generated_plugin_registrant.cc rename to mih_ui/linux/flutter/generated_plugin_registrant.cc diff --git a/Frontend/linux/flutter/generated_plugin_registrant.h b/mih_ui/linux/flutter/generated_plugin_registrant.h similarity index 100% rename from Frontend/linux/flutter/generated_plugin_registrant.h rename to mih_ui/linux/flutter/generated_plugin_registrant.h diff --git a/Frontend/linux/flutter/generated_plugins.cmake b/mih_ui/linux/flutter/generated_plugins.cmake similarity index 100% rename from Frontend/linux/flutter/generated_plugins.cmake rename to mih_ui/linux/flutter/generated_plugins.cmake diff --git a/Frontend/linux/main.cc b/mih_ui/linux/main.cc similarity index 100% rename from Frontend/linux/main.cc rename to mih_ui/linux/main.cc diff --git a/Frontend/linux/my_application.cc b/mih_ui/linux/my_application.cc similarity index 100% rename from Frontend/linux/my_application.cc rename to mih_ui/linux/my_application.cc diff --git a/Frontend/linux/my_application.h b/mih_ui/linux/my_application.h similarity index 100% rename from Frontend/linux/my_application.h rename to mih_ui/linux/my_application.h diff --git a/Frontend/linux/runner/CMakeLists.txt b/mih_ui/linux/runner/CMakeLists.txt similarity index 100% rename from Frontend/linux/runner/CMakeLists.txt rename to mih_ui/linux/runner/CMakeLists.txt diff --git a/Frontend/linux/runner/main.cc b/mih_ui/linux/runner/main.cc similarity index 100% rename from Frontend/linux/runner/main.cc rename to mih_ui/linux/runner/main.cc diff --git a/Frontend/linux/runner/my_application.cc b/mih_ui/linux/runner/my_application.cc similarity index 100% rename from Frontend/linux/runner/my_application.cc rename to mih_ui/linux/runner/my_application.cc diff --git a/Frontend/linux/runner/my_application.h b/mih_ui/linux/runner/my_application.h similarity index 100% rename from Frontend/linux/runner/my_application.h rename to mih_ui/linux/runner/my_application.h diff --git a/Frontend/macos/.gitignore b/mih_ui/macos/.gitignore similarity index 100% rename from Frontend/macos/.gitignore rename to mih_ui/macos/.gitignore diff --git a/Frontend/macos/Flutter/Flutter-Debug.xcconfig b/mih_ui/macos/Flutter/Flutter-Debug.xcconfig similarity index 100% rename from Frontend/macos/Flutter/Flutter-Debug.xcconfig rename to mih_ui/macos/Flutter/Flutter-Debug.xcconfig diff --git a/Frontend/macos/Flutter/Flutter-Release.xcconfig b/mih_ui/macos/Flutter/Flutter-Release.xcconfig similarity index 100% rename from Frontend/macos/Flutter/Flutter-Release.xcconfig rename to mih_ui/macos/Flutter/Flutter-Release.xcconfig diff --git a/Frontend/macos/Flutter/GeneratedPluginRegistrant.swift b/mih_ui/macos/Flutter/GeneratedPluginRegistrant.swift similarity index 96% rename from Frontend/macos/Flutter/GeneratedPluginRegistrant.swift rename to mih_ui/macos/Flutter/GeneratedPluginRegistrant.swift index 25486c96..3cef27da 100644 --- a/Frontend/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/mih_ui/macos/Flutter/GeneratedPluginRegistrant.swift @@ -24,7 +24,6 @@ import record_macos import screen_brightness_macos import share_plus import shared_preferences_foundation -import speech_to_text import sqflite_darwin import syncfusion_pdfviewer_macos import url_launcher_macos @@ -50,7 +49,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ScreenBrightnessMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenBrightnessMacosPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) - SpeechToTextPlugin.register(with: registry.registrar(forPlugin: "SpeechToTextPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) SyncfusionFlutterPdfViewerPlugin.register(with: registry.registrar(forPlugin: "SyncfusionFlutterPdfViewerPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) diff --git a/Frontend/macos/Podfile b/mih_ui/macos/Podfile similarity index 100% rename from Frontend/macos/Podfile rename to mih_ui/macos/Podfile diff --git a/Frontend/macos/Runner.xcodeproj/project.pbxproj b/mih_ui/macos/Runner.xcodeproj/project.pbxproj similarity index 97% rename from Frontend/macos/Runner.xcodeproj/project.pbxproj rename to mih_ui/macos/Runner.xcodeproj/project.pbxproj index fdf9f49d..23af1321 100644 --- a/Frontend/macos/Runner.xcodeproj/project.pbxproj +++ b/mih_ui/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 87A3ECC0300895438D998868 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7ED8EFF855C30D0E25B6A6B4 /* GoogleService-Info.plist */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -64,7 +65,7 @@ 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* patient_manager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "patient_manager.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* patient_manager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = patient_manager.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -77,6 +78,7 @@ 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7ED8EFF855C30D0E25B6A6B4 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; /* End PBXFileReference section */ @@ -125,6 +127,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 7ED8EFF855C30D0E25B6A6B4 /* GoogleService-Info.plist */, ); sourceTree = ""; }; @@ -284,6 +287,7 @@ files = ( 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + 87A3ECC0300895438D998868 /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Frontend/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Frontend/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to mih_ui/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Frontend/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from Frontend/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to mih_ui/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/Frontend/macos/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/macos/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Frontend/macos/Runner.xcworkspace/contents.xcworkspacedata rename to mih_ui/macos/Runner.xcworkspace/contents.xcworkspacedata diff --git a/Frontend/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Frontend/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to mih_ui/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Frontend/macos/Runner/AppDelegate.swift b/mih_ui/macos/Runner/AppDelegate.swift similarity index 100% rename from Frontend/macos/Runner/AppDelegate.swift rename to mih_ui/macos/Runner/AppDelegate.swift diff --git a/Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png similarity index 100% rename from Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png rename to mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png diff --git a/Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png similarity index 100% rename from Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png rename to mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png diff --git a/Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png similarity index 100% rename from Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png rename to mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png diff --git a/Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png similarity index 100% rename from Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png rename to mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png diff --git a/Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png similarity index 100% rename from Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png rename to mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png diff --git a/Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png similarity index 100% rename from Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png rename to mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png diff --git a/Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png similarity index 100% rename from Frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png rename to mih_ui/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png diff --git a/Frontend/macos/Runner/Base.lproj/MainMenu.xib b/mih_ui/macos/Runner/Base.lproj/MainMenu.xib similarity index 100% rename from Frontend/macos/Runner/Base.lproj/MainMenu.xib rename to mih_ui/macos/Runner/Base.lproj/MainMenu.xib diff --git a/Frontend/macos/Runner/Configs/AppInfo.xcconfig b/mih_ui/macos/Runner/Configs/AppInfo.xcconfig similarity index 100% rename from Frontend/macos/Runner/Configs/AppInfo.xcconfig rename to mih_ui/macos/Runner/Configs/AppInfo.xcconfig diff --git a/Frontend/macos/Runner/Configs/Debug.xcconfig b/mih_ui/macos/Runner/Configs/Debug.xcconfig similarity index 100% rename from Frontend/macos/Runner/Configs/Debug.xcconfig rename to mih_ui/macos/Runner/Configs/Debug.xcconfig diff --git a/Frontend/macos/Runner/Configs/Release.xcconfig b/mih_ui/macos/Runner/Configs/Release.xcconfig similarity index 100% rename from Frontend/macos/Runner/Configs/Release.xcconfig rename to mih_ui/macos/Runner/Configs/Release.xcconfig diff --git a/Frontend/macos/Runner/Configs/Warnings.xcconfig b/mih_ui/macos/Runner/Configs/Warnings.xcconfig similarity index 100% rename from Frontend/macos/Runner/Configs/Warnings.xcconfig rename to mih_ui/macos/Runner/Configs/Warnings.xcconfig diff --git a/Frontend/macos/Runner/DebugProfile.entitlements b/mih_ui/macos/Runner/DebugProfile.entitlements similarity index 100% rename from Frontend/macos/Runner/DebugProfile.entitlements rename to mih_ui/macos/Runner/DebugProfile.entitlements diff --git a/mih_ui/macos/Runner/GoogleService-Info.plist b/mih_ui/macos/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..380f61da --- /dev/null +++ b/mih_ui/macos/Runner/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyDRqY5I5CXjEtWkUX1YUfKT8IUlln9PUuY + GCM_SENDER_ID + 33677883408 + PLIST_VERSION + 1 + BUNDLE_ID + com.example.patientManager + PROJECT_ID + mzansi-innovation-hub + STORAGE_BUCKET + mzansi-innovation-hub.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:33677883408:ios:e2db11a42fc3452e223295 + + \ No newline at end of file diff --git a/Frontend/macos/Runner/Info.plist b/mih_ui/macos/Runner/Info.plist similarity index 100% rename from Frontend/macos/Runner/Info.plist rename to mih_ui/macos/Runner/Info.plist diff --git a/Frontend/macos/Runner/MainFlutterWindow.swift b/mih_ui/macos/Runner/MainFlutterWindow.swift similarity index 100% rename from Frontend/macos/Runner/MainFlutterWindow.swift rename to mih_ui/macos/Runner/MainFlutterWindow.swift diff --git a/Frontend/macos/Runner/Release.entitlements b/mih_ui/macos/Runner/Release.entitlements similarity index 100% rename from Frontend/macos/Runner/Release.entitlements rename to mih_ui/macos/Runner/Release.entitlements diff --git a/Frontend/macos/RunnerTests/RunnerTests.swift b/mih_ui/macos/RunnerTests/RunnerTests.swift similarity index 100% rename from Frontend/macos/RunnerTests/RunnerTests.swift rename to mih_ui/macos/RunnerTests/RunnerTests.swift diff --git a/Frontend/pubspec.lock b/mih_ui/pubspec.lock similarity index 98% rename from Frontend/pubspec.lock rename to mih_ui/pubspec.lock index ec7cf4f8..41003e1b 100644 --- a/Frontend/pubspec.lock +++ b/mih_ui/pubspec.lock @@ -322,13 +322,13 @@ packages: source: hosted version: "3.3.0" cross_file: - dependency: transitive + dependency: "direct main" description: name: cross_file - sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608" url: "https://pub.dev" source: hosted - version: "0.3.4+2" + version: "0.3.5+1" crypto: dependency: transitive description: @@ -589,10 +589,10 @@ packages: dependency: transitive description: name: firebase_core - sha256: "1f2dfd9f535d81f8b06d7a50ecda6eac1e6922191ed42e09ca2c84bd2288927c" + sha256: "923085c881663ef685269b013e241b428e1fb03cdd0ebde265d9b40ff18abf80" url: "https://pub.dev" source: hosted - version: "4.2.1" + version: "4.4.0" firebase_core_platform_interface: dependency: transitive description: @@ -605,10 +605,10 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: ff18fabb0ad0ed3595d2f2c85007ecc794aadecdff5b3bb1460b7ee47cded398 + sha256: "83e7356c704131ca4d8d8dd57e360d8acecbca38b1a3705c7ae46cc34c708084" url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "3.4.0" fixnum: dependency: transitive description: @@ -1336,14 +1336,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - pedantic: - dependency: transitive - description: - name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" - source: hosted - version: "1.11.1" petitparser: dependency: transitive description: @@ -1757,30 +1749,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.1" - speech_to_text: - dependency: "direct main" - description: - name: speech_to_text - sha256: c07557664974afa061f221d0d4186935bea4220728ea9446702825e8b988db04 - url: "https://pub.dev" - source: hosted - version: "7.3.0" - speech_to_text_platform_interface: - dependency: transitive - description: - name: speech_to_text_platform_interface - sha256: a1935847704e41ee468aad83181ddd2423d0833abe55d769c59afca07adb5114 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - speech_to_text_windows: - dependency: transitive - description: - name: speech_to_text_windows - sha256: "2c9846d18253c7bbe059a276297ef9f27e8a2745dead32192525beb208195072" - url: "https://pub.dev" - source: hosted - version: "1.0.0+beta.8" sprintf: dependency: transitive description: diff --git a/Frontend/pubspec.yaml b/mih_ui/pubspec.yaml similarity index 96% rename from Frontend/pubspec.yaml rename to mih_ui/pubspec.yaml index 05b505fc..cd20d55a 100644 --- a/Frontend/pubspec.yaml +++ b/mih_ui/pubspec.yaml @@ -1,7 +1,7 @@ name: mzansi_innovation_hub description: "" publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 1.2.4+118 +version: 1.2.5+126 # version: 1.1.1+97 #--- Updated version for upgrader package testing environment: @@ -15,6 +15,8 @@ dependencies: cupertino_icons: ^1.0.8 font_awesome_flutter: ^10.7.0 + # firebase_core: ^4.4.0 + # firebase_core_desktop: ^1.0.2 syncfusion_flutter_core: ^29.2.10 syncfusion_flutter_pdfviewer: ^29.2.10 universal_html: ^2.2.4 @@ -59,7 +61,7 @@ dependencies: provider: ^6.1.5+1 flutter_ai_toolkit: ^0.10.0 flutter_markdown_plus: ^1.0.5 - speech_to_text: ^7.3.0 + cross_file: ^0.3.5+1 quick_actions: ^1.1.0 dev_dependencies: diff --git a/Frontend/server/MIH_web_server.py b/mih_ui/server/MIH_web_server.py similarity index 100% rename from Frontend/server/MIH_web_server.py rename to mih_ui/server/MIH_web_server.py diff --git a/Frontend/server/server.sh b/mih_ui/server/server.sh similarity index 100% rename from Frontend/server/server.sh rename to mih_ui/server/server.sh diff --git a/Frontend/web/.well-known/apple-app-site-association b/mih_ui/web/.well-known/apple-app-site-association similarity index 100% rename from Frontend/web/.well-known/apple-app-site-association rename to mih_ui/web/.well-known/apple-app-site-association diff --git a/Frontend/web/.well-known/assetlinks.json b/mih_ui/web/.well-known/assetlinks.json similarity index 100% rename from Frontend/web/.well-known/assetlinks.json rename to mih_ui/web/.well-known/assetlinks.json diff --git a/Frontend/web/app-ads.txt b/mih_ui/web/app-ads.txt similarity index 100% rename from Frontend/web/app-ads.txt rename to mih_ui/web/app-ads.txt diff --git a/Frontend/web/favicon.ico b/mih_ui/web/favicon.ico similarity index 100% rename from Frontend/web/favicon.ico rename to mih_ui/web/favicon.ico diff --git a/mih_ui/web/favicon.png b/mih_ui/web/favicon.png new file mode 100644 index 00000000..494c06e9 Binary files /dev/null and b/mih_ui/web/favicon.png differ diff --git a/Frontend/web/google5430e48350b861fe.html b/mih_ui/web/google5430e48350b861fe.html similarity index 100% rename from Frontend/web/google5430e48350b861fe.html rename to mih_ui/web/google5430e48350b861fe.html diff --git a/mih_ui/web/icons/Icon-192.png b/mih_ui/web/icons/Icon-192.png new file mode 100644 index 00000000..9d1b1540 Binary files /dev/null and b/mih_ui/web/icons/Icon-192.png differ diff --git a/mih_ui/web/icons/Icon-512.png b/mih_ui/web/icons/Icon-512.png new file mode 100644 index 00000000..d6bb6b00 Binary files /dev/null and b/mih_ui/web/icons/Icon-512.png differ diff --git a/mih_ui/web/icons/Icon-maskable-192.png b/mih_ui/web/icons/Icon-maskable-192.png new file mode 100644 index 00000000..9d1b1540 Binary files /dev/null and b/mih_ui/web/icons/Icon-maskable-192.png differ diff --git a/mih_ui/web/icons/Icon-maskable-512.png b/mih_ui/web/icons/Icon-maskable-512.png new file mode 100644 index 00000000..d6bb6b00 Binary files /dev/null and b/mih_ui/web/icons/Icon-maskable-512.png differ diff --git a/Frontend/web/icons/android-chrome-192x192.png b/mih_ui/web/icons/android-chrome-192x192.png similarity index 100% rename from Frontend/web/icons/android-chrome-192x192.png rename to mih_ui/web/icons/android-chrome-192x192.png diff --git a/Frontend/web/icons/android-chrome-512x512.png b/mih_ui/web/icons/android-chrome-512x512.png similarity index 100% rename from Frontend/web/icons/android-chrome-512x512.png rename to mih_ui/web/icons/android-chrome-512x512.png diff --git a/Frontend/web/icons/apple-touch-icon.png b/mih_ui/web/icons/apple-touch-icon.png similarity index 100% rename from Frontend/web/icons/apple-touch-icon.png rename to mih_ui/web/icons/apple-touch-icon.png diff --git a/Frontend/web/icons/favicon-16x16.png b/mih_ui/web/icons/favicon-16x16.png similarity index 100% rename from Frontend/web/icons/favicon-16x16.png rename to mih_ui/web/icons/favicon-16x16.png diff --git a/Frontend/web/icons/favicon-32x32.png b/mih_ui/web/icons/favicon-32x32.png similarity index 100% rename from Frontend/web/icons/favicon-32x32.png rename to mih_ui/web/icons/favicon-32x32.png diff --git a/Frontend/web/icons/favicon.ico b/mih_ui/web/icons/favicon.ico similarity index 100% rename from Frontend/web/icons/favicon.ico rename to mih_ui/web/icons/favicon.ico diff --git a/Frontend/web/index.html b/mih_ui/web/index.html similarity index 100% rename from Frontend/web/index.html rename to mih_ui/web/index.html diff --git a/Frontend/web/install_pwa.js b/mih_ui/web/install_pwa.js similarity index 100% rename from Frontend/web/install_pwa.js rename to mih_ui/web/install_pwa.js diff --git a/Frontend/web/manifest.json b/mih_ui/web/manifest.json similarity index 93% rename from Frontend/web/manifest.json rename to mih_ui/web/manifest.json index fd4b3e17..e8ad7e18 100644 --- a/Frontend/web/manifest.json +++ b/mih_ui/web/manifest.json @@ -3,8 +3,8 @@ "short_name": "MIH", "start_url": ".", "display": "standalone", - "background_color": "#6641b2", - "theme_color": "#6641b2", + "background_color": "#3A4454", + "theme_color": "#3A4454", "description": "Digitizing Mzansi one process at a time. Discover essential Mzansi apps to streamline your personal and professional life. Simplify your daily tasks with our user-friendly solutions.", "orientation": "any", "prefer_related_applications": false, diff --git a/Frontend/web/privacy-simplified-chinese.html b/mih_ui/web/privacy-simplified-chinese.html similarity index 100% rename from Frontend/web/privacy-simplified-chinese.html rename to mih_ui/web/privacy-simplified-chinese.html diff --git a/Frontend/web/privacy.html b/mih_ui/web/privacy.html similarity index 100% rename from Frontend/web/privacy.html rename to mih_ui/web/privacy.html diff --git a/Frontend/web/splash/img/branding-1x.gif b/mih_ui/web/splash/img/branding-1x.gif similarity index 100% rename from Frontend/web/splash/img/branding-1x.gif rename to mih_ui/web/splash/img/branding-1x.gif diff --git a/Frontend/web/splash/img/branding-1x.png b/mih_ui/web/splash/img/branding-1x.png similarity index 100% rename from Frontend/web/splash/img/branding-1x.png rename to mih_ui/web/splash/img/branding-1x.png diff --git a/Frontend/web/splash/img/branding-2x.gif b/mih_ui/web/splash/img/branding-2x.gif similarity index 100% rename from Frontend/web/splash/img/branding-2x.gif rename to mih_ui/web/splash/img/branding-2x.gif diff --git a/Frontend/web/splash/img/branding-2x.png b/mih_ui/web/splash/img/branding-2x.png similarity index 100% rename from Frontend/web/splash/img/branding-2x.png rename to mih_ui/web/splash/img/branding-2x.png diff --git a/Frontend/web/splash/img/branding-3x.gif b/mih_ui/web/splash/img/branding-3x.gif similarity index 100% rename from Frontend/web/splash/img/branding-3x.gif rename to mih_ui/web/splash/img/branding-3x.gif diff --git a/Frontend/web/splash/img/branding-3x.png b/mih_ui/web/splash/img/branding-3x.png similarity index 100% rename from Frontend/web/splash/img/branding-3x.png rename to mih_ui/web/splash/img/branding-3x.png diff --git a/Frontend/web/splash/img/branding-4x.gif b/mih_ui/web/splash/img/branding-4x.gif similarity index 100% rename from Frontend/web/splash/img/branding-4x.gif rename to mih_ui/web/splash/img/branding-4x.gif diff --git a/Frontend/web/splash/img/branding-4x.png b/mih_ui/web/splash/img/branding-4x.png similarity index 100% rename from Frontend/web/splash/img/branding-4x.png rename to mih_ui/web/splash/img/branding-4x.png diff --git a/Frontend/web/splash/img/branding-dark-1x.gif b/mih_ui/web/splash/img/branding-dark-1x.gif similarity index 100% rename from Frontend/web/splash/img/branding-dark-1x.gif rename to mih_ui/web/splash/img/branding-dark-1x.gif diff --git a/Frontend/web/splash/img/branding-dark-1x.png b/mih_ui/web/splash/img/branding-dark-1x.png similarity index 100% rename from Frontend/web/splash/img/branding-dark-1x.png rename to mih_ui/web/splash/img/branding-dark-1x.png diff --git a/Frontend/web/splash/img/branding-dark-2x.gif b/mih_ui/web/splash/img/branding-dark-2x.gif similarity index 100% rename from Frontend/web/splash/img/branding-dark-2x.gif rename to mih_ui/web/splash/img/branding-dark-2x.gif diff --git a/Frontend/web/splash/img/branding-dark-2x.png b/mih_ui/web/splash/img/branding-dark-2x.png similarity index 100% rename from Frontend/web/splash/img/branding-dark-2x.png rename to mih_ui/web/splash/img/branding-dark-2x.png diff --git a/Frontend/web/splash/img/branding-dark-3x.gif b/mih_ui/web/splash/img/branding-dark-3x.gif similarity index 100% rename from Frontend/web/splash/img/branding-dark-3x.gif rename to mih_ui/web/splash/img/branding-dark-3x.gif diff --git a/Frontend/web/splash/img/branding-dark-3x.png b/mih_ui/web/splash/img/branding-dark-3x.png similarity index 100% rename from Frontend/web/splash/img/branding-dark-3x.png rename to mih_ui/web/splash/img/branding-dark-3x.png diff --git a/Frontend/web/splash/img/branding-dark-4x.gif b/mih_ui/web/splash/img/branding-dark-4x.gif similarity index 100% rename from Frontend/web/splash/img/branding-dark-4x.gif rename to mih_ui/web/splash/img/branding-dark-4x.gif diff --git a/Frontend/web/splash/img/branding-dark-4x.png b/mih_ui/web/splash/img/branding-dark-4x.png similarity index 100% rename from Frontend/web/splash/img/branding-dark-4x.png rename to mih_ui/web/splash/img/branding-dark-4x.png diff --git a/Frontend/web/splash/img/dark-1x.gif b/mih_ui/web/splash/img/dark-1x.gif similarity index 100% rename from Frontend/web/splash/img/dark-1x.gif rename to mih_ui/web/splash/img/dark-1x.gif diff --git a/Frontend/web/splash/img/dark-1x.png b/mih_ui/web/splash/img/dark-1x.png similarity index 100% rename from Frontend/web/splash/img/dark-1x.png rename to mih_ui/web/splash/img/dark-1x.png diff --git a/Frontend/web/splash/img/dark-2x.gif b/mih_ui/web/splash/img/dark-2x.gif similarity index 100% rename from Frontend/web/splash/img/dark-2x.gif rename to mih_ui/web/splash/img/dark-2x.gif diff --git a/Frontend/web/splash/img/dark-2x.png b/mih_ui/web/splash/img/dark-2x.png similarity index 100% rename from Frontend/web/splash/img/dark-2x.png rename to mih_ui/web/splash/img/dark-2x.png diff --git a/Frontend/web/splash/img/dark-3x.gif b/mih_ui/web/splash/img/dark-3x.gif similarity index 100% rename from Frontend/web/splash/img/dark-3x.gif rename to mih_ui/web/splash/img/dark-3x.gif diff --git a/Frontend/web/splash/img/dark-3x.png b/mih_ui/web/splash/img/dark-3x.png similarity index 100% rename from Frontend/web/splash/img/dark-3x.png rename to mih_ui/web/splash/img/dark-3x.png diff --git a/Frontend/web/splash/img/dark-4x.gif b/mih_ui/web/splash/img/dark-4x.gif similarity index 100% rename from Frontend/web/splash/img/dark-4x.gif rename to mih_ui/web/splash/img/dark-4x.gif diff --git a/Frontend/web/splash/img/dark-4x.png b/mih_ui/web/splash/img/dark-4x.png similarity index 100% rename from Frontend/web/splash/img/dark-4x.png rename to mih_ui/web/splash/img/dark-4x.png diff --git a/Frontend/web/splash/img/light-1x.gif b/mih_ui/web/splash/img/light-1x.gif similarity index 100% rename from Frontend/web/splash/img/light-1x.gif rename to mih_ui/web/splash/img/light-1x.gif diff --git a/Frontend/web/splash/img/light-1x.png b/mih_ui/web/splash/img/light-1x.png similarity index 100% rename from Frontend/web/splash/img/light-1x.png rename to mih_ui/web/splash/img/light-1x.png diff --git a/Frontend/web/splash/img/light-2x.gif b/mih_ui/web/splash/img/light-2x.gif similarity index 100% rename from Frontend/web/splash/img/light-2x.gif rename to mih_ui/web/splash/img/light-2x.gif diff --git a/Frontend/web/splash/img/light-2x.png b/mih_ui/web/splash/img/light-2x.png similarity index 100% rename from Frontend/web/splash/img/light-2x.png rename to mih_ui/web/splash/img/light-2x.png diff --git a/Frontend/web/splash/img/light-3x.gif b/mih_ui/web/splash/img/light-3x.gif similarity index 100% rename from Frontend/web/splash/img/light-3x.gif rename to mih_ui/web/splash/img/light-3x.gif diff --git a/Frontend/web/splash/img/light-3x.png b/mih_ui/web/splash/img/light-3x.png similarity index 100% rename from Frontend/web/splash/img/light-3x.png rename to mih_ui/web/splash/img/light-3x.png diff --git a/Frontend/web/splash/img/light-4x.gif b/mih_ui/web/splash/img/light-4x.gif similarity index 100% rename from Frontend/web/splash/img/light-4x.gif rename to mih_ui/web/splash/img/light-4x.gif diff --git a/Frontend/web/splash/img/light-4x.png b/mih_ui/web/splash/img/light-4x.png similarity index 100% rename from Frontend/web/splash/img/light-4x.png rename to mih_ui/web/splash/img/light-4x.png diff --git a/Frontend/web/wallpaper.png b/mih_ui/web/wallpaper.png similarity index 100% rename from Frontend/web/wallpaper.png rename to mih_ui/web/wallpaper.png diff --git a/Frontend/windows/.gitignore b/mih_ui/windows/.gitignore similarity index 100% rename from Frontend/windows/.gitignore rename to mih_ui/windows/.gitignore diff --git a/Frontend/windows/CMakeLists.txt b/mih_ui/windows/CMakeLists.txt similarity index 100% rename from Frontend/windows/CMakeLists.txt rename to mih_ui/windows/CMakeLists.txt diff --git a/Frontend/windows/flutter/CMakeLists.txt b/mih_ui/windows/flutter/CMakeLists.txt similarity index 100% rename from Frontend/windows/flutter/CMakeLists.txt rename to mih_ui/windows/flutter/CMakeLists.txt diff --git a/Frontend/windows/flutter/generated_plugin_registrant.cc b/mih_ui/windows/flutter/generated_plugin_registrant.cc similarity index 93% rename from Frontend/windows/flutter/generated_plugin_registrant.cc rename to mih_ui/windows/flutter/generated_plugin_registrant.cc index f08708cc..ad71ace9 100644 --- a/Frontend/windows/flutter/generated_plugin_registrant.cc +++ b/mih_ui/windows/flutter/generated_plugin_registrant.cc @@ -18,7 +18,6 @@ #include #include #include -#include #include #include @@ -47,8 +46,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("ScreenBrightnessWindowsPlugin")); SharePlusWindowsPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); - SpeechToTextWindowsRegisterWithRegistrar( - registry->GetRegistrarForPlugin("SpeechToTextWindows")); SyncfusionPdfviewerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("SyncfusionPdfviewerWindowsPlugin")); UrlLauncherWindowsRegisterWithRegistrar( diff --git a/Frontend/windows/flutter/generated_plugin_registrant.h b/mih_ui/windows/flutter/generated_plugin_registrant.h similarity index 100% rename from Frontend/windows/flutter/generated_plugin_registrant.h rename to mih_ui/windows/flutter/generated_plugin_registrant.h diff --git a/Frontend/windows/flutter/generated_plugins.cmake b/mih_ui/windows/flutter/generated_plugins.cmake similarity index 97% rename from Frontend/windows/flutter/generated_plugins.cmake rename to mih_ui/windows/flutter/generated_plugins.cmake index 46e96ea5..57f48306 100644 --- a/Frontend/windows/flutter/generated_plugins.cmake +++ b/mih_ui/windows/flutter/generated_plugins.cmake @@ -15,7 +15,6 @@ list(APPEND FLUTTER_PLUGIN_LIST record_windows screen_brightness_windows share_plus - speech_to_text_windows syncfusion_pdfviewer_windows url_launcher_windows ) diff --git a/Frontend/windows/runner/CMakeLists.txt b/mih_ui/windows/runner/CMakeLists.txt similarity index 100% rename from Frontend/windows/runner/CMakeLists.txt rename to mih_ui/windows/runner/CMakeLists.txt diff --git a/Frontend/windows/runner/Runner.rc b/mih_ui/windows/runner/Runner.rc similarity index 100% rename from Frontend/windows/runner/Runner.rc rename to mih_ui/windows/runner/Runner.rc diff --git a/Frontend/windows/runner/flutter_window.cpp b/mih_ui/windows/runner/flutter_window.cpp similarity index 100% rename from Frontend/windows/runner/flutter_window.cpp rename to mih_ui/windows/runner/flutter_window.cpp diff --git a/Frontend/windows/runner/flutter_window.h b/mih_ui/windows/runner/flutter_window.h similarity index 100% rename from Frontend/windows/runner/flutter_window.h rename to mih_ui/windows/runner/flutter_window.h diff --git a/Frontend/windows/runner/main.cpp b/mih_ui/windows/runner/main.cpp similarity index 100% rename from Frontend/windows/runner/main.cpp rename to mih_ui/windows/runner/main.cpp diff --git a/Frontend/windows/runner/resource.h b/mih_ui/windows/runner/resource.h similarity index 100% rename from Frontend/windows/runner/resource.h rename to mih_ui/windows/runner/resource.h diff --git a/Frontend/windows/runner/resources/app_icon.ico b/mih_ui/windows/runner/resources/app_icon.ico similarity index 100% rename from Frontend/windows/runner/resources/app_icon.ico rename to mih_ui/windows/runner/resources/app_icon.ico diff --git a/Frontend/windows/runner/runner.exe.manifest b/mih_ui/windows/runner/runner.exe.manifest similarity index 100% rename from Frontend/windows/runner/runner.exe.manifest rename to mih_ui/windows/runner/runner.exe.manifest diff --git a/Frontend/windows/runner/utils.cpp b/mih_ui/windows/runner/utils.cpp similarity index 100% rename from Frontend/windows/runner/utils.cpp rename to mih_ui/windows/runner/utils.cpp diff --git a/Frontend/windows/runner/utils.h b/mih_ui/windows/runner/utils.h similarity index 100% rename from Frontend/windows/runner/utils.h rename to mih_ui/windows/runner/utils.h diff --git a/Frontend/windows/runner/win32_window.cpp b/mih_ui/windows/runner/win32_window.cpp similarity index 100% rename from Frontend/windows/runner/win32_window.cpp rename to mih_ui/windows/runner/win32_window.cpp diff --git a/Frontend/windows/runner/win32_window.h b/mih_ui/windows/runner/win32_window.h similarity index 100% rename from Frontend/windows/runner/win32_window.h rename to mih_ui/windows/runner/win32_window.h diff --git a/test/build log b/test/build log new file mode 100644 index 00000000..82107c7a --- /dev/null +++ b/test/build log @@ -0,0 +1,775 @@ +flutter build ipa -t ./lib/main_prod.dart +Changing current working directory to: /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui +Archiving za.co.mzansiinnovationhub.mih... +Automatically signing iOS for device deployment using specified development team in Xcode project: B88N73P46W +Running Xcode build... +Xcode archive done. 32,5s +Failed to build iOS app +Error output from Xcode build: +↳ + ** ARCHIVE FAILED ** + + Error saving invocation record to resultBundlePath:Error Domain=NSCocoaErrorDomain Code=640 "You can’t save the file + “temporary_xcresult_bundle” because the volume “Macintosh HD” is out of space." + UserInfo={NSFilePath=/var/folders/2m/swywvgx56d3605sg4w8sngww0000gn/T/flutter_tools.aH1LfW/flutter_ios_build_temp_dirJdwxh4/temporar + y_xcresult_bundle, + NSURL=file:///var/folders/2m/swywvgx56d3605sg4w8sngww0000gn/T/flutter_tools.aH1LfW/flutter_ios_build_temp_dirJdwxh4/temporary_xcresu + lt_bundle, NSUnderlyingError=0xae2511410 {Error Domain=NSPOSIXErrorDomain Code=28 "No space left on device"}} + 2026-02-03 13:36:07.006 xcodebuild[21814:255686] Error saving log: Error Domain=NSPOSIXErrorDomain Code=28 "No space left on device" + UserInfo={NSFilePath=/Users/yaso_meth/Library/Developer/Xcode/DerivedData/Runner-arhyuyobdpeynoewowlninbnlucj/Logs/Build/CC2A62F6-2D + 74-4874-8228-5C76EF29C20A.xcactivitylog, NSLocalizedDescription=No space left on device} | User info: { + NSFilePath = + "/Users/yaso_meth/Library/Developer/Xcode/DerivedData/Runner-arhyuyobdpeynoewowlninbnlucj/Logs/Build/CC2A62F6-2D74-4874-8228-5C7 + 6EF29C20A.xcactivitylog"; + NSLocalizedDescription = "No space left on device"; + } + +Xcode's output: +↳ + Writing result bundle at path: + /var/folders/2m/swywvgx56d3605sg4w8sngww0000gn/T/flutter_tools.aH1LfW/flutter_ios_build_temp_dirJdwxh4/temporary_xcresult_bundle + + /* com.apple.ibtool.document.warnings */ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GAD + TFullScreenTemplateView.xib:Zvt-Hz-Es8: warning: Automatically Adjusts Font requires using a Dynamic Type text style [9] + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GAD + TFullScreenTemplateView.xib:3p6-ul-eji: warning: Automatically Adjusts Font requires using a Dynamic Type text style [9] + /Users/yaso_meth/.pub-cache/hosted/pub.dev/printing-5.14.2/ios/Classes/PrintJob.swift:269:70: warning: 'keyWindow' was deprecated in + iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes + let controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/printing-5.14.2/ios/Classes/PrintJob.swift:273:30: warning: 'keyWindow' was deprecated in + iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes + UIApplication.shared.keyWindow?.rootViewController?.present(activityViewController, animated: true) + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/printing-5.14.2/ios/Classes/PrintJob.swift:356:74: warning: 'keyWindow' was deprecated in + iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes + let viewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/Classes/AudioCategoryOptions.swift:25:15: warning: 'allowBluetooth' + was deprecated in iOS 8.0: renamed to 'AVAudioSession.CategoryOptions.allowBluetoothHFP' + return .allowBluetooth + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/Classes/AudioCategoryOptions.swift:25:15: note: use + 'AVAudioSession.CategoryOptions.allowBluetoothHFP' instead + return .allowBluetooth + ^~~~~~~~~~~~~~ + AVAudioSession.CategoryOptions.allowBluetoothHFP + /Users/yaso_meth/.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/Classes/SwiftFlutterTtsPlugin.swift:10:7: warning: stored property + 'synthesizer' of 'Sendable'-conforming class 'SwiftFlutterTtsPlugin' has non-Sendable type 'AVSpeechSynthesizer' + let synthesizer = AVSpeechSynthesizer() + ^ + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.1.sdk/System/Library/Frameworks/AVF + Audio.framework/Headers/AVSpeechSynthesis.h:227:12: note: class 'AVSpeechSynthesizer' does not conform to the 'Sendable' protocol + @interface AVSpeechSynthesizer : NSObject + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPl + ugin.m:85:45: warning: implicit conversion loses integer precision: 'vm_size_t' (aka 'unsigned long') to 'natural_t' (aka 'unsigned + int') [-Wshorten-64-to-32] + 85 | natural_t mem_free = vm_stat.free_count * page_size; + | ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~ + 1 warning generated. + /Users/yaso_meth/.pub-cache/hosted/pub.dev/syncfusion_flutter_pdfviewer-29.2.10/ios/syncfusion_flutter_pdfviewer/Sources/syncfusion_ + flutter_pdfviewer/SyncfusionFlutterPdfViewerPlugin.swift:151:13: warning: initialization of immutable value 'imageRect' was never + used; consider replacing with assignment to '_' or removing it + let imageRect = CGRect(x: 0,y: 0,width: width,height: height) + ~~~~^~~~~~~~~ + _ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/InputHelper.swift:15:70: warning: + 'allowBluetooth' was deprecated in iOS 8.0: renamed to 'AVAudioSession.CategoryOptions.allowBluetoothHFP' + let options: AVAudioSession.CategoryOptions = [.defaultToSpeaker, .allowBluetooth] + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/InputHelper.swift:15:70: note: use + 'AVAudioSession.CategoryOptions.allowBluetoothHFP' instead + let options: AVAudioSession.CategoryOptions = [.defaultToSpeaker, .allowBluetooth] + ^~~~~~~~~~~~~~ + AVAudioSession.CategoryOptions.allowBluetoothHFP + /Users/yaso_meth/.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/RecordIosPlugin.swift:289:47: warning: + 'allowBluetooth' was deprecated in iOS 8.0: renamed to 'AVAudioSession.CategoryOptions.allowBluetoothHFP' + case "allowBluetooth": result.insert(.allowBluetooth) + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/RecordIosPlugin.swift:289:47: note: + use 'AVAudioSession.CategoryOptions.allowBluetoothHFP' instead + case "allowBluetooth": result.insert(.allowBluetooth) + ^~~~~~~~~~~~~~ + AVAudioSession.CategoryOptions.allowBluetoothHFP + /Users/yaso_meth/.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/darwin/mobile_scanner/Sources/mobile_scanner/MobileScannerPlugin.swi + ft:866:20: warning: immutable value 'device' was never used; consider replacing with '_' or removing it + let device = object as? AVCaptureDevice { + ~~~~^~~~~~ + _ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter + _wkwebview/HTTPCookieProxyAPIDelegate.swift:17:42: warning: cannot explicitly specialize instance method 'map' + let keyValueTuples = try! properties.map<[(HTTPCookiePropertyKey, Any)], PigeonError> { + ^ + Swift.Collection.map:2:24: note: 'map' declared here + @inlinable public func map(_ transform: (Self.Element) throws(E) -> T) throws(E) -> [T] where E : Error} + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/file_saver-0.3.1/ios/Classes/Dialog.swift:26:55: warning: 'keyWindow' was deprecated in + iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes + let viewController = UIApplication.shared.keyWindow? + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/Permiss + ionHandler.m:40:31: warning: 'authorizationStatus' is deprecated: first deprecated in iOS 14.0 [-Wdeprecated-declarations] + 40 | return [CLLocationManager authorizationStatus]; + | ^~~~~~~~~~~~~~~~~~~ + | authorizationStatus + In module 'CoreLocation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/../incl + ude/geolocator_apple/Handlers/PermissionHandler.h:11: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.1.sdk/System/Library/Frameworks/Cor + eLocation.framework/Headers/CLLocationManager.h:224:1: note: 'authorizationStatus' has been explicitly marked deprecated here + 224 | + (CLAuthorizationStatus)authorizationStatus API_DEPRECATED_WITH_REPLACEMENT("-authorizationStatus", ios(4.2, 14.0), + macos(10.7, 11.0), watchos(1.0, 7.0), tvos(9.0, 14.0)); + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/Permiss + ionHandler.m:47:65: warning: 'authorizationStatus' is deprecated: first deprecated in iOS 14.0 [-Wdeprecated-declarations] + 47 | CLAuthorizationStatus authorizationStatus = CLLocationManager.authorizationStatus; + | ^~~~~~~~~~~~~~~~~~~ + | authorizationStatus + In module 'CoreLocation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/../incl + ude/geolocator_apple/Handlers/PermissionHandler.h:11: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.1.sdk/System/Library/Frameworks/Cor + eLocation.framework/Headers/CLLocationManager.h:224:1: note: 'authorizationStatus' has been explicitly marked deprecated here + 224 | + (CLAuthorizationStatus)authorizationStatus API_DEPRECATED_WITH_REPLACEMENT("-authorizationStatus", ios(4.2, 14.0), + macos(10.7, 11.0), watchos(1.0, 7.0), tvos(9.0, 14.0)); + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/Permiss + ionHandler.m:47:65: warning: 'authorizationStatus' is deprecated: first deprecated in iOS 14.0 [-Wdeprecated-declarations] + 47 | CLAuthorizationStatus authorizationStatus = CLLocationManager.authorizationStatus; + | ^~~~~~~~~~~~~~~~~~~ + | authorizationStatus + In module 'CoreLocation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/../incl + ude/geolocator_apple/Handlers/PermissionHandler.h:11: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.1.sdk/System/Library/Frameworks/Cor + eLocation.framework/Headers/CLLocationManager.h:224:1: note: 'authorizationStatus' has been explicitly marked deprecated here + 224 | + (CLAuthorizationStatus)authorizationStatus API_DEPRECATED_WITH_REPLACEMENT("-authorizationStatus", ios(4.2, 14.0), + macos(10.7, 11.0), watchos(1.0, 7.0), tvos(9.0, 14.0)); + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/Permiss + ionHandler.m:107:1: warning: implementing deprecated method [-Wdeprecated-implementations] + 107 | - (void) locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { + | ^ + In module 'CoreLocation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/../incl + ude/geolocator_apple/Handlers/PermissionHandler.h:11: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.1.sdk/System/Library/Frameworks/Cor + eLocation.framework/Headers/CLLocationManagerDelegate.h:164:1: note: method 'locationManager:didChangeAuthorizationStatus:' declared + here + 164 | - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status + API_DEPRECATED_WITH_REPLACEMENT("-locationManagerDidChangeAuthorization:", ios(4.2, 14.0), macos(10.7, 11.0), watchos(1.0, 7.0), + tvos(9.0, 14.0)) API_UNAVAILABLE(visionos); + | ^ + 4 warnings generated. + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/Locatio + nServiceStreamHandler.m:36:1: warning: implementing deprecated method [-Wdeprecated-implementations] + 36 | - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{ + | ^ + In module 'CoreLocation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/Locatio + nServiceStreamHandler.m:9: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.1.sdk/System/Library/Frameworks/Cor + eLocation.framework/Headers/CLLocationManagerDelegate.h:164:1: note: method 'locationManager:didChangeAuthorizationStatus:' declared + here + 164 | - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status + API_DEPRECATED_WITH_REPLACEMENT("-locationManagerDidChangeAuthorization:", ios(4.2, 14.0), macos(10.7, 11.0), watchos(1.0, 7.0), + tvos(9.0, 14.0)) API_UNAVAILABLE(visionos); + | ^ + 1 warning generated. + :1:9: note: in file included from :1: + 1 | #import "Headers/camera_avfoundation-umbrella.h" + | `- note: in file included from :1: + 2 | + + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Target Support + Files/camera_avfoundation/camera_avfoundation-umbrella.h:14:9: note: in file included from + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Target Support + Files/camera_avfoundation/camera_avfoundation-umbrella.h:14: + 12 | + 13 | #import "CameraProperties.h" + 14 | #import "camera_avfoundation.h" + | `- note: in file included from /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Target Support + Files/camera_avfoundation/camera_avfoundation-umbrella.h:14: + 15 | #import "FLTAssetWriter.h" + 16 | #import "FLTCam.h" + + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/camera_avfoundation.h:5:9: note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/camera_avfoundation.h:5: + 3 | // found in the LICENSE file. + 4 | + 5 | #import "FLTCam.h" + | `- note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/ + include/camera_avfoundation/camera_avfoundation.h:5: + 6 | #import "FLTCamConfiguration.h" + 7 | #import "FLTCameraDeviceDiscovering.h" + + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCam.h:11:9: note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCam.h:11: + 9 | + 10 | #import "CameraProperties.h" + 11 | #import "FLTCamConfiguration.h" + | `- note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/ + include/camera_avfoundation/FLTCam.h:11: + 12 | #import "FLTCamMediaSettingsAVWrapper.h" + 13 | #import "FLTCaptureDevice.h" + + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCamConfiguration.h:11:9: note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCamConfiguration.h:11: + 9 | #import "CameraProperties.h" + 10 | #import "FLTAssetWriter.h" + 11 | #import "FLTCamMediaSettingsAVWrapper.h" + | `- note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/ + include/camera_avfoundation/FLTCamConfiguration.h:11: + 12 | #import "FLTCaptureDevice.h" + 13 | #import "FLTCaptureSession.h" + + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCamMediaSettingsAVWrapper.h:11:9: note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCamMediaSettingsAVWrapper.h:11: + 9 | #import "FLTCaptureDevice.h" + 10 | #import "FLTCaptureSession.h" + 11 | #import "FLTCaptureVideoDataOutput.h" + | `- note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc + /include/camera_avfoundation/FLTCamMediaSettingsAVWrapper.h:11: + 12 | + 13 | NS_ASSUME_NONNULL_BEGIN + + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCaptureVideoDataOutput.h:8:9: note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCaptureVideoDataOutput.h:8: + 6 | @import AVFoundation; + 7 | + 8 | #import "FLTCaptureOutput.h" + | `- note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/ + include/camera_avfoundation/FLTCaptureVideoDataOutput.h:8: + 9 | + 10 | NS_ASSUME_NONNULL_BEGIN + + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCaptureOutput.h:8:9: note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCaptureOutput.h:8: + 6 | @import AVFoundation; + 7 | + 8 | #import "FLTCaptureConnection.h" + | `- note: in file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/ + include/camera_avfoundation/FLTCaptureOutput.h:8: + 9 | + 10 | NS_ASSUME_NONNULL_BEGIN + + 1 warning generated. + /Users/yaso_meth/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/inc + lude/camera_avfoundation/FLTCaptureConnection.h:17:22: warning: 'AVCaptureVideoOrientation' is deprecated: first deprecated in iOS + 17.0 - Use AVCaptureDeviceRotationCoordinator instead + 15 | + 16 | /// Corresponds to the `videoOrientation` property of `AVCaptureConnection` + 17 | @property(nonatomic) AVCaptureVideoOrientation videoOrientation; + | `- warning: 'AVCaptureVideoOrientation' is deprecated: first deprecated in iOS 17.0 - Use + AVCaptureDeviceRotationCoordinator instead + 18 | + 19 | /// Corresponds to the `inputPorts` property of `AVCaptureConnection` + + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.1.sdk/System/Library/Frameworks/AVF + oundation.framework/Headers/AVCaptureSession.h:132:28: note: 'AVCaptureVideoOrientation' has been explicitly marked deprecated here + 130 | Indicates that video should be oriented horizontally, home button on the left. + 131 | */ + 132 | typedef NS_ENUM(NSInteger, AVCaptureVideoOrientation) { + | `- note: 'AVCaptureVideoOrientation' has been explicitly marked deprecated here + 133 | AVCaptureVideoOrientationPortrait = 1, + 134 | AVCaptureVideoOrientationPortraitUpsideDown = 2, + /Users/yaso_meth/.pub-cache/hosted/pub.dev/app_settings-6.1.1/ios/app_settings/Sources/app_settings/AppSettingsPlugin.swift:6:43: + warning: conformance of 'AppSettingsPlugin' to protocol 'FlutterPlugin' crosses into main actor-isolated code and can cause data + races; this is an error in the Swift 6 language mode + public class AppSettingsPlugin: NSObject, FlutterPlugin, UIWindowSceneDelegate { + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/app_settings-6.1.1/ios/app_settings/Sources/app_settings/AppSettingsPlugin.swift:6:43: + note: isolate this conformance to the main actor with '@MainActor' + public class AppSettingsPlugin: NSObject, FlutterPlugin, UIWindowSceneDelegate { + ^ + @MainActor + /Users/yaso_meth/.pub-cache/hosted/pub.dev/app_settings-6.1.1/ios/app_settings/Sources/app_settings/AppSettingsPlugin.swift:6:14: + note: mark all declarations used in the conformance 'nonisolated' + public class AppSettingsPlugin: NSObject, FlutterPlugin, UIWindowSceneDelegate { + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/app_settings-6.1.1/ios/app_settings/Sources/app_settings/AppSettingsPlugin.swift:6:43: + note: turn data races into runtime errors with '@preconcurrency' + public class AppSettingsPlugin: NSObject, FlutterPlugin, UIWindowSceneDelegate { + ^ + @preconcurrency + /Users/yaso_meth/.pub-cache/hosted/pub.dev/app_settings-6.1.1/ios/app_settings/Sources/app_settings/AppSettingsPlugin.swift:7:24: + note: main actor-isolated static method 'register(with:)' cannot satisfy nonisolated requirement + public static func register(with registrar: FlutterPluginRegistrar) { + ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/app_settings-6.1.1/ios/app_settings/Sources/app_settings/AppSettingsPlugin.swift:13:17: + note: main actor-isolated instance method 'handle(_:result:)' cannot satisfy nonisolated requirement + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:24:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 24 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:16: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:16: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:21: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:33:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 33 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:16: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:16: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:21: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:117:13: + warning: 'mediationExtrasIdentifier' is deprecated: Use mediationExtras instead. [-Wdeprecated-declarations] + 117 | request.mediationExtrasIdentifier = [self readValueOfType:[self readByte]]; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:15: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:91:5: note: + 'mediationExtrasIdentifier' has been explicitly marked deprecated here + 91 | DEPRECATED_MSG_ATTRIBUTE("Use mediationExtras instead."); + | ^ + In module 'Foundation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:17: + In module 'CoreFoundation' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundat + ion.framework/Headers/Foundation.h:6: + In module '_DarwinFoundation1' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreFou + ndation.framework/Headers/CoreFoundation.h:14: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/AvailabilityMacros.h: + 152:64: note: expanded from macro 'DEPRECATED_MSG_ATTRIBUTE' + 152 | #define DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s))) + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:118:13: + warning: 'mediationNetworkExtrasProvider' is deprecated: Use mediationExtras instead. [-Wdeprecated-declarations] + 118 | request.mediationNetworkExtrasProvider = _mediationNetworkExtrasProvider; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:15: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:94:5: note: + 'mediationNetworkExtrasProvider' has been explicitly marked deprecated here + 94 | DEPRECATED_MSG_ATTRIBUTE("Use mediationExtras instead."); + | ^ + In module 'Foundation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:17: + In module 'CoreFoundation' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundat + ion.framework/Headers/Foundation.h:6: + In module '_DarwinFoundation1' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreFou + ndation.framework/Headers/CoreFoundation.h:14: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/AvailabilityMacros.h: + 152:64: note: expanded from macro 'DEPRECATED_MSG_ATTRIBUTE' + 152 | #define DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s))) + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:209:13: + warning: 'mediationExtrasIdentifier' is deprecated: Use mediationExtras instead. [-Wdeprecated-declarations] + 209 | request.mediationExtrasIdentifier = [self readValueOfType:[self readByte]]; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:15: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:91:5: note: + 'mediationExtrasIdentifier' has been explicitly marked deprecated here + 91 | DEPRECATED_MSG_ATTRIBUTE("Use mediationExtras instead."); + | ^ + In module 'Foundation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:17: + In module 'CoreFoundation' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundat + ion.framework/Headers/Foundation.h:6: + In module '_DarwinFoundation1' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreFou + ndation.framework/Headers/CoreFoundation.h:14: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/AvailabilityMacros.h: + 152:64: note: expanded from macro 'DEPRECATED_MSG_ATTRIBUTE' + 152 | #define DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s))) + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:210:13: + warning: 'mediationNetworkExtrasProvider' is deprecated: Use mediationExtras instead. [-Wdeprecated-declarations] + 210 | request.mediationNetworkExtrasProvider = _mediationNetworkExtrasProvider; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:15: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:94:5: note: + 'mediationNetworkExtrasProvider' has been explicitly marked deprecated here + 94 | DEPRECATED_MSG_ATTRIBUTE("Use mediationExtras instead."); + | ^ + In module 'Foundation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:17: + In module 'CoreFoundation' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundat + ion.framework/Headers/Foundation.h:6: + In module '_DarwinFoundation1' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreFou + ndation.framework/Headers/CoreFoundation.h:14: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/AvailabilityMacros.h: + 152:64: note: expanded from macro 'DEPRECATED_MSG_ATTRIBUTE' + 152 | #define DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s))) + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:389:30: + warning: 'mediationExtrasIdentifier' is deprecated: Use mediationExtras instead. [-Wdeprecated-declarations] + 389 | [self writeValue:request.mediationExtrasIdentifier]; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:15: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:91:5: note: + 'mediationExtrasIdentifier' has been explicitly marked deprecated here + 91 | DEPRECATED_MSG_ATTRIBUTE("Use mediationExtras instead."); + | ^ + In module 'Foundation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:17: + In module 'CoreFoundation' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundat + ion.framework/Headers/Foundation.h:6: + In module '_DarwinFoundation1' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreFou + ndation.framework/Headers/CoreFoundation.h:14: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/AvailabilityMacros.h: + 152:64: note: expanded from macro 'DEPRECATED_MSG_ATTRIBUTE' + 152 | #define DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s))) + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:399:30: + warning: 'mediationExtrasIdentifier' is deprecated: Use mediationExtras instead. [-Wdeprecated-declarations] + 399 | [self writeValue:request.mediationExtrasIdentifier]; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:15: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:91:5: note: + 'mediationExtrasIdentifier' has been explicitly marked deprecated here + 91 | DEPRECATED_MSG_ATTRIBUTE("Use mediationExtras instead."); + | ^ + In module 'Foundation' imported from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:17: + In module 'CoreFoundation' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundat + ion.framework/Headers/Foundation.h:6: + In module '_DarwinFoundation1' imported from + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreFou + ndation.framework/Headers/CoreFoundation.h:14: + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/AvailabilityMacros.h: + 152:64: note: expanded from macro 'DEPRECATED_MSG_ATTRIBUTE' + 152 | #define DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s))) + | ^ + 8 warnings generated. + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.m:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:19: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:24:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 24 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.m:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:19: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:18: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.m:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:19: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:33:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 33 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.m:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:19: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:18: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.m:70:6: warning: + 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 70 | id _mediationNetworkExtrasProvider; + | ^ + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.m:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:19: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:18: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + 3 warnings generated. + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:24:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 24 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:16: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:33:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 33 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:16: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + 2 warnings generated. + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.m:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:24:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 24 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.m:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:16: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:16: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:21: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.m:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:33:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 33 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.m:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:16: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h:16: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:21: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + 2 warnings generated. + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:24:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 24 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:16: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:21: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:17: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h:33:5: + warning: 'FLTMediationNetworkExtrasProvider' is deprecated [-Wdeprecated-declarations] + 33 | FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + | ^ + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.m:15: + In file included from + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h:15: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h:16: + In file included from /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h:21: + /Users/yaso_meth/.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h:24:16: note: + 'FLTMediationNetworkExtrasProvider' has been explicitly marked deprecated here + 24 | __attribute__((deprecated)) + | ^ + 2 warnings generated. + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/DKPhotoGallery/DKPhotoGallery/DKPhotoGalleryContentVC.swift:39:5 + 2: warning: using 'class' keyword to define a class-constrained protocol is deprecated; use 'AnyObject' instead + internal protocol DKPhotoGalleryContentDataSource: class { + ^~~~~ + AnyObject + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/DKPhotoGallery/DKPhotoGallery/DKPhotoGalleryContentVC.swift:55:5 + 0: warning: using 'class' keyword to define a class-constrained protocol is deprecated; use 'AnyObject' instead + internal protocol DKPhotoGalleryContentDelegate: class { + ^~~~~ + AnyObject + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/DKPhotoGallery/DKPhotoGallery/DKPhotoIncrementalIndicator.swift: + 161:124: warning: forming 'UnsafeMutableRawPointer' to an inout variable of type String exposes the internal representation rather + than the string contents. + scrollView.addObserver(self, forKeyPath: DKPhotoIncrementalIndicator.contentSizeKeyPath, options: [.new], context: + &DKPhotoIncrementalIndicator.context) + ^ + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/DKPhotoGallery/DKPhotoGallery/DKPhotoIncrementalIndicator.swift: + 162:126: warning: forming 'UnsafeMutableRawPointer' to an inout variable of type String exposes the internal representation rather + than the string contents. + scrollView.addObserver(self, forKeyPath: DKPhotoIncrementalIndicator.contentOffsetKeyPath, options: [.new], context: + &DKPhotoIncrementalIndicator.context) + ^ + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/DKPhotoGallery/DKPhotoGallery/DKPhotoIncrementalIndicator.swift: + 171:23: warning: forming 'UnsafeMutableRawPointer' to an inout variable of type String exposes the internal representation rather + than the string contents. + if context == &DKPhotoIncrementalIndicator.context { + ^ + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/DKImagePickerController/Sources/DKImagePickerController/DKImageA + ssetExporter.swift:557:38: warning: capture of 'fileManager' with non-Sendable type 'FileManager' in an isolated local function; + this is an error in the Swift 6 language mode + try? fileManager.removeItem(at: auxiliaryDirectory) + ^ + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.1.sdk/System/Library/Frameworks/Fou + ndation.framework/Headers/NSFileManager.h:96:12: note: class 'FileManager' does not conform to the 'Sendable' protocol + @interface NSFileManager : NSObject + ^ + ld: write() failed, errno=28 + clang: error: linker command failed with exit code 1 (use -v to see invocation) + note: Run script build phase 'Run Script' will be run during every build because the option to run the script phase "Based on + dependency analysis" is unchecked. (in target 'Runner' from project 'Runner') + note: Run script build phase 'Thin Binary' will be run during every build because the option to run the script phase "Based on + dependency analysis" is unchecked. (in target 'Runner' from project 'Runner') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'screen_brightness_ios-screen_brightness_ios_privacy' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 11.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'geolocator_apple-geolocator_apple_privacy' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'flutter_native_splash-flutter_native_splash_privacy' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'fl_downloader-fl_downloader_privacy' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 11.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'app_settings-app_settings_privacy' from project 'Pods') + warning: no rule to process file + '/Users/yaso_meth/.pub-cache/hosted/pub.dev/app_settings-6.1.1/ios/app_settings/Sources/app_settings/PrivacyInfo.xcprivacy' of type + 'text.xml' for architecture 'arm64' (in target 'app_settings' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'SwiftyGif-SwiftyGif' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'SwiftyGif' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'SDWebImage-SDWebImage' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'SDWebImage' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 11.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'RecaptchaInterop' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'PromisesObjC-FBLPromises_Privacy' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'PromisesObjC' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'DKPhotoGallery-DKPhotoGallery' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'DKPhotoGallery' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'DKImagePickerController-DKImagePickerController' from project 'Pods') + /Users/yaso_meth/Git/mih_main/Mzanzi-Innovation-Hub/mih_ui/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target + 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 26.1.99. (in target + 'DKImagePickerController' from project 'Pods') + +Encountered error while archiving for device. \ No newline at end of file