6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit a83f3607
Changed files
.../lib/booking_details/booking_details_page.dart | 5 +- .../lib/common/components/placeholders.dart | 113 +++++++++++++++++++++ .../lib/common/components/shimmer_loader.dart | 58 ----------- .../booking_details_shimmer_loader.dart | 43 ++++++++ .../hotel_information_shimmer_loader.dart | 29 ++++++ .../notifications_shimmer_loader.dart | 64 ++++++++++++ .../payment_cards_shimmer_loader.dart | 47 +++++++++ .../prereg_address_shimmer_loader.dart | 46 +++++++++ .../shimmer_loader/prereg_flow_shimmer_loader.dart | 51 ++++++++++ .../prereg_profile_shimmer_loader.dart | 37 +++++++ .../profile_settings_shimmer_loader.dart | 51 ++++++++++ .../shimmer_loader/profile_shimmer_loader.dart | 44 ++++++++ .../shimmer_loader/settings_shimmer_loader.dart | 34 +++++++ .../components/shimmer_loader/shimmer_loader.dart | 26 +++++ .../spa_facility_shimmer_loader.dart | 25 +++++ .../components/spa_facility_page.dart | 3 +- .../hotel_information/hotel_information_page.dart | 3 +- .../lib/notifications/notifications_page.dart | 3 +- .../components/current_bookings_tab_view.dart | 4 +- .../lib/payment_cards/payment_cards_page.dart | 3 +- .../pregistration/pages/prereg_address_page.dart | 3 +- .../pregistration/pages/prereg_profile_page.dart | 3 +- .../lib/pregistration/preregistration_flow.dart | 3 +- comwell_key_app/lib/profile/profile_page.dart | 8 +- .../profile_settings/profile_settings_page.dart | 3 +- comwell_key_app/lib/settings/settings_page.dart | 3 +- 26 files changed, 638 insertions(+), 74 deletions(-)
Diff
diff --git a/comwell_key_app/lib/booking_details/booking_details_page.dart b/comwell_key_app/lib/booking_details/booking_details_page.dart
index 29e5d9d0..f1f0ac06 100644
--- a/comwell_key_app/lib/booking_details/booking_details_page.dart
+++ b/comwell_key_app/lib/booking_details/booking_details_page.dart
@@ -4,6 +4,7 @@ import 'package:comwell_key_app/booking_details/components/preregister_button.da
import 'package:comwell_key_app/booking_details/components/room_number_container.dart';
import 'package:comwell_key_app/booking_details/components/share_button.dart';
import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
+import 'package:comwell_key_app/common/components/shimmer_loader/booking_details_shimmer_loader.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
@@ -32,13 +33,13 @@ class BookingDetailsPage extends StatelessWidget {
return Scaffold(
extendBodyBehindAppBar: true,
- backgroundColor: sandColor[40],
+ backgroundColor: Colors.white,
appBar: const ComwellAppBar(),
body: Builder(
builder: (context) {
if (state.status == BookingDetailsStatus.loading) {
return const Center(
- child: CircularProgressIndicator(),
+ child: BookingDetailsShimmerLoader(),
);
} else {
return _buildBookingDetailsPage(context, state, cubit);
diff --git a/comwell_key_app/lib/common/components/placeholders.dart b/comwell_key_app/lib/common/components/placeholders.dart
new file mode 100644
index 00000000..98fa9f0e
--- /dev/null
+++ b/comwell_key_app/lib/common/components/placeholders.dart
@@ -0,0 +1,113 @@
+import 'package:flutter/material.dart';
+
+class BannerPlaceholder extends StatelessWidget {
+ const BannerPlaceholder({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ width: double.infinity,
+ height: 200.0,
+ margin: const EdgeInsets.all(16.0),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(12.0),
+ color: Colors.white,
+ ),
+ );
+ }
+}
+
+class TitlePlaceholder extends StatelessWidget {
+ final double width;
+
+ const TitlePlaceholder({
+ super.key,
+ required this.width,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 16.0),
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ width: width,
+ height: 12.0,
+ color: Colors.white,
+ ),
+ const SizedBox(height: 8.0),
+ Container(
+ width: width,
+ height: 12.0,
+ color: Colors.white,
+ ),
+ ],
+ ),
+ );
+ }
+}
+
+enum ContentLineType {
+ twoLines,
+ threeLines,
+}
+
+class ContentPlaceholder extends StatelessWidget {
+ final ContentLineType lineType;
+
+ const ContentPlaceholder({
+ super.key,
+ required this.lineType,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 16.0),
+ child: Row(
+ mainAxisSize: MainAxisSize.max,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Container(
+ width: 96.0,
+ height: 72.0,
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(12.0),
+ color: Colors.white,
+ ),
+ ),
+ const SizedBox(width: 12.0),
+ Expanded(
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ width: double.infinity,
+ height: 10.0,
+ color: Colors.white,
+ margin: const EdgeInsets.only(bottom: 8.0),
+ ),
+ if (lineType == ContentLineType.threeLines)
+ Container(
+ width: double.infinity,
+ height: 10.0,
+ color: Colors.white,
+ margin: const EdgeInsets.only(bottom: 8.0),
+ ),
+ Container(
+ width: 100.0,
+ height: 10.0,
+ color: Colors.white,
+ )
+ ],
+ ),
+ )
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader.dart
deleted file mode 100644
index 52c650cb..00000000
--- a/comwell_key_app/lib/common/components/shimmer_loader.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-import 'package:comwell_key_app/themes/light_theme.dart';
-import 'package:flutter/material.dart';
-import 'package:shimmer/shimmer.dart';
-
-class ShimmerLoader extends StatelessWidget {
- const ShimmerLoader({super.key});
-
- @override
- Widget build(BuildContext context) {
- final theme = Theme.of(context);
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 0),
- child: Shimmer.fromColors(
- baseColor: Colors.grey.shade300,
- highlightColor: Colors.grey.shade100,
- enabled: true,
- child: Container(
- height: 276,
- decoration: BoxDecoration(
- color: Colors.white,
- borderRadius: BorderRadius.circular(10),
- border: Border.all(color: Colors.transparent),
- ),
- child: Padding(
- padding: const EdgeInsets.all(16),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.end,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- // Image placeholder
- const SizedBox(height: 16),
- // Title placeholder
- Container(
- height: 24,
- width: 180,
- decoration: BoxDecoration(
- color: Colors.grey.shade400,
- borderRadius: BorderRadius.circular(4),
- ),
- ),
- const SizedBox(height: 6),
- // Subtitle placeholder
- Container(
- height: 16,
- width: 120,
- decoration: BoxDecoration(
- color: sandColor[80],
- borderRadius: BorderRadius.circular(4),
- ),
- ),
- ],
- ),
- ),
- ),
- ),
- );
- }
-}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/booking_details_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/booking_details_shimmer_loader.dart
new file mode 100644
index 00000000..d0ab87d9
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/booking_details_shimmer_loader.dart
@@ -0,0 +1,43 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+import '../placeholders.dart';
+
+class BookingDetailsShimmerLoader extends StatelessWidget {
+ const BookingDetailsShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: const [
+ BannerPlaceholder(),
+ SizedBox(height: 16),
+ TitlePlaceholder(width: double.infinity),
+ SizedBox(height: 16),
+ ContentPlaceholder(lineType: ContentLineType.threeLines),
+ SizedBox(height: 16),
+ ContentPlaceholder(lineType: ContentLineType.twoLines),
+ SizedBox(height: 32),
+ // Simulate button
+ Padding(
+ padding: EdgeInsets.symmetric(horizontal: 32.0),
+ child: SizedBox(
+ width: double.infinity,
+ height: 48,
+ child: DecoratedBox(
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.all(Radius.circular(8)),
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/hotel_information_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/hotel_information_shimmer_loader.dart
new file mode 100644
index 00000000..dfde81ad
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/hotel_information_shimmer_loader.dart
@@ -0,0 +1,29 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+import '../placeholders.dart';
+
+class HotelInformationShimmerLoader extends StatelessWidget {
+ const HotelInformationShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: ListView(
+ padding: const EdgeInsets.all(24.0),
+ children: [
+ const BannerPlaceholder(),
+ const SizedBox(height: 16),
+ const TitlePlaceholder(width: double.infinity),
+ const SizedBox(height: 16),
+ ...List.generate(3, (index) => Padding(
+ padding: const EdgeInsets.symmetric(vertical: 8.0),
+ child: ContentPlaceholder(lineType: ContentLineType.threeLines),
+ )),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/notifications_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/notifications_shimmer_loader.dart
new file mode 100644
index 00000000..6980ce13
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/notifications_shimmer_loader.dart
@@ -0,0 +1,64 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+import '../placeholders.dart';
+
+class NotificationsShimmerLoader extends StatelessWidget {
+ const NotificationsShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ width: 180,
+ height: 28,
+ color: Colors.white,
+ margin: const EdgeInsets.only(bottom: 20),
+ ),
+ Row(
+ children: [
+ Container(
+ width: 40,
+ height: 24,
+ color: Colors.white,
+ ),
+ const SizedBox(width: 8),
+ Container(
+ width: 100,
+ height: 16,
+ color: Colors.white,
+ ),
+ ],
+ ),
+ const SizedBox(height: 20),
+ ...List.generate(4, (index) => Padding(
+ padding: const EdgeInsets.symmetric(vertical: 8.0),
+ child: ContentPlaceholder(lineType: ContentLineType.twoLines),
+ )),
+ const SizedBox(height: 16),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 0.0),
+ child: SizedBox(
+ width: double.infinity,
+ height: 48,
+ child: DecoratedBox(
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.all(Radius.circular(8)),
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/payment_cards_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/payment_cards_shimmer_loader.dart
new file mode 100644
index 00000000..3a085c94
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/payment_cards_shimmer_loader.dart
@@ -0,0 +1,47 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+import '../placeholders.dart';
+
+class PaymentCardsShimmerLoader extends StatelessWidget {
+ const PaymentCardsShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: ListView(
+ children: [
+ const SizedBox(height: 40),
+ const TitlePlaceholder(width: 200),
+ const SizedBox(height: 12),
+ const TitlePlaceholder(width: 120),
+ const SizedBox(height: 40),
+ const TitlePlaceholder(width: 160),
+ const SizedBox(height: 20),
+ ...List.generate(3, (index) => Padding(
+ padding: const EdgeInsets.symmetric(vertical: 8.0),
+ child: ContentPlaceholder(lineType: ContentLineType.twoLines),
+ )),
+ const SizedBox(height: 12),
+ // Simulate Add Card button
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 32.0),
+ child: SizedBox(
+ width: double.infinity,
+ height: 48,
+ child: DecoratedBox(
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.all(Radius.circular(8)),
+ ),
+ ),
+ ),
+ ),
+ const SizedBox(height: 24),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/prereg_address_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/prereg_address_shimmer_loader.dart
new file mode 100644
index 00000000..ed5439db
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/prereg_address_shimmer_loader.dart
@@ -0,0 +1,46 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+
+class PreregAddressShimmerLoader extends StatelessWidget {
+ const PreregAddressShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: ListView(
+ padding: const EdgeInsets.all(24.0),
+ children: [
+ Container(
+ width: 180,
+ height: 28,
+ color: Colors.white,
+ margin: const EdgeInsets.only(bottom: 36),
+ ),
+ ...List.generate(4, (index) => Padding(
+ padding: const EdgeInsets.symmetric(vertical: 12.0),
+ child: Container(
+ width: double.infinity,
+ height: 48,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ )),
+ const SizedBox(height: 24),
+ Container(
+ width: double.infinity,
+ height: 62,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/prereg_flow_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/prereg_flow_shimmer_loader.dart
new file mode 100644
index 00000000..019633e1
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/prereg_flow_shimmer_loader.dart
@@ -0,0 +1,51 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+
+class PreregFlowShimmerLoader extends StatelessWidget {
+ const PreregFlowShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: ListView(
+ padding: const EdgeInsets.all(24.0),
+ children: [
+ Container(
+ width: 180,
+ height: 28,
+ color: Colors.white,
+ margin: const EdgeInsets.only(bottom: 36),
+ ),
+ ...List.generate(3, (index) => Padding(
+ padding: const EdgeInsets.symmetric(vertical: 12.0),
+ child: Container(
+ width: double.infinity,
+ height: 48,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ )),
+ const SizedBox(height: 32),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 32.0),
+ child: SizedBox(
+ width: double.infinity,
+ height: 48,
+ child: DecoratedBox(
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.all(Radius.circular(8)),
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/prereg_profile_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/prereg_profile_shimmer_loader.dart
new file mode 100644
index 00000000..61b1101d
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/prereg_profile_shimmer_loader.dart
@@ -0,0 +1,37 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+
+class PreregProfileShimmerLoader extends StatelessWidget {
+ const PreregProfileShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: ListView(
+ padding: const EdgeInsets.all(24.0),
+ children: [
+ Container(
+ width: 180,
+ height: 28,
+ color: Colors.white,
+ margin: const EdgeInsets.only(bottom: 36),
+ ),
+ ...List.generate(4, (index) => Padding(
+ padding: const EdgeInsets.symmetric(vertical: 12.0),
+ child: Container(
+ width: double.infinity,
+ height: 48,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ )),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/profile_settings_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/profile_settings_shimmer_loader.dart
new file mode 100644
index 00000000..b4fba7a3
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/profile_settings_shimmer_loader.dart
@@ -0,0 +1,51 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+
+class ProfileSettingsShimmerLoader extends StatelessWidget {
+ const ProfileSettingsShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: ListView(
+ padding: const EdgeInsets.all(24.0),
+ children: [
+ Container(
+ width: 180,
+ height: 28,
+ color: Colors.white,
+ margin: const EdgeInsets.only(bottom: 36),
+ ),
+ ...List.generate(6, (index) => Padding(
+ padding: const EdgeInsets.symmetric(vertical: 12.0),
+ child: Container(
+ width: double.infinity,
+ height: 48,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ )),
+ const SizedBox(height: 32),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 32.0),
+ child: SizedBox(
+ width: double.infinity,
+ height: 48,
+ child: DecoratedBox(
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.all(Radius.circular(8)),
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/profile_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/profile_shimmer_loader.dart
new file mode 100644
index 00000000..fa7c6a6a
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/profile_shimmer_loader.dart
@@ -0,0 +1,44 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+
+class ProfileShimmerLoader extends StatelessWidget {
+ const ProfileShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: ListView(
+ children: [
+ AspectRatio(
+ aspectRatio: 359 / 212,
+ child: Container(
+ alignment: Alignment.center,
+ clipBehavior: Clip.antiAlias,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ shape: BoxShape.rectangle,
+ borderRadius: BorderRadius.circular(15),
+ ),
+ ),
+ ),
+ ...List.generate(
+ 4,
+ (index) => Padding(
+ padding: const EdgeInsets.symmetric(vertical: 16.0),
+ child: Container(
+ width: double.infinity,
+ height: 48,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ )),
+ ],
+ ),
+ );
+ }
+}
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/settings_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/settings_shimmer_loader.dart
new file mode 100644
index 00000000..1aea50d9
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/settings_shimmer_loader.dart
@@ -0,0 +1,34 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+
+class SettingsShimmerLoader extends StatelessWidget {
+ const SettingsShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Container(
+ width: 24,
+ height: 24,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ shape: BoxShape.circle,
+ ),
+ ),
+ const SizedBox(width: 8),
+ Container(
+ width: 80,
+ height: 16,
+ color: Colors.white,
+ ),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/shimmer_loader.dart
new file mode 100644
index 00000000..24cba5ae
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/shimmer_loader.dart
@@ -0,0 +1,26 @@
+import 'package:comwell_key_app/common/components/placeholders.dart';
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+
+class ShimmerLoader extends StatelessWidget {
+ const ShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: const Column(
+ children: [
+ BannerPlaceholder(),
+ TitlePlaceholder(width: double.infinity),
+ SizedBox(height: 16.0),
+ ContentPlaceholder(
+ lineType: ContentLineType.threeLines,
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/comwell_key_app/lib/common/components/shimmer_loader/spa_facility_shimmer_loader.dart b/comwell_key_app/lib/common/components/shimmer_loader/spa_facility_shimmer_loader.dart
new file mode 100644
index 00000000..9745a8ab
--- /dev/null
+++ b/comwell_key_app/lib/common/components/shimmer_loader/spa_facility_shimmer_loader.dart
@@ -0,0 +1,25 @@
+import 'package:flutter/material.dart';
+import 'package:shimmer/shimmer.dart';
+
+class SpaFacilityShimmerLoader extends StatelessWidget {
+ const SpaFacilityShimmerLoader({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Shimmer.fromColors(
+ baseColor: Colors.grey.shade300,
+ highlightColor: Colors.grey.shade100,
+ enabled: true,
+ child: SizedBox(
+ width: double.infinity,
+ height: 48,
+ child: DecoratedBox(
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.all(Radius.circular(8)),
+ ),
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/hotel_information/components/spa_facility_page.dart b/comwell_key_app/lib/hotel_information/components/spa_facility_page.dart
index 1621ebef..4303a6d9 100644
--- a/comwell_key_app/lib/hotel_information/components/spa_facility_page.dart
+++ b/comwell_key_app/lib/hotel_information/components/spa_facility_page.dart
@@ -2,6 +2,7 @@ import 'package:comwell_key_app/hotel_information/cubit/hotel_information_cubit.
import 'package:comwell_key_app/themes/dark_theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import '../../common/components/shimmer_loader/spa_facility_shimmer_loader.dart';
class SpaFacilityPage extends StatelessWidget {
const SpaFacilityPage({super.key});
@@ -42,7 +43,7 @@ class SpaFacilityPage extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 16.0),
child: Builder(builder: (context) {
if (isLoading) {
- return const CircularProgressIndicator();
+ return const SpaFacilityShimmerLoader();
}
return Text("Book Spa ${cubit.state.spaButtonIsLoading}");
}),
diff --git a/comwell_key_app/lib/hotel_information/hotel_information_page.dart b/comwell_key_app/lib/hotel_information/hotel_information_page.dart
index 6da10f8b..0cf86d5f 100644
--- a/comwell_key_app/lib/hotel_information/hotel_information_page.dart
+++ b/comwell_key_app/lib/hotel_information/hotel_information_page.dart
@@ -2,6 +2,7 @@ import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
import 'package:comwell_key_app/hotel_information/cubit/hotel_information_cubit.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import '../common/components/shimmer_loader/hotel_information_shimmer_loader.dart';
class HotelInformationPage extends StatelessWidget {
final Widget child;
@@ -16,7 +17,7 @@ class HotelInformationPage extends StatelessWidget {
backgroundColor: Theme.of(context).colorScheme.surface,
body: Builder(builder: (context) {
return switch (state.hotelState) {
- HotelState.loading => const Center(child: CircularProgressIndicator()),
+ HotelState.loading => const Center(child: HotelInformationShimmerLoader()),
HotelState.error => const Center(child: Text("Error")),
HotelState.success => child,
};
diff --git a/comwell_key_app/lib/notifications/notifications_page.dart b/comwell_key_app/lib/notifications/notifications_page.dart
index 56244c1b..c3289b79 100644
--- a/comwell_key_app/lib/notifications/notifications_page.dart
+++ b/comwell_key_app/lib/notifications/notifications_page.dart
@@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:comwell_key_app/notifications/cubit/notifications_cubit.dart';
import 'components/communications_list.dart';
+import '../common/components/shimmer_loader/notifications_shimmer_loader.dart';
class NotificationsPage extends StatelessWidget {
final Iterable<NotificationPermission> notificationPermissions;
@@ -21,7 +22,7 @@ class NotificationsPage extends StatelessWidget {
body: BlocBuilder<NotificationsCubit, NotificationsState>(
builder: (context, state) {
if (state.isLoading) {
- return const Center(child: CircularProgressIndicator());
+ return const Center(child: NotificationsShimmerLoader());
} else if (state.error != null) {
return Center(
child: Text(
diff --git a/comwell_key_app/lib/overview/components/current_bookings_tab_view.dart b/comwell_key_app/lib/overview/components/current_bookings_tab_view.dart
index 8d79d5be..fb001f79 100644
--- a/comwell_key_app/lib/overview/components/current_bookings_tab_view.dart
+++ b/comwell_key_app/lib/overview/components/current_bookings_tab_view.dart
@@ -5,7 +5,7 @@ import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:shimmer/shimmer.dart';
-import 'package:comwell_key_app/common/components/shimmer_loader.dart';
+import 'package:comwell_key_app/common/components/shimmer_loader/shimmer_loader.dart';
class CurrentBookingsTabView extends StatelessWidget {
final Iterable<Booking> bookings;
@@ -35,7 +35,7 @@ class CurrentBookingsTabView extends StatelessWidget {
ShimmerLoader(),
SizedBox(height: 20),
ShimmerLoader(),
- SizedBox(height: 40),
+ SizedBox(height: 20),
ShimmerLoader(),
],
);
diff --git a/comwell_key_app/lib/payment_cards/payment_cards_page.dart b/comwell_key_app/lib/payment_cards/payment_cards_page.dart
index b1f3196c..386bee13 100644
--- a/comwell_key_app/lib/payment_cards/payment_cards_page.dart
+++ b/comwell_key_app/lib/payment_cards/payment_cards_page.dart
@@ -10,6 +10,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import '../themes/light_theme.dart';
import 'bloc/payment_cards_cubit.dart';
import 'components/approve_conditions_widget.dart';
+import '../common/components/shimmer_loader/payment_cards_shimmer_loader.dart';
class PaymentCardsPage extends StatelessWidget {
final bool needScaffold;
@@ -21,7 +22,7 @@ class PaymentCardsPage extends StatelessWidget {
builder: (context, state) {
final cubit = context.read<PaymentCardsCubit>();
if (cubit.state.isLoading) {
- return const Center(child: CircularProgressIndicator());
+ return const Center(child: PaymentCardsShimmerLoader());
}
if (cubit.state.hasError) {
return Center(
diff --git a/comwell_key_app/lib/pregistration/pages/prereg_address_page.dart b/comwell_key_app/lib/pregistration/pages/prereg_address_page.dart
index 15614d71..b4f07733 100644
--- a/comwell_key_app/lib/pregistration/pages/prereg_address_page.dart
+++ b/comwell_key_app/lib/pregistration/pages/prereg_address_page.dart
@@ -6,6 +6,7 @@ import 'package:country_code_picker/country_code_picker.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import '../../common/components/shimmer_loader/prereg_address_shimmer_loader.dart';
class PreregAddressPage extends StatelessWidget {
const PreregAddressPage({super.key});
@@ -17,7 +18,7 @@ class PreregAddressPage extends StatelessWidget {
final cubit = context.read<PreregistrationCubit>();
if (state.loading) {
- return const Center(child: CircularProgressIndicator());
+ return const Center(child: PreregAddressShimmerLoader());
}
if (state.error != null) {
return const Center(child: Text("Error"));
diff --git a/comwell_key_app/lib/pregistration/pages/prereg_profile_page.dart b/comwell_key_app/lib/pregistration/pages/prereg_profile_page.dart
index 3e1ef54b..b1297c4b 100644
--- a/comwell_key_app/lib/pregistration/pages/prereg_profile_page.dart
+++ b/comwell_key_app/lib/pregistration/pages/prereg_profile_page.dart
@@ -6,6 +6,7 @@ import 'package:country_code_picker/country_code_picker.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import '../../common/components/shimmer_loader/prereg_profile_shimmer_loader.dart';
class PreregProfilePage extends StatelessWidget {
const PreregProfilePage({super.key});
@@ -16,7 +17,7 @@ class PreregProfilePage extends StatelessWidget {
return BlocBuilder<PreregistrationCubit, PreregistrationState>(
builder: (context, state) {
if (state.loading) {
- return const Center(child: CircularProgressIndicator());
+ return const Center(child: PreregProfileShimmerLoader());
}
if (state.user != null) {
return _buildProfilePage(theme, state, context);
diff --git a/comwell_key_app/lib/pregistration/preregistration_flow.dart b/comwell_key_app/lib/pregistration/preregistration_flow.dart
index 119985f9..a6ecc006 100644
--- a/comwell_key_app/lib/pregistration/preregistration_flow.dart
+++ b/comwell_key_app/lib/pregistration/preregistration_flow.dart
@@ -5,6 +5,7 @@ import 'package:comwell_key_app/pregistration/bloc/preregistration_cubit.dart';
import 'package:comwell_key_app/pregistration/utils/utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import '../common/components/shimmer_loader/prereg_flow_shimmer_loader.dart';
class PreregistrationFlow extends StatefulWidget {
@@ -75,7 +76,7 @@ class _PreregistrationFlowState extends State<PreregistrationFlow> {
child: Builder(
builder: (context) {
if (state.loading) {
- return const Center(child: CircularProgressIndicator());
+ return const Center(child: PreregFlowShimmerLoader());
}
return PageView(
key: const PageStorageKey("prereg_flow"),
diff --git a/comwell_key_app/lib/profile/profile_page.dart b/comwell_key_app/lib/profile/profile_page.dart
index 8e167b85..96ced68d 100644
--- a/comwell_key_app/lib/profile/profile_page.dart
+++ b/comwell_key_app/lib/profile/profile_page.dart
@@ -5,6 +5,7 @@ import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/utils/secure_storage.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import '../common/components/shimmer_loader/profile_shimmer_loader.dart';
class ProfilePage extends StatefulWidget {
const ProfilePage({super.key});
@@ -44,14 +45,15 @@ class _ProfilePageState extends State<ProfilePage> with WidgetsBindingObserver {
@override
Widget build(BuildContext context) {
-
return Scaffold(
backgroundColor: sandColor[20],
body: BlocBuilder<ProfileCubit, ProfileState>(
builder: (context, state) {
if (state.isLoading) {
- return const
- Center(child: CircularProgressIndicator());
+ return const Padding(
+ padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 40.0),
+ child: ProfileShimmerLoader(),
+ );
} else if (state.error != null) {
return const ErrorPageWidget();
} else {
diff --git a/comwell_key_app/lib/profile_settings/profile_settings_page.dart b/comwell_key_app/lib/profile_settings/profile_settings_page.dart
index 79a39958..eefd57d9 100644
--- a/comwell_key_app/lib/profile_settings/profile_settings_page.dart
+++ b/comwell_key_app/lib/profile_settings/profile_settings_page.dart
@@ -19,6 +19,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
+import '../common/components/shimmer_loader/profile_settings_shimmer_loader.dart';
class ProfileSettingsPage extends StatelessWidget {
const ProfileSettingsPage({super.key});
@@ -34,7 +35,7 @@ class ProfileSettingsPage extends StatelessWidget {
shouldShowProfileButton: false,
),
backgroundColor: Colors.white,
- body: Center(child: CircularProgressIndicator()));
+ body: Center(child: ProfileSettingsShimmerLoader()));
} else if (state.user != null) {
return _buildProfileSettingsPage(theme, state, context);
} else {
diff --git a/comwell_key_app/lib/settings/settings_page.dart b/comwell_key_app/lib/settings/settings_page.dart
index bce582da..759aa549 100644
--- a/comwell_key_app/lib/settings/settings_page.dart
+++ b/comwell_key_app/lib/settings/settings_page.dart
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import '../utils/seos_repository.dart';
import '../common/extensions/scaffold_messenger_state_extension.dart';
+import '../common/components/shimmer_loader/settings_shimmer_loader.dart';
class SettingsPage extends StatefulWidget {
const SettingsPage({super.key});
@@ -38,7 +39,7 @@ class _SettingPage extends State<SettingsPage> {
leading: const Icon(
Icons.logout_sharp,
),
- trailing: _isUnregistering ? const CircularProgressIndicator() : null,
+ trailing: _isUnregistering ? const SettingsShimmerLoader() : null,
onTap: _isUnregistering ? null : _unregister,
),
];