import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:frontend_eccp_mobile/app/core/constants/app_colors.dart'; import 'package:frontend_eccp_mobile/app/core/widgets/app_button.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:url_launcher/url_launcher.dart'; class UpdatePage extends StatelessWidget { const UpdatePage({ required this.version, required this.link, super.key, }); final String version; final String link; Future _openLink() async { if (link.isEmpty) return; final uri = Uri.parse(link); await launchUrl( uri, mode: LaunchMode.externalApplication, ); } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: () async => false, child: Scaffold( body: Stack( children: [ Positioned.fill( child: Image.asset( 'assets/images/signature_pattern.jpg', fit: BoxFit.cover, ), ), Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'assets/images/logo.png', height: 140, ), const SizedBox(height: 16), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'E-CPP', style: GoogleFonts.inter( fontSize: 24.72, fontWeight: FontWeight.w900, fontStyle: FontStyle.italic, color: AppColors.neutralWhite, ), ), ], ), const SizedBox(height: 6), Text( 'DIV PROPAM MABES POLRI', style: GoogleFonts.inter( fontSize: 14, fontWeight: FontWeight.w500, color: AppColors.neutralWhite, ), ), ], ), ), Positioned.fill( child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 4, sigmaY: 4), child: Container( color: Colors.black.withOpacity(0.4), ), ), ), Align( alignment: Alignment.bottomCenter, child: SafeArea( child: Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 16), child: _UpdateBottomSheet( onUpdate: _openLink, version: version, ), ), ), ), ], ), ), ); } } class _UpdateBottomSheet extends StatelessWidget { const _UpdateBottomSheet({ required this.onUpdate, required this.version, }); final String version; final VoidCallback onUpdate; @override Widget build(BuildContext context) { return Material( color: Colors.white, borderRadius: BorderRadius.circular(20), elevation: 12, child: Padding( padding: const EdgeInsets.fromLTRB(16, 16, 16, 24), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ ClipRRect( borderRadius: BorderRadius.circular(12), child: Image.asset( 'assets/images/signature_pattern.jpg', width: double.infinity, fit: BoxFit.cover, ), ), const SizedBox(height: 16), Text( 'App update is required', textAlign: TextAlign.center, style: Theme.of(context).textTheme.titleMedium?.copyWith( fontWeight: FontWeight.w600, fontSize: 24, ), ), const SizedBox(height: 8), Text( 'Your current app version is expired. Please update\nthe app to continue', textAlign: TextAlign.start, style: Theme.of(context).textTheme.bodySmall?.copyWith( color: AppColors.neutral900, ), ), const SizedBox(height: 12), Text( 'New Version Available : $version', textAlign: TextAlign.start, style: Theme.of(context).textTheme.bodySmall?.copyWith( color: AppColors.neutral900, fontWeight: FontWeight.w600, fontStyle: FontStyle.italic, ), ), const SizedBox(height: 24), AppButton( label: 'Update App', isExpanded: true, radius: 10, onPressed: onUpdate, ), ], ), ), ); } }