From 50934bfed978234bdbe24d80194e3f0945a8354a Mon Sep 17 00:00:00 2001 From: efrilm Date: Tue, 19 Aug 2025 16:05:42 +0700 Subject: [PATCH] feat: about app --- lib/injection.config.dart | 18 +- .../pages/about_app/about_app_page.dart | 330 ++++++++++++++++ .../pages/profile/widgets/app_setting.dart | 12 - .../pages/profile/widgets/support.dart | 29 +- lib/presentation/router/app_router.dart | 3 + lib/presentation/router/app_router.gr.dart | 366 +++++++++--------- linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 4 + pubspec.lock | 88 +++++ pubspec.yaml | 2 + .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + 13 files changed, 650 insertions(+), 211 deletions(-) create mode 100644 lib/presentation/pages/about_app/about_app_page.dart diff --git a/lib/injection.config.dart b/lib/injection.config.dart index 98d0aff..8323e4b 100644 --- a/lib/injection.config.dart +++ b/lib/injection.config.dart @@ -156,21 +156,21 @@ extension GetItInjectableX on _i174.GetIt { gh.factory<_i17.AuthRemoteDataProvider>( () => _i17.AuthRemoteDataProvider(gh<_i115.ApiClient>()), ); + gh.factory<_i785.UserRemoteDataProvider>( + () => _i785.UserRemoteDataProvider(gh<_i115.ApiClient>()), + ); gh.factory<_i823.ProductRemoteDataProvider>( () => _i823.ProductRemoteDataProvider(gh<_i115.ApiClient>()), ); + gh.factory<_i27.OutletRemoteDataProvider>( + () => _i27.OutletRemoteDataProvider(gh<_i115.ApiClient>()), + ); gh.factory<_i866.AnalyticRemoteDataProvider>( () => _i866.AnalyticRemoteDataProvider(gh<_i115.ApiClient>()), ); gh.factory<_i1006.CustomerRemoteDataProvider>( () => _i1006.CustomerRemoteDataProvider(gh<_i115.ApiClient>()), ); - gh.factory<_i27.OutletRemoteDataProvider>( - () => _i27.OutletRemoteDataProvider(gh<_i115.ApiClient>()), - ); - gh.factory<_i785.UserRemoteDataProvider>( - () => _i785.UserRemoteDataProvider(gh<_i115.ApiClient>()), - ); gh.factory<_i48.ICustomerRepository>( () => _i550.CustomerRepository(gh<_i1006.CustomerRemoteDataProvider>()), ); @@ -216,12 +216,12 @@ extension GetItInjectableX on _i174.GetIt { gh.factory<_i183.CategoryLoaderBloc>( () => _i183.CategoryLoaderBloc(gh<_i1020.ICategoryRepository>()), ); - gh.factory<_i889.SalesLoaderBloc>( - () => _i889.SalesLoaderBloc(gh<_i477.IAnalyticRepository>()), - ); gh.factory<_i473.HomeBloc>( () => _i473.HomeBloc(gh<_i477.IAnalyticRepository>()), ); + gh.factory<_i889.SalesLoaderBloc>( + () => _i889.SalesLoaderBloc(gh<_i477.IAnalyticRepository>()), + ); gh.factory<_i337.CurrentOutletLoaderBloc>( () => _i337.CurrentOutletLoaderBloc(gh<_i197.IOutletRepository>()), ); diff --git a/lib/presentation/pages/about_app/about_app_page.dart b/lib/presentation/pages/about_app/about_app_page.dart new file mode 100644 index 0000000..b98252f --- /dev/null +++ b/lib/presentation/pages/about_app/about_app_page.dart @@ -0,0 +1,330 @@ +import 'package:flutter/material.dart'; +import 'package:auto_route/auto_route.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:device_info_plus/device_info_plus.dart'; + +import '../../../common/theme/theme.dart'; + +@RoutePage() +class AboutAppPage extends StatefulWidget { + const AboutAppPage({super.key}); + + @override + State createState() => _AboutAppPageState(); +} + +class _AboutAppPageState extends State + with TickerProviderStateMixin { + PackageInfo? packageInfo; + String deviceInfo = ''; + late AnimationController _fadeController; + late AnimationController _slideController; + late Animation _fadeAnimation; + late Animation _slideAnimation; + + @override + void initState() { + super.initState(); + _initAnimations(); + _loadAppInfo(); + } + + void _initAnimations() { + _fadeController = AnimationController( + duration: const Duration(milliseconds: 800), + vsync: this, + ); + _slideController = AnimationController( + duration: const Duration(milliseconds: 1000), + vsync: this, + ); + + _fadeAnimation = Tween(begin: 0.0, end: 1.0).animate( + CurvedAnimation(parent: _fadeController, curve: Curves.easeInOut), + ); + + _slideAnimation = + Tween(begin: const Offset(0, 0.3), end: Offset.zero).animate( + CurvedAnimation(parent: _slideController, curve: Curves.elasticOut), + ); + + _fadeController.forward(); + Future.delayed(const Duration(milliseconds: 300), () { + _slideController.forward(); + }); + } + + Future _loadAppInfo() async { + try { + final info = await PackageInfo.fromPlatform(); + final deviceInfoPlugin = DeviceInfoPlugin(); + String device = ''; + + if (Theme.of(context).platform == TargetPlatform.android) { + final androidInfo = await deviceInfoPlugin.androidInfo; + device = '${androidInfo.brand} ${androidInfo.model}'; + } else if (Theme.of(context).platform == TargetPlatform.iOS) { + final iosInfo = await deviceInfoPlugin.iosInfo; + device = '${iosInfo.name} ${iosInfo.model}'; + } + + setState(() { + packageInfo = info; + deviceInfo = device; + }); + } catch (e) { + print('Error loading app info: $e'); + } + } + + @override + void dispose() { + _fadeController.dispose(); + _slideController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + physics: const BouncingScrollPhysics(), + slivers: [_buildSliverAppBar(), _buildContent()], + ), + ); + } + + Widget _buildSliverAppBar() { + return SliverAppBar( + expandedHeight: 280.0, + pinned: true, + elevation: 0, + backgroundColor: AppColor.primary, + flexibleSpace: FlexibleSpaceBar( + title: AnimatedBuilder( + animation: _fadeAnimation, + builder: (context, child) { + return Opacity( + opacity: _fadeAnimation.value, + child: Text( + 'Tentang Aplikasi', + style: AppStyle.lg.copyWith( + color: AppColor.white, + fontWeight: FontWeight.bold, + ), + ), + ); + }, + ), + background: Container( + decoration: const BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: AppColor.primaryGradient, + ), + ), + child: Stack( + children: [ + // Background pattern + Positioned.fill(child: CustomPaint(painter: _PatternPainter())), + // App icon and version + Center( + child: FadeTransition( + opacity: _fadeAnimation, + child: SlideTransition( + position: _slideAnimation, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: 100, + height: 100, + decoration: BoxDecoration( + color: AppColor.white, + borderRadius: BorderRadius.circular(25), + boxShadow: [ + BoxShadow( + color: AppColor.black.withOpacity(0.2), + blurRadius: 20, + offset: const Offset(0, 10), + ), + ], + ), + child: Icon( + Icons.mobile_friendly, + size: 50, + color: AppColor.primary, + ), + ), + const SizedBox(height: 16), + Text( + packageInfo?.appName ?? 'My App', + style: AppStyle.h4.copyWith( + color: AppColor.white, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 8), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 12, + vertical: 6, + ), + decoration: BoxDecoration( + color: AppColor.white.withOpacity(0.2), + borderRadius: BorderRadius.circular(20), + ), + child: Text( + 'v${packageInfo?.version ?? '1.0.0'}', + style: AppStyle.sm.copyWith( + color: AppColor.white, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ), + ), + ), + ), + ], + ), + ), + ), + leading: IconButton( + icon: const Icon(Icons.arrow_back_ios, color: AppColor.white), + onPressed: () => context.router.back(), + ), + ); + } + + Widget _buildContent() { + return SliverToBoxAdapter( + child: FadeTransition( + opacity: _fadeAnimation, + child: Container( + color: AppColor.background, + child: Column( + children: [_buildAppInfoSection(), const SizedBox(height: 40)], + ), + ), + ), + ); + } + + Widget _buildAppInfoSection() { + return Container( + margin: const EdgeInsets.all(20), + padding: const EdgeInsets.all(24), + decoration: BoxDecoration( + color: AppColor.white, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: AppColor.primary.withOpacity(0.1), + blurRadius: 20, + offset: const Offset(0, 8), + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: AppColor.primary.withOpacity(0.1), + borderRadius: BorderRadius.circular(12), + ), + child: Icon( + Icons.info_outline, + color: AppColor.primary, + size: 24, + ), + ), + const SizedBox(width: 16), + Text( + 'Informasi Aplikasi', + style: AppStyle.h6.copyWith( + fontWeight: FontWeight.bold, + color: AppColor.primary, + ), + ), + ], + ), + const SizedBox(height: 20), + _buildInfoRow('Nama Aplikasi', packageInfo?.appName ?? 'Loading...'), + _buildInfoRow('Versi', packageInfo?.version ?? 'Loading...'), + _buildInfoRow( + 'Build Number', + packageInfo?.buildNumber ?? 'Loading...', + ), + _buildInfoRow( + 'Package Name', + packageInfo?.packageName ?? 'Loading...', + ), + _buildInfoRow( + 'Device', + deviceInfo.isEmpty ? 'Loading...' : deviceInfo, + ), + ], + ), + ); + } + + Widget _buildInfoRow(String label, String value) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: 120, + child: Text( + label, + style: AppStyle.md.copyWith( + fontWeight: FontWeight.w600, + color: AppColor.textSecondary, + ), + ), + ), + const SizedBox(width: 16), + Expanded( + child: Text( + value, + style: AppStyle.md.copyWith(color: AppColor.textPrimary), + ), + ), + ], + ), + ); + } +} + +class _PatternPainter extends CustomPainter { + @override + void paint(Canvas canvas, Size size) { + final paint = Paint() + ..color = AppColor.white.withOpacity(0.1) + ..strokeWidth = 1 + ..style = PaintingStyle.stroke; + + // Create geometric pattern + for (int i = 0; i < 20; i++) { + for (int j = 0; j < 20; j++) { + final x = (size.width / 20) * i; + final y = (size.height / 20) * j; + + if ((i + j) % 3 == 0) { + canvas.drawCircle(Offset(x, y), 3, paint); + } + } + } + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) => false; +} diff --git a/lib/presentation/pages/profile/widgets/app_setting.dart b/lib/presentation/pages/profile/widgets/app_setting.dart index 7e65e96..8e623be 100644 --- a/lib/presentation/pages/profile/widgets/app_setting.dart +++ b/lib/presentation/pages/profile/widgets/app_setting.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import '../../../../common/theme/theme.dart'; import '../../../router/app_router.gr.dart'; -import 'divider.dart'; import 'profile_tile.dart'; class ProfileAppSetting extends StatefulWidget { @@ -79,17 +78,6 @@ class _ProfileAppSettingState extends State { subtitle: 'English (US)', onTap: () => context.router.push(LanguageRoute()), ), - - ProfileDivider(), - - ProfileTile( - icon: Icons.security_outlined, - title: 'Security & Privacy', - subtitle: 'Manage your security settings', - onTap: () { - // Navigate to security settings - }, - ), ], ), ); diff --git a/lib/presentation/pages/profile/widgets/support.dart b/lib/presentation/pages/profile/widgets/support.dart index f229dee..42193fc 100644 --- a/lib/presentation/pages/profile/widgets/support.dart +++ b/lib/presentation/pages/profile/widgets/support.dart @@ -1,6 +1,8 @@ +import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import '../../../../common/theme/theme.dart'; +import '../../../router/app_router.gr.dart'; import 'divider.dart'; import 'profile_tile.dart'; @@ -41,31 +43,26 @@ class ProfileSupport extends StatelessWidget { icon: Icons.help_outline, title: 'Help Center', subtitle: 'Get help and support', - onTap: () { - // Navigate to help center - }, + onTap: () => context.router.push(ComingSoonRoute()), ), - ProfileDivider(), - - ProfileTile( - icon: Icons.feedback_outlined, - title: 'Send Feedback', - subtitle: 'Help us improve the app', - onTap: () { - // Open feedback form - }, - ), + // ProfileDivider(), + // ProfileTile( + // icon: Icons.feedback_outlined, + // title: 'Send Feedback', + // subtitle: 'Help us improve the app', + // onTap: () { + // // Open feedback form + // }, + // ), ProfileDivider(), ProfileTile( icon: Icons.info_outline, title: 'About', subtitle: 'App version and information', - onTap: () { - // Show about dialog - }, + onTap: () => context.router.push(AboutAppRoute()), ), ], ), diff --git a/lib/presentation/router/app_router.dart b/lib/presentation/router/app_router.dart index 3a51345..3bc5124 100644 --- a/lib/presentation/router/app_router.dart +++ b/lib/presentation/router/app_router.dart @@ -63,6 +63,9 @@ class AppRouter extends RootStackRouter { AutoRoute(page: ProfileEditRoute.page), AutoRoute(page: ProfileChangePasswordRoute.page), + // About App + AutoRoute(page: AboutAppRoute.page), + // Error AutoRoute(page: ErrorRoute.page), diff --git a/lib/presentation/router/app_router.gr.dart b/lib/presentation/router/app_router.gr.dart index 6743204..9d4c8bb 100644 --- a/lib/presentation/router/app_router.gr.dart +++ b/lib/presentation/router/app_router.gr.dart @@ -9,135 +9,153 @@ // coverage:ignore-file // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:apskel_owner_flutter/domain/order/order.dart' as _i27; -import 'package:apskel_owner_flutter/domain/user/user.dart' as _i28; -import 'package:apskel_owner_flutter/presentation/pages/auth/login/login_page.dart' - as _i10; -import 'package:apskel_owner_flutter/presentation/pages/coming_soon/coming_soon_page.dart' +import 'package:apskel_owner_flutter/domain/order/order.dart' as _i28; +import 'package:apskel_owner_flutter/domain/user/user.dart' as _i29; +import 'package:apskel_owner_flutter/presentation/pages/about_app/about_app_page.dart' as _i1; -import 'package:apskel_owner_flutter/presentation/pages/customer/customer_page.dart' - as _i2; -import 'package:apskel_owner_flutter/presentation/pages/download/download_report_page.dart' - as _i4; -import 'package:apskel_owner_flutter/presentation/pages/error/error_page.dart' - as _i5; -import 'package:apskel_owner_flutter/presentation/pages/finance/finance_page.dart' - as _i6; -import 'package:apskel_owner_flutter/presentation/pages/form/daily_task_form_page.dart' - as _i3; -import 'package:apskel_owner_flutter/presentation/pages/home/home_page.dart' - as _i7; -import 'package:apskel_owner_flutter/presentation/pages/inventory/inventory_page.dart' - as _i8; -import 'package:apskel_owner_flutter/presentation/pages/language/language_page.dart' - as _i9; -import 'package:apskel_owner_flutter/presentation/pages/main/main_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/auth/login/login_page.dart' as _i11; -import 'package:apskel_owner_flutter/presentation/pages/order/order_detail/order_detail_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/coming_soon/coming_soon_page.dart' + as _i2; +import 'package:apskel_owner_flutter/presentation/pages/customer/customer_page.dart' + as _i3; +import 'package:apskel_owner_flutter/presentation/pages/download/download_report_page.dart' + as _i5; +import 'package:apskel_owner_flutter/presentation/pages/error/error_page.dart' + as _i6; +import 'package:apskel_owner_flutter/presentation/pages/finance/finance_page.dart' + as _i7; +import 'package:apskel_owner_flutter/presentation/pages/form/daily_task_form_page.dart' + as _i4; +import 'package:apskel_owner_flutter/presentation/pages/home/home_page.dart' + as _i8; +import 'package:apskel_owner_flutter/presentation/pages/inventory/inventory_page.dart' + as _i9; +import 'package:apskel_owner_flutter/presentation/pages/language/language_page.dart' + as _i10; +import 'package:apskel_owner_flutter/presentation/pages/main/main_page.dart' as _i12; -import 'package:apskel_owner_flutter/presentation/pages/order/order_list/order_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/order/order_detail/order_detail_page.dart' as _i13; -import 'package:apskel_owner_flutter/presentation/pages/outlet/outlet_information_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/order/order_list/order_page.dart' as _i14; -import 'package:apskel_owner_flutter/presentation/pages/product/product_analytic/product_analytic_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/outlet/outlet_information_page.dart' as _i15; -import 'package:apskel_owner_flutter/presentation/pages/product/product_list/product_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/product/product_analytic/product_analytic_page.dart' as _i16; -import 'package:apskel_owner_flutter/presentation/pages/profile/pages/profile_change_password/profile_change_password_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/product/product_list/product_page.dart' as _i17; -import 'package:apskel_owner_flutter/presentation/pages/profile/pages/profile_edit/profile_edit_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/profile/pages/profile_change_password/profile_change_password_page.dart' as _i18; -import 'package:apskel_owner_flutter/presentation/pages/profile/profile_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/profile/pages/profile_edit/profile_edit_page.dart' as _i19; -import 'package:apskel_owner_flutter/presentation/pages/purchase/purchase_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/profile/profile_page.dart' as _i20; -import 'package:apskel_owner_flutter/presentation/pages/report/report_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/purchase/purchase_page.dart' as _i21; -import 'package:apskel_owner_flutter/presentation/pages/sales/sales_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/report/report_page.dart' as _i22; -import 'package:apskel_owner_flutter/presentation/pages/schedule/schedule_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/sales/sales_page.dart' as _i23; -import 'package:apskel_owner_flutter/presentation/pages/splash/splash_page.dart' +import 'package:apskel_owner_flutter/presentation/pages/schedule/schedule_page.dart' as _i24; -import 'package:auto_route/auto_route.dart' as _i25; -import 'package:flutter/material.dart' as _i26; +import 'package:apskel_owner_flutter/presentation/pages/splash/splash_page.dart' + as _i25; +import 'package:auto_route/auto_route.dart' as _i26; +import 'package:flutter/material.dart' as _i27; /// generated route for -/// [_i1.ComingSoonPage] -class ComingSoonRoute extends _i25.PageRouteInfo { - const ComingSoonRoute({List<_i25.PageRouteInfo>? children}) +/// [_i1.AboutAppPage] +class AboutAppRoute extends _i26.PageRouteInfo { + const AboutAppRoute({List<_i26.PageRouteInfo>? children}) + : super(AboutAppRoute.name, initialChildren: children); + + static const String name = 'AboutAppRoute'; + + static _i26.PageInfo page = _i26.PageInfo( + name, + builder: (data) { + return const _i1.AboutAppPage(); + }, + ); +} + +/// generated route for +/// [_i2.ComingSoonPage] +class ComingSoonRoute extends _i26.PageRouteInfo { + const ComingSoonRoute({List<_i26.PageRouteInfo>? children}) : super(ComingSoonRoute.name, initialChildren: children); static const String name = 'ComingSoonRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return const _i1.ComingSoonPage(); + return const _i2.ComingSoonPage(); }, ); } /// generated route for -/// [_i2.CustomerPage] -class CustomerRoute extends _i25.PageRouteInfo { - const CustomerRoute({List<_i25.PageRouteInfo>? children}) +/// [_i3.CustomerPage] +class CustomerRoute extends _i26.PageRouteInfo { + const CustomerRoute({List<_i26.PageRouteInfo>? children}) : super(CustomerRoute.name, initialChildren: children); static const String name = 'CustomerRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i2.CustomerPage()); + return _i26.WrappedRoute(child: const _i3.CustomerPage()); }, ); } /// generated route for -/// [_i3.DailyTasksFormPage] -class DailyTasksFormRoute extends _i25.PageRouteInfo { - const DailyTasksFormRoute({List<_i25.PageRouteInfo>? children}) +/// [_i4.DailyTasksFormPage] +class DailyTasksFormRoute extends _i26.PageRouteInfo { + const DailyTasksFormRoute({List<_i26.PageRouteInfo>? children}) : super(DailyTasksFormRoute.name, initialChildren: children); static const String name = 'DailyTasksFormRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return const _i3.DailyTasksFormPage(); + return const _i4.DailyTasksFormPage(); }, ); } /// generated route for -/// [_i4.DownloadReportPage] -class DownloadReportRoute extends _i25.PageRouteInfo { - const DownloadReportRoute({List<_i25.PageRouteInfo>? children}) +/// [_i5.DownloadReportPage] +class DownloadReportRoute extends _i26.PageRouteInfo { + const DownloadReportRoute({List<_i26.PageRouteInfo>? children}) : super(DownloadReportRoute.name, initialChildren: children); static const String name = 'DownloadReportRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return const _i4.DownloadReportPage(); + return const _i5.DownloadReportPage(); }, ); } /// generated route for -/// [_i5.ErrorPage] -class ErrorRoute extends _i25.PageRouteInfo { +/// [_i6.ErrorPage] +class ErrorRoute extends _i26.PageRouteInfo { ErrorRoute({ - _i26.Key? key, + _i27.Key? key, String? title, String? message, - _i26.VoidCallback? onRetry, - _i26.VoidCallback? onBack, + _i27.VoidCallback? onRetry, + _i27.VoidCallback? onBack, String? errorCode, - _i26.IconData? errorIcon, - List<_i25.PageRouteInfo>? children, + _i27.IconData? errorIcon, + List<_i26.PageRouteInfo>? children, }) : super( ErrorRoute.name, args: ErrorRouteArgs( @@ -154,13 +172,13 @@ class ErrorRoute extends _i25.PageRouteInfo { static const String name = 'ErrorRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { final args = data.argsAs( orElse: () => const ErrorRouteArgs(), ); - return _i5.ErrorPage( + return _i6.ErrorPage( key: args.key, title: args.title, message: args.message, @@ -184,19 +202,19 @@ class ErrorRouteArgs { this.errorIcon, }); - final _i26.Key? key; + final _i27.Key? key; final String? title; final String? message; - final _i26.VoidCallback? onRetry; + final _i27.VoidCallback? onRetry; - final _i26.VoidCallback? onBack; + final _i27.VoidCallback? onBack; final String? errorCode; - final _i26.IconData? errorIcon; + final _i27.IconData? errorIcon; @override String toString() { @@ -205,108 +223,108 @@ class ErrorRouteArgs { } /// generated route for -/// [_i6.FinancePage] -class FinanceRoute extends _i25.PageRouteInfo { - const FinanceRoute({List<_i25.PageRouteInfo>? children}) +/// [_i7.FinancePage] +class FinanceRoute extends _i26.PageRouteInfo { + const FinanceRoute({List<_i26.PageRouteInfo>? children}) : super(FinanceRoute.name, initialChildren: children); static const String name = 'FinanceRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i6.FinancePage()); + return _i26.WrappedRoute(child: const _i7.FinancePage()); }, ); } /// generated route for -/// [_i7.HomePage] -class HomeRoute extends _i25.PageRouteInfo { - const HomeRoute({List<_i25.PageRouteInfo>? children}) +/// [_i8.HomePage] +class HomeRoute extends _i26.PageRouteInfo { + const HomeRoute({List<_i26.PageRouteInfo>? children}) : super(HomeRoute.name, initialChildren: children); static const String name = 'HomeRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i7.HomePage()); + return _i26.WrappedRoute(child: const _i8.HomePage()); }, ); } /// generated route for -/// [_i8.InventoryPage] -class InventoryRoute extends _i25.PageRouteInfo { - const InventoryRoute({List<_i25.PageRouteInfo>? children}) +/// [_i9.InventoryPage] +class InventoryRoute extends _i26.PageRouteInfo { + const InventoryRoute({List<_i26.PageRouteInfo>? children}) : super(InventoryRoute.name, initialChildren: children); static const String name = 'InventoryRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i8.InventoryPage()); + return _i26.WrappedRoute(child: const _i9.InventoryPage()); }, ); } /// generated route for -/// [_i9.LanguagePage] -class LanguageRoute extends _i25.PageRouteInfo { - const LanguageRoute({List<_i25.PageRouteInfo>? children}) +/// [_i10.LanguagePage] +class LanguageRoute extends _i26.PageRouteInfo { + const LanguageRoute({List<_i26.PageRouteInfo>? children}) : super(LanguageRoute.name, initialChildren: children); static const String name = 'LanguageRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return const _i9.LanguagePage(); + return const _i10.LanguagePage(); }, ); } /// generated route for -/// [_i10.LoginPage] -class LoginRoute extends _i25.PageRouteInfo { - const LoginRoute({List<_i25.PageRouteInfo>? children}) +/// [_i11.LoginPage] +class LoginRoute extends _i26.PageRouteInfo { + const LoginRoute({List<_i26.PageRouteInfo>? children}) : super(LoginRoute.name, initialChildren: children); static const String name = 'LoginRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i10.LoginPage()); + return _i26.WrappedRoute(child: const _i11.LoginPage()); }, ); } /// generated route for -/// [_i11.MainPage] -class MainRoute extends _i25.PageRouteInfo { - const MainRoute({List<_i25.PageRouteInfo>? children}) +/// [_i12.MainPage] +class MainRoute extends _i26.PageRouteInfo { + const MainRoute({List<_i26.PageRouteInfo>? children}) : super(MainRoute.name, initialChildren: children); static const String name = 'MainRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return const _i11.MainPage(); + return const _i12.MainPage(); }, ); } /// generated route for -/// [_i12.OrderDetailPage] -class OrderDetailRoute extends _i25.PageRouteInfo { +/// [_i13.OrderDetailPage] +class OrderDetailRoute extends _i26.PageRouteInfo { OrderDetailRoute({ - _i26.Key? key, - required _i27.Order order, - List<_i25.PageRouteInfo>? children, + _i27.Key? key, + required _i28.Order order, + List<_i26.PageRouteInfo>? children, }) : super( OrderDetailRoute.name, args: OrderDetailRouteArgs(key: key, order: order), @@ -315,11 +333,11 @@ class OrderDetailRoute extends _i25.PageRouteInfo { static const String name = 'OrderDetailRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { final args = data.argsAs(); - return _i12.OrderDetailPage(key: args.key, order: args.order); + return _i13.OrderDetailPage(key: args.key, order: args.order); }, ); } @@ -327,9 +345,9 @@ class OrderDetailRoute extends _i25.PageRouteInfo { class OrderDetailRouteArgs { const OrderDetailRouteArgs({this.key, required this.order}); - final _i26.Key? key; + final _i27.Key? key; - final _i27.Order order; + final _i28.Order order; @override String toString() { @@ -338,92 +356,92 @@ class OrderDetailRouteArgs { } /// generated route for -/// [_i13.OrderPage] -class OrderRoute extends _i25.PageRouteInfo { - const OrderRoute({List<_i25.PageRouteInfo>? children}) +/// [_i14.OrderPage] +class OrderRoute extends _i26.PageRouteInfo { + const OrderRoute({List<_i26.PageRouteInfo>? children}) : super(OrderRoute.name, initialChildren: children); static const String name = 'OrderRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i13.OrderPage()); + return _i26.WrappedRoute(child: const _i14.OrderPage()); }, ); } /// generated route for -/// [_i14.OutletInformationPage] -class OutletInformationRoute extends _i25.PageRouteInfo { - const OutletInformationRoute({List<_i25.PageRouteInfo>? children}) +/// [_i15.OutletInformationPage] +class OutletInformationRoute extends _i26.PageRouteInfo { + const OutletInformationRoute({List<_i26.PageRouteInfo>? children}) : super(OutletInformationRoute.name, initialChildren: children); static const String name = 'OutletInformationRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i14.OutletInformationPage()); + return _i26.WrappedRoute(child: const _i15.OutletInformationPage()); }, ); } /// generated route for -/// [_i15.ProductAnalyticPage] -class ProductAnalyticRoute extends _i25.PageRouteInfo { - const ProductAnalyticRoute({List<_i25.PageRouteInfo>? children}) +/// [_i16.ProductAnalyticPage] +class ProductAnalyticRoute extends _i26.PageRouteInfo { + const ProductAnalyticRoute({List<_i26.PageRouteInfo>? children}) : super(ProductAnalyticRoute.name, initialChildren: children); static const String name = 'ProductAnalyticRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i15.ProductAnalyticPage()); + return _i26.WrappedRoute(child: const _i16.ProductAnalyticPage()); }, ); } /// generated route for -/// [_i16.ProductPage] -class ProductRoute extends _i25.PageRouteInfo { - const ProductRoute({List<_i25.PageRouteInfo>? children}) +/// [_i17.ProductPage] +class ProductRoute extends _i26.PageRouteInfo { + const ProductRoute({List<_i26.PageRouteInfo>? children}) : super(ProductRoute.name, initialChildren: children); static const String name = 'ProductRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i16.ProductPage()); + return _i26.WrappedRoute(child: const _i17.ProductPage()); }, ); } /// generated route for -/// [_i17.ProfileChangePasswordPage] -class ProfileChangePasswordRoute extends _i25.PageRouteInfo { - const ProfileChangePasswordRoute({List<_i25.PageRouteInfo>? children}) +/// [_i18.ProfileChangePasswordPage] +class ProfileChangePasswordRoute extends _i26.PageRouteInfo { + const ProfileChangePasswordRoute({List<_i26.PageRouteInfo>? children}) : super(ProfileChangePasswordRoute.name, initialChildren: children); static const String name = 'ProfileChangePasswordRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i17.ProfileChangePasswordPage()); + return _i26.WrappedRoute(child: const _i18.ProfileChangePasswordPage()); }, ); } /// generated route for -/// [_i18.ProfileEditPage] -class ProfileEditRoute extends _i25.PageRouteInfo { +/// [_i19.ProfileEditPage] +class ProfileEditRoute extends _i26.PageRouteInfo { ProfileEditRoute({ - _i26.Key? key, - required _i28.User user, - List<_i25.PageRouteInfo>? children, + _i27.Key? key, + required _i29.User user, + List<_i26.PageRouteInfo>? children, }) : super( ProfileEditRoute.name, args: ProfileEditRouteArgs(key: key, user: user), @@ -432,12 +450,12 @@ class ProfileEditRoute extends _i25.PageRouteInfo { static const String name = 'ProfileEditRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { final args = data.argsAs(); - return _i25.WrappedRoute( - child: _i18.ProfileEditPage(key: args.key, user: args.user), + return _i26.WrappedRoute( + child: _i19.ProfileEditPage(key: args.key, user: args.user), ); }, ); @@ -446,9 +464,9 @@ class ProfileEditRoute extends _i25.PageRouteInfo { class ProfileEditRouteArgs { const ProfileEditRouteArgs({this.key, required this.user}); - final _i26.Key? key; + final _i27.Key? key; - final _i28.User user; + final _i29.User user; @override String toString() { @@ -457,97 +475,97 @@ class ProfileEditRouteArgs { } /// generated route for -/// [_i19.ProfilePage] -class ProfileRoute extends _i25.PageRouteInfo { - const ProfileRoute({List<_i25.PageRouteInfo>? children}) +/// [_i20.ProfilePage] +class ProfileRoute extends _i26.PageRouteInfo { + const ProfileRoute({List<_i26.PageRouteInfo>? children}) : super(ProfileRoute.name, initialChildren: children); static const String name = 'ProfileRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i19.ProfilePage()); + return _i26.WrappedRoute(child: const _i20.ProfilePage()); }, ); } /// generated route for -/// [_i20.PurchasePage] -class PurchaseRoute extends _i25.PageRouteInfo { - const PurchaseRoute({List<_i25.PageRouteInfo>? children}) +/// [_i21.PurchasePage] +class PurchaseRoute extends _i26.PageRouteInfo { + const PurchaseRoute({List<_i26.PageRouteInfo>? children}) : super(PurchaseRoute.name, initialChildren: children); static const String name = 'PurchaseRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return const _i20.PurchasePage(); + return const _i21.PurchasePage(); }, ); } /// generated route for -/// [_i21.ReportPage] -class ReportRoute extends _i25.PageRouteInfo { - const ReportRoute({List<_i25.PageRouteInfo>? children}) +/// [_i22.ReportPage] +class ReportRoute extends _i26.PageRouteInfo { + const ReportRoute({List<_i26.PageRouteInfo>? children}) : super(ReportRoute.name, initialChildren: children); static const String name = 'ReportRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i21.ReportPage()); + return _i26.WrappedRoute(child: const _i22.ReportPage()); }, ); } /// generated route for -/// [_i22.SalesPage] -class SalesRoute extends _i25.PageRouteInfo { - const SalesRoute({List<_i25.PageRouteInfo>? children}) +/// [_i23.SalesPage] +class SalesRoute extends _i26.PageRouteInfo { + const SalesRoute({List<_i26.PageRouteInfo>? children}) : super(SalesRoute.name, initialChildren: children); static const String name = 'SalesRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return _i25.WrappedRoute(child: const _i22.SalesPage()); + return _i26.WrappedRoute(child: const _i23.SalesPage()); }, ); } /// generated route for -/// [_i23.SchedulePage] -class ScheduleRoute extends _i25.PageRouteInfo { - const ScheduleRoute({List<_i25.PageRouteInfo>? children}) +/// [_i24.SchedulePage] +class ScheduleRoute extends _i26.PageRouteInfo { + const ScheduleRoute({List<_i26.PageRouteInfo>? children}) : super(ScheduleRoute.name, initialChildren: children); static const String name = 'ScheduleRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return const _i23.SchedulePage(); + return const _i24.SchedulePage(); }, ); } /// generated route for -/// [_i24.SplashPage] -class SplashRoute extends _i25.PageRouteInfo { - const SplashRoute({List<_i25.PageRouteInfo>? children}) +/// [_i25.SplashPage] +class SplashRoute extends _i26.PageRouteInfo { + const SplashRoute({List<_i26.PageRouteInfo>? children}) : super(SplashRoute.name, initialChildren: children); static const String name = 'SplashRoute'; - static _i25.PageInfo page = _i25.PageInfo( + static _i26.PageInfo page = _i26.PageInfo( name, builder: (data) { - return const _i24.SplashPage(); + return const _i25.SplashPage(); }, ); } diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 64a0ece..7299b5c 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -7,9 +7,13 @@ #include "generated_plugin_registrant.h" #include +#include void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); file_selector_plugin_register_with_registrar(file_selector_linux_registrar); + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2db3c22..786ff5c 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST file_selector_linux + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 0483a55..ca4c2ff 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,17 +6,21 @@ import FlutterMacOS import Foundation import connectivity_plus +import device_info_plus import file_selector_macos import package_info_plus import path_provider_foundation import shared_preferences_foundation import sqflite_darwin +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) + DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 48ae405..a1d564d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -337,6 +337,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.11" + device_info_plus: + dependency: "direct main" + description: + name: device_info_plus + sha256: "98f28b42168cc509abc92f88518882fd58061ea372d7999aecc424345c7bff6a" + url: "https://pub.dev" + source: hosted + version: "11.5.0" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f + url: "https://pub.dev" + source: hosted + version: "7.0.3" dio: dependency: "direct main" description: @@ -1290,6 +1306,70 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "0aedad096a85b49df2e4725fa32118f9fa580f3b14af7a2d2221896a02cd5656" + url: "https://pub.dev" + source: hosted + version: "6.3.17" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7 + url: "https://pub.dev" + source: hosted + version: "6.3.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f + url: "https://pub.dev" + source: hosted + version: "3.2.3" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" + url: "https://pub.dev" + source: hosted + version: "3.1.4" uuid: dependency: transitive description: @@ -1378,6 +1458,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.14.0" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae" + url: "https://pub.dev" + source: hosted + version: "2.1.0" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 95f72d6..81c3a61 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -43,6 +43,8 @@ dependencies: shimmer: ^3.0.0 cached_network_image: ^3.4.1 syncfusion_flutter_datepicker: ^30.2.5 + url_launcher: ^6.3.2 + device_info_plus: ^11.5.0 dev_dependencies: flutter_test: diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index e6c6668..384ea41 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -8,10 +8,13 @@ #include #include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { ConnectivityPlusWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); FileSelectorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("FileSelectorWindows")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index d62d824..199b881 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -5,6 +5,7 @@ list(APPEND FLUTTER_PLUGIN_LIST connectivity_plus file_selector_windows + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST