64 changed files with 1137 additions and 523 deletions
			
			
		@ -0,0 +1,32 @@
					 | 
				
			||||
import 'package:universal_io/io.dart'; | 
				
			||||
 | 
				
			||||
class Package { | 
				
			||||
  Package({ | 
				
			||||
    required this.key, | 
				
			||||
    required this.descEN, | 
				
			||||
    required this.descRU, | 
				
			||||
    required this.version, | 
				
			||||
    required this.isPlatformDependent, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  /// Get brief description of the package | 
				
			||||
  String get desc => (Platform.localeName == 'ru_RU' ? descRU : descEN) | 
				
			||||
      .replaceAll("\n", " ") | 
				
			||||
      .replaceAll(RegExp(' +'), ' ') | 
				
			||||
      .trim(); | 
				
			||||
 | 
				
			||||
  /// Key package (https://pub.dev/packages/<KEY>) | 
				
			||||
  final String key; | 
				
			||||
 | 
				
			||||
  /// Brief description of the package (EN) | 
				
			||||
  final String descEN; | 
				
			||||
 | 
				
			||||
  /// Brief description of the package (RU) | 
				
			||||
  final String descRU; | 
				
			||||
 | 
				
			||||
  /// Version package check | 
				
			||||
  final String version; | 
				
			||||
 | 
				
			||||
  /// Is the package platform dependent? | 
				
			||||
  final bool isPlatformDependent; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,26 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:universal_io/io.dart'; | 
				
			||||
 | 
				
			||||
class PackageDialog extends Package { | 
				
			||||
  PackageDialog({ | 
				
			||||
    required super.key, | 
				
			||||
    required super.descEN, | 
				
			||||
    required super.descRU, | 
				
			||||
    required super.version, | 
				
			||||
    required super.isPlatformDependent, | 
				
			||||
    required this.messageEN, | 
				
			||||
    required this.messageRU, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  /// Get brief description of the package | 
				
			||||
  String get message => (Platform.localeName == 'ru_RU' ? messageRU : messageEN) | 
				
			||||
      .replaceAll("\n", " ") | 
				
			||||
      .replaceAll(RegExp(' +'), ' ') | 
				
			||||
      .trim(); | 
				
			||||
 | 
				
			||||
  /// Message show in dialog (EN) | 
				
			||||
  final String messageEN; | 
				
			||||
 | 
				
			||||
  /// Message show in dialog (RU) | 
				
			||||
  final String messageRU; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,23 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:universal_io/io.dart'; | 
				
			||||
 | 
				
			||||
class PackagePage extends Package { | 
				
			||||
  PackagePage({ | 
				
			||||
    required super.key, | 
				
			||||
    required super.descEN, | 
				
			||||
    required super.descRU, | 
				
			||||
    required super.version, | 
				
			||||
    required super.isPlatformDependent, | 
				
			||||
    required this.page, | 
				
			||||
    required this.init, | 
				
			||||
  }) { | 
				
			||||
    init.call(); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  /// Package preview page | 
				
			||||
  final Widget Function() page; | 
				
			||||
 | 
				
			||||
  /// Init callback | 
				
			||||
  final void Function() init; | 
				
			||||
} | 
				
			||||
@ -1,3 +1,16 @@
					 | 
				
			||||
{ | 
				
			||||
  "helloPageTitle": "Flutter Aurora OS" | 
				
			||||
  "homePageTitle": "Flutter Aurora OS", | 
				
			||||
  "homeWelcomeTitle": "Welcome!", | 
				
			||||
  "homeWelcomeText": "In this application you can find 100500 Flutter plugins supporting Aurora OS. If it happens that something is missing for you, you can write to us or add it yourself.", | 
				
			||||
  "homeListStateDependent": "platform dependent", | 
				
			||||
  "homeListStateIndependent": "platform independent", | 
				
			||||
  "homeListVersion": "Version: {version}", | 
				
			||||
  "@homeListVersion": { | 
				
			||||
    "placeholders": { | 
				
			||||
      "version": { | 
				
			||||
        "type": "String", | 
				
			||||
        "example": "1.0.0" | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,3 +1,16 @@
					 | 
				
			||||
{ | 
				
			||||
  "helloPageTitle": "Flutter ОС Аврора" | 
				
			||||
  "homePageTitle": "Flutter ОС Аврора", | 
				
			||||
  "homeWelcomeTitle": "Приветствую!", | 
				
			||||
  "homeWelcomeText": "В этом приложении вы можете найти 100500 плагинов Flutter, поддерживающих ОС Aurora. Если вдруг вам чего-то не хватает, вы можете написать нам или добавить самостоятельно.", | 
				
			||||
  "homeListStateDependent": "платформо-зависимый", | 
				
			||||
  "homeListStateIndependent": "платформонезависимый", | 
				
			||||
  "homeListVersion": "Версия: {version}", | 
				
			||||
  "@homeListVersion": { | 
				
			||||
    "placeholders": { | 
				
			||||
      "version": { | 
				
			||||
        "type": "String", | 
				
			||||
        "example": "1.0.0" | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,24 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/battery_plus/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageBatteryPlus = PackagePage( | 
				
			||||
  key: 'battery_plus', | 
				
			||||
  descEN: ''' | 
				
			||||
    A Flutter plugin to access various information about the  | 
				
			||||
    battery of the device the app is running on. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Плагин Flutter для доступа к различной информации о | 
				
			||||
    аккумулятор устройства, на котором запущено приложение. | 
				
			||||
    ''', | 
				
			||||
  version: '4.0.1', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => BatteryPlusPage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance.registerFactory<BatteryPlusModel>(() => BatteryPlusModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,27 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/battery_plus/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/battery_plus/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class BatteryPlusPage extends StatefulWidget { | 
				
			||||
  BatteryPlusPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packageBatteryPlus; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<BatteryPlusPage> createState() => _BatteryPlusPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _BatteryPlusPageState extends State<BatteryPlusPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<BatteryPlusModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,8 @@
					 | 
				
			||||
import 'package:flutter/widgets.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
/// Model for [CachedNetworkImagePage] | 
				
			||||
class CachedNetworkImageModel extends Model { | 
				
			||||
  /// Get [ScopedModel] | 
				
			||||
  static CachedNetworkImageModel of(BuildContext context) => ScopedModel.of<CachedNetworkImageModel>(context); | 
				
			||||
} | 
				
			||||
@ -0,0 +1,25 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/cached_network_image/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageCachedNetworkImage = PackagePage( | 
				
			||||
  key: 'cached_network_image', | 
				
			||||
  descEN: ''' | 
				
			||||
    A flutter library to show images from the internet  | 
				
			||||
    and keep them in the cache directory. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Библиотека флаттера для отображения изображений из  | 
				
			||||
    Интернета и хранения их в каталоге кеша. | 
				
			||||
    ''', | 
				
			||||
  version: '3.2.3', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => CachedNetworkImagePage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance.registerFactory<CachedNetworkImageModel>( | 
				
			||||
        () => CachedNetworkImageModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,27 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/cached_network_image/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/cached_network_image/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class CachedNetworkImagePage extends StatefulWidget { | 
				
			||||
  CachedNetworkImagePage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packageCachedNetworkImage; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<CachedNetworkImagePage> createState() => _CachedNetworkImagePageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _CachedNetworkImagePageState extends State<CachedNetworkImagePage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<CachedNetworkImageModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,23 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/device_info_plus/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageDeviceInfoPlus = PackagePage( | 
				
			||||
  key: 'device_info_plus', | 
				
			||||
  descEN: ''' | 
				
			||||
    Get current device information from within the Flutter application. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Получите текущую информацию об устройстве из приложения Flutter. | 
				
			||||
    ''', | 
				
			||||
  version: '9.0.2', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => DeviceInfoPlusPage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance | 
				
			||||
        .registerFactory<DeviceInfoPlusModel>(() => DeviceInfoPlusModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,27 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/device_info_plus/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/device_info_plus/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class DeviceInfoPlusPage extends StatefulWidget { | 
				
			||||
  DeviceInfoPlusPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packageDeviceInfoPlus; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<DeviceInfoPlusPage> createState() => _DeviceInfoPlusPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _DeviceInfoPlusPageState extends State<DeviceInfoPlusPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<DeviceInfoPlusModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,8 @@
					 | 
				
			||||
import 'package:flutter/widgets.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
/// Model for [FlutterCacheManagerPage] | 
				
			||||
class FlutterCacheManagerModel extends Model { | 
				
			||||
  /// Get [ScopedModel] | 
				
			||||
  static FlutterCacheManagerModel of(BuildContext context) => ScopedModel.of<FlutterCacheManagerModel>(context); | 
				
			||||
} | 
				
			||||
@ -0,0 +1,25 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_cache_manager/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageFlutterCacheManager = PackagePage( | 
				
			||||
  key: 'flutter_cache_manager', | 
				
			||||
  descEN: ''' | 
				
			||||
    CacheManager v2 introduced some breaking changes when configuring  | 
				
			||||
    a custom CacheManager. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    В CacheManager v2 были внесены некоторые критические изменения при  | 
				
			||||
    настройке пользовательского CacheManager. | 
				
			||||
    ''', | 
				
			||||
  version: '3.3.0', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => FlutterCacheManagerPage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance.registerFactory<FlutterCacheManagerModel>( | 
				
			||||
        () => FlutterCacheManagerModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,28 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_cache_manager/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_cache_manager/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class FlutterCacheManagerPage extends StatefulWidget { | 
				
			||||
  FlutterCacheManagerPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packageFlutterCacheManager; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<FlutterCacheManagerPage> createState() => | 
				
			||||
      _FlutterCacheManagerPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _FlutterCacheManagerPageState extends State<FlutterCacheManagerPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<FlutterCacheManagerModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,23 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_local_notifications/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageFlutterLocalNotifications = PackagePage( | 
				
			||||
  key: 'flutter_local_notifications', | 
				
			||||
  descEN: ''' | 
				
			||||
    A cross platform plugin for displaying local notifications. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Кроссплатформенный плагин для отображения локальных уведомлений. | 
				
			||||
    ''', | 
				
			||||
  version: '14.1.1', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => FlutterLocalNotificationsPage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance.registerFactory<FlutterLocalNotificationsModel>( | 
				
			||||
        () => FlutterLocalNotificationsModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,29 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_local_notifications/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_local_notifications/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class FlutterLocalNotificationsPage extends StatefulWidget { | 
				
			||||
  FlutterLocalNotificationsPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packageFlutterLocalNotifications; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<FlutterLocalNotificationsPage> createState() => | 
				
			||||
      _FlutterLocalNotificationsPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _FlutterLocalNotificationsPageState | 
				
			||||
    extends State<FlutterLocalNotificationsPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<FlutterLocalNotificationsModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,23 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_secure_storage/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageFlutterSecureStorage = PackagePage( | 
				
			||||
  key: 'flutter_secure_storage', | 
				
			||||
  descEN: ''' | 
				
			||||
    Flutter Secure Storage provides API to store data in secure storage. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Flutter Secure Storage предоставляет API для хранения данных в безопасном хранилище. | 
				
			||||
    ''', | 
				
			||||
  version: '8.0.0', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => FlutterSecureStoragePage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance.registerFactory<FlutterSecureStorageModel>( | 
				
			||||
        () => FlutterSecureStorageModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,29 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_secure_storage/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
import 'package.dart'; | 
				
			||||
 | 
				
			||||
class FlutterSecureStoragePage extends StatefulWidget { | 
				
			||||
  FlutterSecureStoragePage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packageFlutterSecureStorage; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<FlutterSecureStoragePage> createState() => | 
				
			||||
      _FlutterSecureStoragePageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _FlutterSecureStoragePageState extends State<FlutterSecureStoragePage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<FlutterSecureStorageModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,24 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_dialog.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageGetIt = PackageDialog( | 
				
			||||
  key: 'get_it', | 
				
			||||
  descEN: ''' | 
				
			||||
    This is a simple Service Locator for Dart and Flutter projects with some  | 
				
			||||
    additional goodies highly inspired by Splat. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Это простой сервис-локатор для проектов Dart и Flutter с некоторыми | 
				
			||||
    дополнительные вкусности, вдохновленные Splat. | 
				
			||||
    ''', | 
				
			||||
  messageEN: ''' | 
				
			||||
  This is a platform independent plugin used in this app, should work  | 
				
			||||
  for you too. | 
				
			||||
  ''', | 
				
			||||
  messageRU: ''' | 
				
			||||
  Это плагин независимый от платформы, используется в этом приложении,  | 
				
			||||
  должен работать и у вас. | 
				
			||||
  ''', | 
				
			||||
  version: '7.6.0', | 
				
			||||
  isPlatformDependent: false, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,25 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/package_info_plus/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packagePackageInfoPlus = PackagePage( | 
				
			||||
  key: 'package_info_plus', | 
				
			||||
  descEN: ''' | 
				
			||||
    This Flutter plugin provides an API for querying information about  | 
				
			||||
    an application package. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Этот плагин Flutter предоставляет API для запроса информации о  | 
				
			||||
    пакете приложения. | 
				
			||||
    ''', | 
				
			||||
  version: '3.2.3', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => PackageInfoPlusPage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance | 
				
			||||
        .registerFactory<PackageInfoPlusModel>(() => PackageInfoPlusModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,27 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/package_info_plus/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/package_info_plus/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class PackageInfoPlusPage extends StatefulWidget { | 
				
			||||
  PackageInfoPlusPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packagePackageInfoPlus; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<PackageInfoPlusPage> createState() => _PackageInfoPlusPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _PackageInfoPlusPageState extends State<PackageInfoPlusPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<PackageInfoPlusModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,30 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/battery_plus/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/cached_network_image/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/device_info_plus/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_cache_manager/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_local_notifications/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/flutter_secure_storage/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/get_it/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/package_info_plus/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/path_provider/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/shared_preferences/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/wakelock/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/xdga_directories/package.dart'; | 
				
			||||
 | 
				
			||||
/// List app packages | 
				
			||||
final packages = <Package>[ | 
				
			||||
  // Check with preview | 
				
			||||
  packageBatteryPlus, | 
				
			||||
  packageCachedNetworkImage, | 
				
			||||
  packageDeviceInfoPlus, | 
				
			||||
  packageFlutterCacheManager, | 
				
			||||
  packageFlutterLocalNotifications, | 
				
			||||
  packageFlutterSecureStorage, | 
				
			||||
  packageGetIt, | 
				
			||||
  packagePackageInfoPlus, | 
				
			||||
  packagePathProvider, | 
				
			||||
  packageSharedPreferences, | 
				
			||||
  packageWakelock, | 
				
			||||
  packageXdgaDirectories, | 
				
			||||
]; | 
				
			||||
@ -0,0 +1,27 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/path_provider/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packagePathProvider = PackagePage( | 
				
			||||
  key: 'path_provider', | 
				
			||||
  descEN: ''' | 
				
			||||
    A Flutter plugin for finding commonly used locations on the filesystem.  | 
				
			||||
    Supports Android, iOS, Linux, macOS, Windows and Aurora OS.  | 
				
			||||
    Not all methods are supported on all platforms. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
     Плагин Flutter для поиска часто используемых мест в файловой системе. | 
				
			||||
     Поддерживает Android, iOS, Linux, macOS, Windows и ОС Aurora. | 
				
			||||
     Не все методы поддерживаются на всех платформах. | 
				
			||||
    ''', | 
				
			||||
  version: '2.0.15', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => PathProviderPage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance | 
				
			||||
        .registerFactory<PathProviderModel>(() => PathProviderModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,25 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/path_provider/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/path_provider/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class PathProviderPage extends StatefulWidget { | 
				
			||||
  PathProviderPage({super.key}); | 
				
			||||
 | 
				
			||||
  final Package package = packagePathProvider; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<PathProviderPage> createState() => _PathProviderPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _PathProviderPageState extends State<PathProviderPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<PathProviderModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,23 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/shared_preferences/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageSharedPreferences = PackagePage( | 
				
			||||
  key: 'shared_preferences', | 
				
			||||
  descEN: ''' | 
				
			||||
    Wraps platform-specific persistent storage for simple data. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Обертывает постоянное хранилище для конкретных платформ для простых данных. | 
				
			||||
    ''', | 
				
			||||
  version: '2.1.2', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => SharedPreferencesPage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance.registerFactory<SharedPreferencesModel>( | 
				
			||||
        () => SharedPreferencesModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,27 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/shared_preferences/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/shared_preferences/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class SharedPreferencesPage extends StatefulWidget { | 
				
			||||
  SharedPreferencesPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packageSharedPreferences; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<SharedPreferencesPage> createState() => _SharedPreferencesPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _SharedPreferencesPageState extends State<SharedPreferencesPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<SharedPreferencesModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,24 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/wakelock/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageWakelock = PackagePage( | 
				
			||||
  key: 'wakelock', | 
				
			||||
  descEN: ''' | 
				
			||||
    Plugin that allows you to keep the device screen awake, i.e.  | 
				
			||||
    prevent the screen from sleeping. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Плагин, который позволяет держать экран устройства в активном состоянии,  | 
				
			||||
    т. е. предотвращать переход экрана в спящий режим. | 
				
			||||
    ''', | 
				
			||||
  version: '0.6.2', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => WakelockPage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance.registerFactory<WakelockModel>(() => WakelockModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,27 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/wakelock/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/wakelock/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class WakelockPage extends StatefulWidget { | 
				
			||||
  WakelockPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packageWakelock; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<WakelockPage> createState() => _WakelockPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _WakelockPageState extends State<WakelockPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<WakelockModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,25 @@
					 | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/xdga_directories/page.dart'; | 
				
			||||
import 'package:get_it/get_it.dart'; | 
				
			||||
 | 
				
			||||
import 'model.dart'; | 
				
			||||
 | 
				
			||||
/// Package values | 
				
			||||
final packageXdgaDirectories = PackagePage( | 
				
			||||
  key: 'xdga_directories', | 
				
			||||
  descEN: ''' | 
				
			||||
    A Dart package for reading XDG directory configuration information  | 
				
			||||
    on Aurora OS. | 
				
			||||
    ''', | 
				
			||||
  descRU: ''' | 
				
			||||
    Пакет Dart для чтения информации о конфигурации каталога XDG | 
				
			||||
    на ОС Аврора. | 
				
			||||
    ''', | 
				
			||||
  version: '0.0.1', | 
				
			||||
  isPlatformDependent: true, | 
				
			||||
  page: () => XdgaDirectoriesPage(), | 
				
			||||
  init: () { | 
				
			||||
    GetIt.instance | 
				
			||||
        .registerFactory<XdgaDirectoriesModel>(() => XdgaDirectoriesModel()); | 
				
			||||
  }, | 
				
			||||
); | 
				
			||||
@ -0,0 +1,27 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/xdga_directories/model.dart'; | 
				
			||||
import 'package:flutter_example_packages/packages/xdga_directories/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; | 
				
			||||
 | 
				
			||||
class XdgaDirectoriesPage extends StatefulWidget { | 
				
			||||
  XdgaDirectoriesPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final Package package = packageXdgaDirectories; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<XdgaDirectoriesPage> createState() => _XdgaDirectoriesPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _XdgaDirectoriesPageState extends State<XdgaDirectoriesPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return BlockLayout<XdgaDirectoriesModel>( | 
				
			||||
        title: widget.package.key, | 
				
			||||
        builder: (context, child, model) { | 
				
			||||
          return Text(widget.package.desc); | 
				
			||||
        }); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/battery_plus/model.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class BatteryPlusPage extends StatefulWidget { | 
				
			||||
  const BatteryPlusPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<BatteryPlusPage> createState() => _BatteryPlusPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _BatteryPlusPageState extends State<BatteryPlusPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return ScopedModel<BatteryPlusModel>( | 
				
			||||
      model: getIt<BatteryPlusModel>(), | 
				
			||||
      child: ScopedModelDescendant<BatteryPlusModel>(builder: (context, child, model) { | 
				
			||||
        return Wrap( | 
				
			||||
          spacing: 20, | 
				
			||||
          runSpacing: 20, | 
				
			||||
          children: const [ | 
				
			||||
            Text("data"), | 
				
			||||
          ], | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/device_info_plus/model.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class DeviceInfoPlusPage extends StatefulWidget { | 
				
			||||
  const DeviceInfoPlusPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<DeviceInfoPlusPage> createState() => _DeviceInfoPlusPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _DeviceInfoPlusPageState extends State<DeviceInfoPlusPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return ScopedModel<DeviceInfoPlusModel>( | 
				
			||||
      model: getIt<DeviceInfoPlusModel>(), | 
				
			||||
      child: ScopedModelDescendant<DeviceInfoPlusModel>(builder: (context, child, model) { | 
				
			||||
        return Wrap( | 
				
			||||
          spacing: 20, | 
				
			||||
          runSpacing: 20, | 
				
			||||
          children: const [ | 
				
			||||
            Text("data"), | 
				
			||||
          ], | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/flutter_local_notifications/model.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class FlutterLocalNotificationsPage extends StatefulWidget { | 
				
			||||
  const FlutterLocalNotificationsPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<FlutterLocalNotificationsPage> createState() => _FlutterLocalNotificationsPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _FlutterLocalNotificationsPageState extends State<FlutterLocalNotificationsPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return ScopedModel<FlutterLocalNotificationsModel>( | 
				
			||||
      model: getIt<FlutterLocalNotificationsModel>(), | 
				
			||||
      child: ScopedModelDescendant<FlutterLocalNotificationsModel>(builder: (context, child, model) { | 
				
			||||
        return Wrap( | 
				
			||||
          spacing: 20, | 
				
			||||
          runSpacing: 20, | 
				
			||||
          children: const [ | 
				
			||||
            Text("data"), | 
				
			||||
          ], | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/flutter_secure_storage/model.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class FlutterSecureStoragePage extends StatefulWidget { | 
				
			||||
  const FlutterSecureStoragePage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<FlutterSecureStoragePage> createState() => _FlutterSecureStoragePageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _FlutterSecureStoragePageState extends State<FlutterSecureStoragePage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return ScopedModel<FlutterSecureStorageModel>( | 
				
			||||
      model: getIt<FlutterSecureStorageModel>(), | 
				
			||||
      child: ScopedModelDescendant<FlutterSecureStorageModel>(builder: (context, child, model) { | 
				
			||||
        return Wrap( | 
				
			||||
          spacing: 20, | 
				
			||||
          runSpacing: 20, | 
				
			||||
          children: const [ | 
				
			||||
            Text("data"), | 
				
			||||
          ], | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,56 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package_dialog.dart'; | 
				
			||||
 | 
				
			||||
class PackageInfoDialog extends StatelessWidget { | 
				
			||||
  const PackageInfoDialog({ | 
				
			||||
    super.key, | 
				
			||||
    required this.package, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final PackageDialog package; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    final theme = Theme.of(context); | 
				
			||||
 | 
				
			||||
    return Dialog( | 
				
			||||
      child: Padding( | 
				
			||||
        padding: const EdgeInsets.all(20), | 
				
			||||
        child: Column( | 
				
			||||
          mainAxisSize: MainAxisSize.min, | 
				
			||||
          crossAxisAlignment: CrossAxisAlignment.start, | 
				
			||||
          children: [ | 
				
			||||
            Text( | 
				
			||||
              package.key, | 
				
			||||
              textAlign: TextAlign.left, | 
				
			||||
              style: theme.textTheme.titleSmall, | 
				
			||||
            ), | 
				
			||||
            const SizedBox(height: 15), | 
				
			||||
            Text( | 
				
			||||
              package.message, | 
				
			||||
              textAlign: TextAlign.left, | 
				
			||||
              style: theme.textTheme.bodyLarge?.copyWith( | 
				
			||||
                height: 1.5, | 
				
			||||
              ), | 
				
			||||
            ), | 
				
			||||
            const SizedBox(height: 20), | 
				
			||||
        Row( | 
				
			||||
          children: [ | 
				
			||||
            const Spacer(), | 
				
			||||
            OutlinedButton( | 
				
			||||
              onPressed: () { | 
				
			||||
                Navigator.of(context).pop(); | 
				
			||||
              }, | 
				
			||||
              child: const Text("Close"), | 
				
			||||
            ), | 
				
			||||
 | 
				
			||||
          ], | 
				
			||||
 | 
				
			||||
        ), | 
				
			||||
 | 
				
			||||
          ], | 
				
			||||
        ), | 
				
			||||
      ), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,150 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package_dialog.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/package/package_page.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/home/widgets/package_info_dialog.dart'; | 
				
			||||
import 'package:flutter_example_packages/theme/colors.dart'; | 
				
			||||
import 'package:flutter_example_packages/theme/radius.dart'; | 
				
			||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | 
				
			||||
 | 
				
			||||
class PackageListItemWidget extends StatelessWidget { | 
				
			||||
  const PackageListItemWidget({ | 
				
			||||
    super.key, | 
				
			||||
    required this.index, | 
				
			||||
    required this.item, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final int index; | 
				
			||||
  final Package item; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    final theme = Theme.of(context); | 
				
			||||
    final localizations = AppLocalizations.of(context)!; | 
				
			||||
 | 
				
			||||
    return Container( | 
				
			||||
      decoration: BoxDecoration( | 
				
			||||
        color: Colors.white, | 
				
			||||
        borderRadius: index == 0 | 
				
			||||
            ? const BorderRadius.only( | 
				
			||||
                topLeft: Radius.circular(20), | 
				
			||||
                topRight: Radius.circular(20), | 
				
			||||
              ) | 
				
			||||
            : null, | 
				
			||||
      ), | 
				
			||||
      child: Padding( | 
				
			||||
        padding: index == 0 | 
				
			||||
            ? const EdgeInsets.only(left: 20, right: 20, top: 20, bottom: 0) | 
				
			||||
            : const EdgeInsets.symmetric(horizontal: 20), | 
				
			||||
        child: Column( | 
				
			||||
          children: [ | 
				
			||||
            Stack( | 
				
			||||
              children: [ | 
				
			||||
                Padding( | 
				
			||||
                  padding: const EdgeInsets.only(top: 10), | 
				
			||||
                  child: Stack( | 
				
			||||
                    children: [ | 
				
			||||
                      SizedBox( | 
				
			||||
                        width: double.infinity, | 
				
			||||
                        child: Card( | 
				
			||||
                          child: Padding( | 
				
			||||
                            padding: const EdgeInsets.all(20), | 
				
			||||
                            child: Column( | 
				
			||||
                              crossAxisAlignment: CrossAxisAlignment.start, | 
				
			||||
                              children: [ | 
				
			||||
                                Text( | 
				
			||||
                                  item.key, | 
				
			||||
                                  textAlign: TextAlign.left, | 
				
			||||
                                  style: theme.textTheme.titleSmall, | 
				
			||||
                                ), | 
				
			||||
                                const SizedBox(height: 10), | 
				
			||||
                                Text( | 
				
			||||
                                  item.desc, | 
				
			||||
                                  textAlign: TextAlign.left, | 
				
			||||
                                  style: theme.textTheme.bodyMedium?.copyWith( | 
				
			||||
                                      color: Colors.black.withOpacity(0.6)), | 
				
			||||
                                ), | 
				
			||||
                                const SizedBox(height: 12), | 
				
			||||
                                Divider( | 
				
			||||
                                    height: 1, | 
				
			||||
                                    color: | 
				
			||||
                                        AppColors.primaryDark.withOpacity(0.2)), | 
				
			||||
                                const SizedBox(height: 12), | 
				
			||||
                                Text( | 
				
			||||
                                  localizations.homeListVersion(item.version), | 
				
			||||
                                  textAlign: TextAlign.left, | 
				
			||||
                                  style: theme.textTheme.caption?.copyWith( | 
				
			||||
                                      color: AppColors.primaryDark | 
				
			||||
                                          .withOpacity(0.7)), | 
				
			||||
                                ), | 
				
			||||
                              ], | 
				
			||||
                            ), | 
				
			||||
                          ), | 
				
			||||
                        ), | 
				
			||||
                      ), | 
				
			||||
                      Positioned.fill( | 
				
			||||
                        child: Material( | 
				
			||||
                          color: Colors.transparent, | 
				
			||||
                          child: InkWell( | 
				
			||||
                            customBorder: RoundedRectangleBorder( | 
				
			||||
                              borderRadius: AppRadius.small, | 
				
			||||
                            ), | 
				
			||||
                            hoverColor: Colors.transparent, | 
				
			||||
                            onTap: () { | 
				
			||||
                              if (item is PackagePage) { | 
				
			||||
                                Navigator.pushNamed(context, '/${item.key}'); | 
				
			||||
                              } else if (item is PackageDialog) { | 
				
			||||
                                showDialog( | 
				
			||||
                                    context: context, | 
				
			||||
                                    builder: (BuildContext context) { | 
				
			||||
                                      return PackageInfoDialog( | 
				
			||||
                                        package: item as PackageDialog, | 
				
			||||
                                      ); | 
				
			||||
                                    }); | 
				
			||||
                              } | 
				
			||||
                            }, | 
				
			||||
                          ), | 
				
			||||
                        ), | 
				
			||||
                      ), | 
				
			||||
                    ], | 
				
			||||
                  ), | 
				
			||||
                ), | 
				
			||||
                Align( | 
				
			||||
                  alignment: FractionalOffset.topRight, | 
				
			||||
                  child: Container( | 
				
			||||
                    margin: const EdgeInsets.only(right: 16), | 
				
			||||
                    decoration: BoxDecoration( | 
				
			||||
                      color: item.isPlatformDependent | 
				
			||||
                          ? Colors.orange | 
				
			||||
                          : Colors.blueAccent, | 
				
			||||
                      borderRadius: AppRadius.small, | 
				
			||||
                    ), | 
				
			||||
                    child: Padding( | 
				
			||||
                      padding: const EdgeInsets.only( | 
				
			||||
                        left: 6, | 
				
			||||
                        top: 3, | 
				
			||||
                        right: 6, | 
				
			||||
                        bottom: 6, | 
				
			||||
                      ), | 
				
			||||
                      child: Text( | 
				
			||||
                        item.isPlatformDependent | 
				
			||||
                            ? localizations.homeListStateDependent | 
				
			||||
                            : localizations.homeListStateIndependent, | 
				
			||||
                        textAlign: TextAlign.left, | 
				
			||||
                        style: theme.textTheme.caption?.copyWith( | 
				
			||||
                          color: Colors.white, | 
				
			||||
                          fontWeight: FontWeight.w100, | 
				
			||||
                        ), | 
				
			||||
                      ), | 
				
			||||
                    ), | 
				
			||||
                  ), | 
				
			||||
                ), | 
				
			||||
              ], | 
				
			||||
            ), | 
				
			||||
            const SizedBox(height: 20), | 
				
			||||
          ], | 
				
			||||
        ), | 
				
			||||
      ), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/package_info_plus/model.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class PackageInfoPlusPage extends StatefulWidget { | 
				
			||||
  const PackageInfoPlusPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<PackageInfoPlusPage> createState() => _PackageInfoPlusPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _PackageInfoPlusPageState extends State<PackageInfoPlusPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return ScopedModel<PackageInfoPlusModel>( | 
				
			||||
      model: getIt<PackageInfoPlusModel>(), | 
				
			||||
      child: ScopedModelDescendant<PackageInfoPlusModel>(builder: (context, child, model) { | 
				
			||||
        return Wrap( | 
				
			||||
          spacing: 20, | 
				
			||||
          runSpacing: 20, | 
				
			||||
          children: const [ | 
				
			||||
            Text("data"), | 
				
			||||
          ], | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/path_provider/model.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class PathProviderPage extends StatefulWidget { | 
				
			||||
  const PathProviderPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<PathProviderPage> createState() => _PathProviderPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _PathProviderPageState extends State<PathProviderPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return ScopedModel<PathProviderModel>( | 
				
			||||
      model: getIt<PathProviderModel>(), | 
				
			||||
      child: ScopedModelDescendant<PathProviderModel>(builder: (context, child, model) { | 
				
			||||
        return Wrap( | 
				
			||||
          spacing: 20, | 
				
			||||
          runSpacing: 20, | 
				
			||||
          children: const [ | 
				
			||||
            Text("data"), | 
				
			||||
          ], | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/shared_preferences/model.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class SharedPreferencesPage extends StatefulWidget { | 
				
			||||
  const SharedPreferencesPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<SharedPreferencesPage> createState() => _SharedPreferencesPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _SharedPreferencesPageState extends State<SharedPreferencesPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return ScopedModel<SharedPreferencesModel>( | 
				
			||||
      model: getIt<SharedPreferencesModel>(), | 
				
			||||
      child: ScopedModelDescendant<SharedPreferencesModel>(builder: (context, child, model) { | 
				
			||||
        return Wrap( | 
				
			||||
          spacing: 20, | 
				
			||||
          runSpacing: 20, | 
				
			||||
          children: const [ | 
				
			||||
            Text("data"), | 
				
			||||
          ], | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/wakelock/model.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class WakelockPage extends StatefulWidget { | 
				
			||||
  const WakelockPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<WakelockPage> createState() => _WakelockPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _WakelockPageState extends State<WakelockPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return ScopedModel<WakelockModel>( | 
				
			||||
      model: getIt<WakelockModel>(), | 
				
			||||
      child: ScopedModelDescendant<WakelockModel>(builder: (context, child, model) { | 
				
			||||
        return Wrap( | 
				
			||||
          spacing: 20, | 
				
			||||
          runSpacing: 20, | 
				
			||||
          children: const [ | 
				
			||||
            Text("data"), | 
				
			||||
          ], | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/pages/xdga_directories/model.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class XdgaDirectoriesPage extends StatefulWidget { | 
				
			||||
  const XdgaDirectoriesPage({ | 
				
			||||
    super.key, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  State<XdgaDirectoriesPage> createState() => _XdgaDirectoriesPageState(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
class _XdgaDirectoriesPageState extends State<XdgaDirectoriesPage> { | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    return ScopedModel<XdgaDirectoriesModel>( | 
				
			||||
      model: getIt<XdgaDirectoriesModel>(), | 
				
			||||
      child: ScopedModelDescendant<XdgaDirectoriesModel>(builder: (context, child, model) { | 
				
			||||
        return Wrap( | 
				
			||||
          spacing: 20, | 
				
			||||
          runSpacing: 20, | 
				
			||||
          children: const [ | 
				
			||||
            Text("data"), | 
				
			||||
          ], | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,40 @@
					 | 
				
			||||
import 'package:flutter/material.dart'; | 
				
			||||
import 'package:flutter_example_packages/base/di/app_di.dart'; | 
				
			||||
import 'package:flutter_example_packages/theme/colors.dart'; | 
				
			||||
import 'package:scoped_model/scoped_model.dart'; | 
				
			||||
 | 
				
			||||
class BlockLayout<T extends Model> extends StatelessWidget { | 
				
			||||
  const BlockLayout({ | 
				
			||||
    super.key, | 
				
			||||
    this.title, | 
				
			||||
    required this.builder, | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  final String? title; | 
				
			||||
  final Widget Function(BuildContext context, Widget? child, T model) builder; | 
				
			||||
 | 
				
			||||
  @override | 
				
			||||
  Widget build(BuildContext context) { | 
				
			||||
    final theme = Theme.of(context); | 
				
			||||
 | 
				
			||||
    return ScopedModel<T>( | 
				
			||||
      model: getIt<T>(), | 
				
			||||
      child: ScopedModelDescendant<T>(builder: (context, child, model) { | 
				
			||||
        return Scaffold( | 
				
			||||
          appBar: title == null ? null : AppBar( | 
				
			||||
            backgroundColor: AppColors.primaryDark, | 
				
			||||
            title: Text( | 
				
			||||
              title!, | 
				
			||||
              textAlign: TextAlign.left, | 
				
			||||
              style: theme.textTheme.titleSmall?.copyWith(color: Colors.white), | 
				
			||||
            ), | 
				
			||||
          ), | 
				
			||||
          body: Padding( | 
				
			||||
            padding: EdgeInsets.all(title == null ? 0 : 20), | 
				
			||||
            child: builder.call(context, child, model), | 
				
			||||
          ), | 
				
			||||
        ); | 
				
			||||
      }), | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue