This commit is contained in:
pradeepkumar
2026-03-31 23:23:08 +05:30
parent 26611274d5
commit 5f146853bd
4 changed files with 86 additions and 10 deletions

View File

@@ -83,7 +83,22 @@ class _AppShellState extends State<AppShell> {
child: const HomeHeader(), child: const HomeHeader(),
), ),
Expanded( Expanded(
child: widget.child, child: AnimatedSwitcher(
duration: const Duration(milliseconds: 250),
switchInCurve: Curves.easeOut,
switchOutCurve: Curves.easeIn,
transitionBuilder: (child, animation) {
return FadeTransition(
opacity: animation,
child: child,
);
},
child: SizedBox(
key: ValueKey(widget.child.runtimeType.hashCode ^
widget.child.hashCode),
child: widget.child,
),
),
), ),
], ],
), ),

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:shimmer/shimmer.dart';
import 'package:real_estate_mobile/core/constants/app_colors.dart'; import 'package:real_estate_mobile/core/constants/app_colors.dart';
import 'package:real_estate_mobile/core/widgets/s3_image.dart'; import 'package:real_estate_mobile/core/widgets/s3_image.dart';
import 'package:real_estate_mobile/features/agents/presentation/providers/agent_network_provider.dart'; import 'package:real_estate_mobile/features/agents/presentation/providers/agent_network_provider.dart';
@@ -15,8 +16,27 @@ class AgentNetworkScreen extends ConsumerWidget {
final state = ref.watch(agentNetworkProvider); final state = ref.watch(agentNetworkProvider);
if (state.isLoading) { if (state.isLoading) {
return const Center( return Shimmer.fromColors(
child: CircularProgressIndicator(color: AppColors.accentOrange)); baseColor: const Color(0xFFE8E8E8),
highlightColor: const Color(0xFFF5F5F5),
child: ListView.builder(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
physics: const NeverScrollableScrollPhysics(),
itemCount: 4,
itemBuilder: (_, __) => Padding(
padding: const EdgeInsets.only(bottom: 16),
child: Row(children: [
Container(width: 56, height: 56, decoration: const BoxDecoration(shape: BoxShape.circle, color: Colors.white)),
const SizedBox(width: 12),
Expanded(child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Container(height: 14, width: 130, decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(4))),
const SizedBox(height: 8),
Container(height: 12, width: 180, decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(4))),
])),
]),
),
),
);
} }
if (state.error != null) { if (state.error != null) {
return _buildError(context, ref, state.error!); return _buildError(context, ref, state.error!);

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:shimmer/shimmer.dart';
import 'package:real_estate_mobile/core/constants/app_colors.dart'; import 'package:real_estate_mobile/core/constants/app_colors.dart';
import 'package:real_estate_mobile/core/widgets/s3_image.dart'; import 'package:real_estate_mobile/core/widgets/s3_image.dart';
import 'package:real_estate_mobile/features/agents/data/models/agent_profile.dart'; import 'package:real_estate_mobile/features/agents/data/models/agent_profile.dart';
@@ -303,11 +304,31 @@ class _AgentSearchScreenState extends ConsumerState<AgentSearchScreen> {
); );
} }
Widget _buildShimmerList() {
return Shimmer.fromColors(
baseColor: const Color(0xFFE8E8E8),
highlightColor: const Color(0xFFF5F5F5),
child: ListView.builder(
padding: const EdgeInsets.symmetric(horizontal: 24),
physics: const NeverScrollableScrollPhysics(),
itemCount: 3,
itemBuilder: (_, __) => Padding(
padding: const EdgeInsets.only(bottom: 16),
child: Container(
height: 300,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(15),
),
),
),
),
);
}
Widget _buildAgentList(SearchAgentsState state) { Widget _buildAgentList(SearchAgentsState state) {
if (state.isLoading) { if (state.isLoading) {
return const Center( return _buildShimmerList();
child: CircularProgressIndicator(color: AppColors.accentOrange),
);
} }
if (state.error != null) { if (state.error != null) {

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:shimmer/shimmer.dart';
import 'package:real_estate_mobile/core/constants/app_colors.dart'; import 'package:real_estate_mobile/core/constants/app_colors.dart';
import 'package:real_estate_mobile/features/notifications/data/models/notification_model.dart'; import 'package:real_estate_mobile/features/notifications/data/models/notification_model.dart';
import 'package:real_estate_mobile/features/notifications/presentation/providers/notification_provider.dart'; import 'package:real_estate_mobile/features/notifications/presentation/providers/notification_provider.dart';
@@ -159,10 +160,29 @@ class _NotificationsScreenState extends ConsumerState<NotificationsScreen> {
Widget _buildContent(NotificationListState state) { Widget _buildContent(NotificationListState state) {
if (state.isLoading) { if (state.isLoading) {
return const Center( return Shimmer.fromColors(
child: CircularProgressIndicator( baseColor: const Color(0xFFE8E8E8),
color: AppColors.accentOrange, highlightColor: const Color(0xFFF5F5F5),
strokeWidth: 2, child: ListView.builder(
padding: EdgeInsets.zero,
physics: const NeverScrollableScrollPhysics(),
itemCount: 6,
itemBuilder: (_, __) => Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 14),
child: Row(
children: [
Container(width: 52, height: 52, decoration: const BoxDecoration(shape: BoxShape.circle, color: Colors.white)),
const SizedBox(width: 8),
Expanded(child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Container(height: 14, width: 150, decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(4))),
const SizedBox(height: 8),
Container(height: 12, width: double.infinity, decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(4))),
])),
const SizedBox(width: 8),
Container(height: 12, width: 50, decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(4))),
],
),
),
), ),
); );
} }