fix platform specific code not working on web

This commit is contained in:
2026-02-25 12:05:07 +02:00
parent 281ea863e8
commit 5135629b33
11 changed files with 29 additions and 14 deletions

View File

@@ -20,7 +20,15 @@ abstract class AppEnviroment {
switch (env) { switch (env) {
case Enviroment.dev: case Enviroment.dev:
{ {
if (kIsWeb || Platform.isIOS || Platform.isLinux) { if (kIsWeb) {
//================= Web Dev Urls =================
baseAppUrl = "http://localhost:80";
baseApiUrl = "http://localhost:8080";
baseFileUrl = "http://localhost:9000";
baseAiUrl = "http://localhost:11434";
bannerAdUnitId = 'ca-app-pub-3940256099942544/2435281174'; // IOS ID
break;
} else if (Platform.isIOS || Platform.isLinux) {
//================= Web Dev Urls ================= //================= Web Dev Urls =================
baseAppUrl = "http://localhost:80"; baseAppUrl = "http://localhost:80";
baseApiUrl = "http://localhost:8080"; baseApiUrl = "http://localhost:8080";

View File

@@ -2,6 +2,7 @@ import 'dart:io';
import 'package:country_code_picker/country_code_picker.dart'; import 'package:country_code_picker/country_code_picker.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
@@ -453,7 +454,8 @@ class _PackageToolOneState extends State<PackageToolOne> {
), ),
], ],
), ),
if (Platform.isAndroid || Platform.isIOS) MihBannerAd(), if (!kIsWeb && (Platform.isAndroid || Platform.isIOS))
MihBannerAd(),
const SizedBox(height: 10), const SizedBox(height: 10),
Divider( Divider(
color: MihColors.getSecondaryColor( color: MihColors.getSecondaryColor(

View File

@@ -1,5 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:ken_logger/ken_logger.dart'; import 'package:ken_logger/ken_logger.dart';
@@ -101,7 +102,7 @@ class _MihPackageState extends State<MihPackage>
// _peakAnimation(); // _peakAnimation();
// }); // });
// } // }
if (Platform.isAndroid || Platform.isIOS) { if (!kIsWeb && Platform.isAndroid || Platform.isIOS) {
// Trigger the peak animation only AFTER the route transition is complete // Trigger the peak animation only AFTER the route transition is complete
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
final ModalRoute? currentRoute = ModalRoute.of(context); final ModalRoute? currentRoute = ModalRoute.of(context);

View File

@@ -1,5 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/main.dart';
@@ -159,7 +160,7 @@ class _CurrencyExchangeRateState extends State<CurrencyExchangeRate> {
), ),
SizedBox(height: 10), SizedBox(height: 10),
Consumer(builder: (context, bannerAdDisplay, child) { Consumer(builder: (context, bannerAdDisplay, child) {
if (Platform.isAndroid || Platform.isIOS) { if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
return MihBannerAd(); return MihBannerAd();
} else { } else {
return const SizedBox(height: 0); return const SizedBox(height: 0);

View File

@@ -231,7 +231,7 @@ class _TipCalcState extends State<TipCalc> {
), ),
SizedBox(height: 10), SizedBox(height: 10),
Consumer(builder: (context, bannerAdDisplay, child) { Consumer(builder: (context, bannerAdDisplay, child) {
if (Platform.isAndroid || Platform.isIOS) { if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
return MihBannerAd(); return MihBannerAd();
} else { } else {
return const SizedBox(height: 0); return const SizedBox(height: 0);

View File

@@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'dart:math'; import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
@@ -852,7 +853,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
], ],
), ),
), ),
_timer != null && (Platform.isAndroid || Platform.isIOS) _timer != null && !kIsWeb && (Platform.isAndroid || Platform.isIOS)
? MihBannerAd() ? MihBannerAd()
: SizedBox(), : SizedBox(),
SizedBox(height: 15), SizedBox(height: 15),

View File

@@ -129,7 +129,7 @@ class _MihAiChatState extends State<MihAiChat> with WidgetsBindingObserver {
} }
if (textToSpeak != null) { if (textToSpeak != null) {
if (Platform.isLinux) { if (!kIsWeb && Platform.isLinux) {
// Linux Workaround: Use Speech Dispatcher (standard on most distros) // Linux Workaround: Use Speech Dispatcher (standard on most distros)
// '-t female1' is optional for voice variety // '-t female1' is optional for voice variety
Process.run('spd-say', [textToSpeak]); Process.run('spd-say', [textToSpeak]);
@@ -204,7 +204,7 @@ class _MihAiChatState extends State<MihAiChat> with WidgetsBindingObserver {
// } // }
void stopTTS(MzansiAiProvider aiProvider) { void stopTTS(MzansiAiProvider aiProvider) {
if (Platform.isLinux) { if (!kIsWeb && Platform.isLinux) {
Process.run('spd-say', ['-S']); // The -S flag stops current speech Process.run('spd-say', ['-S']); // The -S flag stops current speech
} else { } else {
_flutterTts.stop(); _flutterTts.stop();
@@ -213,7 +213,7 @@ class _MihAiChatState extends State<MihAiChat> with WidgetsBindingObserver {
} }
Future<void> initTts(MzansiAiProvider aiProvider) async { Future<void> initTts(MzansiAiProvider aiProvider) async {
if (Platform.isLinux) return; if (!kIsWeb && Platform.isLinux) return;
try { try {
await _flutterTts.setSpeechRate(!kIsWeb ? 0.55 : 1); await _flutterTts.setSpeechRate(!kIsWeb ? 0.55 : 1);
// await _flutterTts.setLanguage("en-US"); // await _flutterTts.setLanguage("en-US");
@@ -284,7 +284,7 @@ class _MihAiChatState extends State<MihAiChat> with WidgetsBindingObserver {
@override @override
void dispose() { void dispose() {
if (!Platform.isLinux) { if (!kIsWeb && !Platform.isLinux) {
_flutterTts.stop(); _flutterTts.stop();
} }
WidgetsBinding.instance.removeObserver(this); WidgetsBinding.instance.removeObserver(this);

View File

@@ -547,7 +547,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
), ),
), ),
SizedBox(height: 10), SizedBox(height: 10),
if (Platform.isAndroid || Platform.isIOS) MihBannerAd() if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) MihBannerAd()
// MihBannerAd(), // MihBannerAd(),
], ],
), ),

View File

@@ -30,7 +30,7 @@ class MihBannerAdProvider extends ChangeNotifier {
} }
void loadBannerAd() { void loadBannerAd() {
if (Platform.isAndroid || Platform.isIOS) { if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
if (bannerAd != null) { if (bannerAd != null) {
bannerAd!.dispose(); bannerAd!.dispose();
bannerAd = null; bannerAd = null;

View File

@@ -1,5 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/main.dart';
@@ -136,7 +137,7 @@ class MihAlertServices {
), ),
const SizedBox(height: 15), const SizedBox(height: 15),
Text( Text(
Platform.isLinux !kIsWeb && Platform.isLinux
? "To get the most out of MIH, we need your location. Please go to your System Settings and enable location services. Once you do that, we can start showing you relevant information based on your location." ? "To get the most out of MIH, we need your location. Please go to your System Settings and enable location services. Once you do that, we can start showing you relevant information based on your location."
: "To get the most out of MIH, we need your location. Please go to the site settings of the app and enable location services. Once you do that, we can start showing you relevant information based on your location.", : "To get the most out of MIH, we need your location. Please go to the site settings of the app and enable location services. Once you do that, we can start showing you relevant information based on your location.",
style: TextStyle( style: TextStyle(

View File

@@ -1,5 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
@@ -16,7 +17,7 @@ class MIHLocationAPI {
///if user has granted permission (while in use), function will return Position object. ///if user has granted permission (while in use), function will return Position object.
Future<Position?> getGPSPosition(BuildContext context) async { Future<Position?> getGPSPosition(BuildContext context) async {
bool serviceEnabled = await Geolocator.isLocationServiceEnabled(); bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled && Platform.isLinux) { if (!serviceEnabled && !kIsWeb && Platform.isLinux) {
// Direct the user to their System Settings // Direct the user to their System Settings
MihAlertServices().locationPermissionAlert(context); MihAlertServices().locationPermissionAlert(context);
return null; return null;