alert Banner

This commit is contained in:
2025-05-12 13:44:46 +02:00
parent a683ba6bfd
commit 29be02a843
2 changed files with 132 additions and 5 deletions

View File

@@ -14,7 +14,6 @@ import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profi
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tiles/mzansi_setup_business_profile_tile.dart';
import 'package:mzansi_innovation_hub/mih_packages/patient_profile/pat_manager/package_tiles/pat_manager_tile.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_profile/pat_manager/package_tiles/pat_manager_tile.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class MihBusinessHome extends StatefulWidget { class MihBusinessHome extends StatefulWidget {
final AppUser signedInUser; final AppUser signedInUser;
@@ -35,12 +34,32 @@ class MihBusinessHome extends StatefulWidget {
State<MihBusinessHome> createState() => _MihBusinessHomeState(); State<MihBusinessHome> createState() => _MihBusinessHomeState();
} }
class _MihBusinessHomeState extends State<MihBusinessHome> { class _MihBusinessHomeState extends State<MihBusinessHome>
with SingleTickerProviderStateMixin {
final TextEditingController searchController = TextEditingController(); final TextEditingController searchController = TextEditingController();
late List<Map<String, Widget>> businessPackagesMap; late List<Map<String, Widget>> businessPackagesMap;
final ValueNotifier<List<Map<String, Widget>>> searchPackageName = final ValueNotifier<List<Map<String, Widget>>> searchPackageName =
ValueNotifier([]); ValueNotifier([]);
double packageSize = 200; double packageSize = 200;
late final AnimationController _marqueeController;
late final ScrollController _scrollController;
final String maintenanceMsg =
"\tHeads up! We're doing maintenance on Thur, 15 May 2025 at 10 PM (CAT). MIH may be unavailable briefly.";
void _startMarquee() async {
while (mounted) {
final double maxScroll = _scrollController.position.maxScrollExtent;
await Future.delayed(const Duration(milliseconds: 500));
await _scrollController.animateTo(
maxScroll,
duration: _marqueeController.duration!,
curve: Curves.linear,
);
await Future.delayed(const Duration(milliseconds: 500));
_scrollController.jumpTo(0);
await Future.delayed(const Duration(milliseconds: 500));
}
}
List<Map<String, Widget>> setNewBusinessUserPackages() { List<Map<String, Widget>> setNewBusinessUserPackages() {
List<Map<String, Widget>> temp = []; List<Map<String, Widget>> temp = [];
@@ -157,6 +176,12 @@ class _MihBusinessHomeState extends State<MihBusinessHome> {
businessPackagesMap = setBusinessPackages(); businessPackagesMap = setBusinessPackages();
} }
searchPackage(); searchPackage();
_marqueeController = AnimationController(
vsync: this,
duration: const Duration(seconds: 12),
);
_scrollController = ScrollController();
WidgetsBinding.instance.addPostFrameCallback((_) => _startMarquee());
} }
@override @override
@@ -174,6 +199,44 @@ class _MihBusinessHomeState extends State<MihBusinessHome> {
return MihSingleChildScroll( return MihSingleChildScroll(
child: Column( child: Column(
children: [ children: [
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: MzanziInnovationHub.of(context)!.theme.errorColor(),
),
height: 40,
child: Row(
children: [
Icon(
Icons.warning_amber_rounded,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
size: 40,
),
const SizedBox(
width: 5,
),
Expanded(
child: SingleChildScrollView(
controller: _scrollController,
scrollDirection: Axis.horizontal,
child: Text(
maintenanceMsg,
style: TextStyle(
color: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
],
),
),
const SizedBox(
height: 5,
),
const Text( const Text(
"Business Home", "Business Home",
style: TextStyle( style: TextStyle(
@@ -237,7 +300,6 @@ class _MihBusinessHomeState extends State<MihBusinessHome> {
itemCount: filteredPackages.length, itemCount: filteredPackages.length,
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: packageSize, maxCrossAxisExtent: packageSize,
crossAxisSpacing: 5,
), ),
itemBuilder: (context, index) { itemBuilder: (context, index) {
return filteredPackages[index]; return filteredPackages[index];

View File

@@ -17,7 +17,6 @@ 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/mzansi_wallet/package_tiles/mih_wallet_tile.dart';
import 'package:mzansi_innovation_hub/mih_packages/patient_profile/pat_profile/package_tiles/patient_profile_tile.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_profile/pat_profile/package_tiles/patient_profile_tile.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class MihPersonalHome extends StatefulWidget { class MihPersonalHome extends StatefulWidget {
final AppUser signedInUser; final AppUser signedInUser;
@@ -43,12 +42,32 @@ class MihPersonalHome extends StatefulWidget {
State<MihPersonalHome> createState() => _MihPersonalHomeState(); State<MihPersonalHome> createState() => _MihPersonalHomeState();
} }
class _MihPersonalHomeState extends State<MihPersonalHome> { class _MihPersonalHomeState extends State<MihPersonalHome>
with SingleTickerProviderStateMixin {
final TextEditingController searchController = TextEditingController(); final TextEditingController searchController = TextEditingController();
late List<Map<String, Widget>> personalPackagesMap; late List<Map<String, Widget>> personalPackagesMap;
final ValueNotifier<List<Map<String, Widget>>> searchPackageName = final ValueNotifier<List<Map<String, Widget>>> searchPackageName =
ValueNotifier([]); ValueNotifier([]);
double packageSize = 200; double packageSize = 200;
late final AnimationController _marqueeController;
late final ScrollController _scrollController;
final String maintenanceMsg =
"\tHeads up! We're doing maintenance on Thur, 15 May 2025 at 10 PM (CAT). MIH may be unavailable briefly.";
void _startMarquee() async {
while (mounted) {
final double maxScroll = _scrollController.position.maxScrollExtent;
await Future.delayed(const Duration(milliseconds: 500));
await _scrollController.animateTo(
maxScroll,
duration: _marqueeController.duration!,
curve: Curves.linear,
);
await Future.delayed(const Duration(milliseconds: 500));
_scrollController.jumpTo(0);
await Future.delayed(const Duration(milliseconds: 500));
}
}
List<Map<String, Widget>> setNerUserPersonalPackage() { List<Map<String, Widget>> setNerUserPersonalPackage() {
List<Map<String, Widget>> temp = []; List<Map<String, Widget>> temp = [];
@@ -190,6 +209,8 @@ class _MihPersonalHomeState extends State<MihPersonalHome> {
super.dispose(); super.dispose();
searchController.removeListener(searchPackage); searchController.removeListener(searchPackage);
searchController.dispose(); searchController.dispose();
_marqueeController.dispose();
_scrollController.dispose();
} }
@override @override
@@ -202,6 +223,12 @@ class _MihPersonalHomeState extends State<MihPersonalHome> {
personalPackagesMap = setPersonalPackagesMap(); personalPackagesMap = setPersonalPackagesMap();
} }
searchPackage(); searchPackage();
_marqueeController = AnimationController(
vsync: this,
duration: const Duration(seconds: 12),
);
_scrollController = ScrollController();
WidgetsBinding.instance.addPostFrameCallback((_) => _startMarquee());
} }
@override @override
@@ -220,6 +247,44 @@ class _MihPersonalHomeState extends State<MihPersonalHome> {
return MihSingleChildScroll( return MihSingleChildScroll(
child: Column( child: Column(
children: [ children: [
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: MzanziInnovationHub.of(context)!.theme.errorColor(),
),
height: 40,
child: Row(
children: [
Icon(
Icons.warning_amber_rounded,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
size: 40,
),
const SizedBox(
width: 5,
),
Expanded(
child: SingleChildScrollView(
controller: _scrollController,
scrollDirection: Axis.horizontal,
child: Text(
maintenanceMsg,
style: TextStyle(
color: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
],
),
),
const SizedBox(
height: 5,
),
const Text( const Text(
"Personal Home", "Personal Home",
style: TextStyle( style: TextStyle(