diff --git a/README.md b/README.md index ae83560..f118e08 100644 --- a/README.md +++ b/README.md @@ -18,16 +18,24 @@ Packages made or for review | [shared_preferences](https://pub.dev/packages/shared_preferences) | 2.1.2 | 4.0.2 | Review | - | | [sqflite](https://pub.dev/packages/sqflite) | 2.2.6 | 4.0.2 | Review | - | | [wakelock](https://pub.dev/packages/wakelock) | 0.6.2 | 4.0.2 | Review | - | -| xdga_directories | - | 4.0.2 | Review | Аналог [xdg_directories](https://pub.dev/packages/xdg_directories) | +| xdga_directories | 0.0.1 | 4.0.2 | Review | Аналог [xdg_directories](https://pub.dev/packages/xdg_directories) | ## Package verified Verified packages on Aurora OS -| Package | Version | OS Version | State | Comment | -|-------------------------------------------------------------------------|----------|-------------|--------|------------------------------------| -| [flutter_cache_manager](https://pub.dev/packages/flutter_cache_manager) | 3.3.0 | 4.0.2 | Done | Depends on `path_provider` | -| [cached_network_image](https://pub.dev/packages/cached_network_image) | 3.2.3 | 4.0.2 | Done | Depends on `flutter_cache_manager` | +| Package | Version | OS Version | State | Comment | +|-------------------------------------------------------------------------|---------|-------------|--------|------------------------------------| +| [flutter_cache_manager](https://pub.dev/packages/flutter_cache_manager) | 3.3.0 | 4.0.2 | Done | Depends on `path_provider` | +| [cached_network_image](https://pub.dev/packages/cached_network_image) | 3.2.3 | 4.0.2 | Done | Depends on `flutter_cache_manager` | +| [crypto](https://pub.dev/packages/crypto) | 3.0.2 | 4.0.2 | Done | - | +| [cupertino_icons](https://pub.dev/packages/cupertino_icons) | 1.0.5 | 4.0.2 | Done | - | +| [get_it](https://pub.dev/packages/get_it) | 7.6.0 | 4.0.2 | Done | - | +| [google_fonts](https://pub.dev/packages/google_fonts) | 4.0.4 | 4.0.2 | Done | - | +| [intl](https://pub.dev/packages/intl) | 0.17.0 | 4.0.2 | Done | - | +| [photo_view](https://pub.dev/packages/photo_view) | 0.14.0 | 4.0.2 | Done | - | +| [scoped_model](https://pub.dev/packages/scoped_model) | 2.0.0 | 4.0.2 | Done | - | +| [universal_io](https://pub.dev/packages/universal_io) | 2.2.0 | 4.0.2 | Done | - | ## Package in progress @@ -39,7 +47,6 @@ Started development and its status | [url_launcher](https://pub.dev/packages/url_launcher) | 6.1.11 | 5.0.0 | Waiting | [OpenURI](https://confluence.omprussia.ru/pages/viewpage.action?pageId=163055648) | | [sensors_plus](https://pub.dev/packages/sensors_plus) | 3.0.2 | 4.0.2 | Blocked | Нет интерфейса для использования Sensors API без Qt | - ## Package waiting Packets waiting in line diff --git a/example/assets/images/large_image.jpg b/example/assets/images/large_image.jpg new file mode 100644 index 0000000..f49af2f Binary files /dev/null and b/example/assets/images/large_image.jpg differ diff --git a/example/data/raw/gingerbread-man-christmas-treat-candy-cartoon.svg b/example/data/raw/gingerbread-man-christmas-treat-candy-cartoon.svg new file mode 100644 index 0000000..a14f383 --- /dev/null +++ b/example/data/raw/gingerbread-man-christmas-treat-candy-cartoon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/example/data/raw/links b/example/data/raw/links index 1b25a2e..6c111aa 100644 --- a/example/data/raw/links +++ b/example/data/raw/links @@ -1,2 +1,3 @@ https://iconduck.com/icons/94312/flutter https://iconduck.com/icons/54169/package +https://iconduck.com/illustrations/108225/gingerbread-man-christmas-treat-candy-cartoon diff --git a/example/lib/packages/cached_network_image/page.dart b/example/lib/packages/cached_network_image/page.dart index 59fd59e..8009fb0 100644 --- a/example/lib/packages/cached_network_image/page.dart +++ b/example/lib/packages/cached_network_image/page.dart @@ -5,7 +5,6 @@ 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/base/export.dart'; -import 'package:flutter_example_packages/widgets/blocks/block_alert.dart'; import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -46,9 +45,9 @@ class _CachedNetworkImagePageState extends AppState { child: CachedNetworkImage( imageUrl: "https://via.placeholder.com/350x150", placeholder: (context, url) => - const CircularProgressIndicator(), + const CircularProgressIndicator(), errorWidget: (context, url, error) => - const Icon(Icons.error), + const Icon(Icons.error), ), ), ), diff --git a/example/lib/packages/packages.dart b/example/lib/packages/packages.dart index 4c50c71..a669d9c 100644 --- a/example/lib/packages/packages.dart +++ b/example/lib/packages/packages.dart @@ -11,6 +11,7 @@ import 'package:flutter_example_packages/packages/google_fonts/package.dart'; import 'package:flutter_example_packages/packages/intl/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/photo_view/package.dart'; import 'package:flutter_example_packages/packages/scoped_model/package.dart'; import 'package:flutter_example_packages/packages/shared_preferences/package.dart'; import 'package:flutter_example_packages/packages/sqflite/package.dart'; @@ -35,6 +36,7 @@ final packages = [ packageIntl, packagePackageInfoPlus, packagePathProvider, + packagePhotoView, packageScopedModel, packageSharedPreferences, packageSqflite, diff --git a/example/lib/packages/photo_view/model.dart b/example/lib/packages/photo_view/model.dart new file mode 100644 index 0000000..126e62a --- /dev/null +++ b/example/lib/packages/photo_view/model.dart @@ -0,0 +1,8 @@ +import 'package:flutter/widgets.dart'; +import 'package:scoped_model/scoped_model.dart'; + +/// Model for [PhotoViewPage] +class PhotoViewModel extends Model { + /// Get [ScopedModel] + static PhotoViewModel of(BuildContext context) => ScopedModel.of(context); +} diff --git a/example/lib/packages/photo_view/package.dart b/example/lib/packages/photo_view/package.dart new file mode 100644 index 0000000..6dea8d1 --- /dev/null +++ b/example/lib/packages/photo_view/package.dart @@ -0,0 +1,23 @@ +import 'package:flutter_example_packages/base/package/package_page.dart'; +import 'package:flutter_example_packages/packages/photo_view/page.dart'; +import 'package:get_it/get_it.dart'; + +import 'model.dart'; + +/// Package values +final packagePhotoView = PackagePage( + key: 'photo_view', + descEN: ''' + A simple zoomable image/content widget for Flutter. + ''', + descRU: ''' + Простой масштабируемый виджет изображения/контента для Flutter. + ''', + version: '0.14.0', + isPlatformDependent: false, + page: () => PhotoViewPage(), + init: () { + GetIt.instance.registerFactory( + () => PhotoViewModel()); + }, +); diff --git a/example/lib/packages/photo_view/page.dart b/example/lib/packages/photo_view/page.dart new file mode 100644 index 0000000..a44e455 --- /dev/null +++ b/example/lib/packages/photo_view/page.dart @@ -0,0 +1,82 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_example_packages/base/di/app_di.dart'; +import 'package:flutter_example_packages/base/package/package.dart'; +import 'package:flutter_example_packages/packages/photo_view/model.dart'; +import 'package:flutter_example_packages/packages/photo_view/package.dart'; +import 'package:flutter_example_packages/theme/radius.dart'; +import 'package:flutter_example_packages/widgets/base/export.dart'; +import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; +import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:photo_view/photo_view.dart'; + +class PhotoViewPage extends AppStatefulWidget { + PhotoViewPage({ + super.key, + }); + + final Package package = packagePhotoView; + + @override + State createState() => _PhotoViewPageState(); +} + +class _PhotoViewPageState extends AppState { + double _heightPhotoView = 1; + final _keyPhotoView = GlobalKey(); + + @override + void onDidChangeMetrics() { + setState(() { + _heightPhotoView = _getHeightPhotoView(); + }); + } + + @override + Widget buildWide( + BuildContext context, + MediaQueryData media, + AppLocalizations l10n, + ) { + return BlockLayout( + model: getIt(), + title: widget.package.key, + builder: (context, child, model) { + return SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + BlockInfoPackage(widget.package), + ClipRRect( + borderRadius: AppRadius.small, + child: SizedBox( + key: _keyPhotoView, + width: double.infinity, + height: _heightPhotoView, + child: PhotoView( + imageProvider: + const AssetImage("assets/images/large_image.jpg"), + ), + ), + ), + ], + ), + ), + ); + }, + ); + } + + double _getHeightPhotoView() { + if (_keyPhotoView.currentContext != null) { + RenderBox? box = + _keyPhotoView.currentContext?.findRenderObject() as RenderBox; + Offset position = + box.localToGlobal(Offset.zero); //this is global position + return MediaQuery.of(context).size.height - position.dy - 20; + } + return 1; + } +} diff --git a/example/lib/pages/home/page.dart b/example/lib/pages/home/page.dart index 701194a..546a962 100644 --- a/example/lib/pages/home/page.dart +++ b/example/lib/pages/home/page.dart @@ -26,12 +26,6 @@ class _HomePageState extends AppState { final HomeModel _model = getIt(); final ScrollController _controllerListView = ScrollController(); - @override - void initState() { - super.initState(); - - } - @override void onDidChangeMetrics() { setState(() { diff --git a/example/lib/widgets/base/app_state.dart b/example/lib/widgets/base/app_state.dart index 9d43aa5..8677bd2 100644 --- a/example/lib/widgets/base/app_state.dart +++ b/example/lib/widgets/base/app_state.dart @@ -9,25 +9,24 @@ abstract class AppState extends State AppLocalizations l10n, ); + bool _isDispose = false; void onPostFrameCallback() {} void onDidChangeMetrics() {} void _delayedChangeMetrics() { - onDidChangeMetrics(); - Future.delayed(const Duration(milliseconds: 100), () { - onDidChangeMetrics(); - }); - Future.delayed(const Duration(milliseconds: 200), () { - onDidChangeMetrics(); - }); - Future.delayed(const Duration(milliseconds: 500), () { - onDidChangeMetrics(); - }); + for (int i = 0; i <= 5; i++) { + Future.delayed(Duration(milliseconds: 100 * i), () { + if (!_isDispose) { + onDidChangeMetrics(); + } + }); + } } @override void initState() { super.initState(); + _isDispose = false; WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addPostFrameCallback((_) { _delayedChangeMetrics(); @@ -41,6 +40,7 @@ abstract class AppState extends State @override void dispose() { + _isDispose = true; WidgetsBinding.instance.removeObserver(this); super.dispose(); } diff --git a/example/pubspec.lock b/example/pubspec.lock index 4750e56..14cedbb 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -616,6 +616,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "5.1.0" + photo_view: + dependency: "direct main" + description: + name: photo_view + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0" platform: dependency: transitive description: diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 074efcd..dde32a2 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: ## https://pub.dev/packages/scoped_model scoped_model: ^2.0.0 ## https://pub.dev/packages/get_it - get_it: ^7.2.0 + get_it: ^7.6.0 ## https://pub.dev/packages/intl intl: ^0.17.0 ## https://pub.dev/packages/universal_io @@ -31,6 +31,8 @@ dependencies: cached_network_image: ^3.2.3 ## https://pub.dev/packages/flutter_cache_manager flutter_cache_manager: ^3.3.0 + ## https://pub.dev/packages/photo_view + photo_view: ^0.14.0 ## https://os-git.omprussia.ru/non-oss/flutter/flutter-plugins/-/tree/master/packages/xdga_directories xdga_directories: diff --git a/example/run.sh b/example/run.sh index 6addfd2..4a42aab 100755 --- a/example/run.sh +++ b/example/run.sh @@ -14,7 +14,7 @@ ## -s /home/user/sign/folder ## Flutter path -FLUTTER="$HOME/.local/opt/flutter-sdk/bin/flutter" +FLUTTER="$HOME/.local/opt/flutter/bin/flutter" ## https://developer.auroraos.ru/doc/software_development/psdk/setup ## Install Platform SDK path diff --git a/script/build_example.sh b/script/build_example.sh deleted file mode 100755 index bac91f4..0000000 --- a/script/build_example.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2023. Open Mobile Platform LLC. -# License: Proprietary. - -## Build example, sign rpm, upload/install/run rpm to device - -## Usage -## -## chmod +x ./build_example.sh -## -## ./build_example.sh \ -## -p xdga_directories \ -## -d : \ -## -s /home/user/sign/system_keys - -## Flutter path -FLUTTER="$HOME/.local/opt/flutter-sdk/bin/flutter" - -## https://developer.auroraos.ru/doc/software_development/psdk/setup -## Install Platform SDK path -## You may not have set the PSDK_DIR environment variable. -## export PSDK_DIR=$HOME/AuroraPlatformSDK/sdks/aurora_psdk - -while getopts p:d:s: flag; do - case "${flag}" in - p) package=${OPTARG} ;; - d) device=${OPTARG} ;; - s) sign=${OPTARG} ;; - *) - echo "usage: $0 [-p] [-d] [-s]" >&2 - exit 1 - ;; - esac -done - -if [ -z "$package" ]; then - echo "Specify a build package" - exit -else - cd "../packages/$package" 2>/dev/null || eval 'echo "Package \"$package\" not found." && exit' - ## Update dependency - $FLUTTER pub get - ## Run ffigen if has - $FLUTTER pub run ffigen --config ffigen.yaml 2>/dev/null - ## Open example dir - cd "example" || exit - ## Build aurora example app - { - $FLUTTER build aurora --release - } || { - exit 1; - } -fi - -if [ -n "$sign" ]; then - - key=$(ls "$sign"/*key.pem) - - if [ -z "$key" ]; then - echo "Key *key.pem not found." - exit - fi - - cert=$(ls "$sign"/*cert.pem) - - if [ -z "$cert" ]; then - echo "Key *cert.pem not found." - exit - fi - - ## Sign rpm system key - "$PSDK_DIR"/sdk-chroot rpmsign-external sign \ - --key "$key" \ - --cert "$cert" \ - build/aurora/arm/release/RPMS/*.rpm -fi - -if [ -n "$device" ]; then - - IFS=':' read -ra ADDR <<< "$device" - IFS='/' read -ra ADDP <<< "$package" - - D_IP="${ADDR[0]}" - D_PASS="${ADDR[1]}" - APP_KEY="${ADDP[-1]}" - - # shellcheck disable=SC2012 - rpm=$(ls "$PWD"/build/aurora/arm/release/RPMS/*.rpm | sort -r | head -n 1) - - # upload rpm - scp "$rpm" defaultuser@"$D_IP:/home/defaultuser/Downloads" - - # install rpm - ssh -t defaultuser@$D_IP "echo $D_PASS | devel-su pkcon -y install-local /home/defaultuser/Downloads/*$APP_KEY*.rpm" - - # run application - ssh -t defaultuser@$D_IP "/usr/bin/com.example.${APP_KEY}_example" -fi diff --git a/script/vscode_properties.sh b/script/vscode_properties.sh deleted file mode 100755 index e80ab79..0000000 --- a/script/vscode_properties.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2023. Open Mobile Platform LLC. -# License: Proprietary. - -## Script create c_cpp_properties.json with dependencies for flutter aurora - -## Usage -## -## chmod +x ./vscode_properties.sh -## ./vscode_properties.sh - -## https://developer.auroraos.ru/doc/software_development/psdk/setup -## Install Platform SDK path -## You may not have set the PSDK_DIR environment variable. -## export PSDK_DIR=$HOME/AuroraPlatformSDK/sdks/aurora_psdk - -cd ../ - -## check file -[ -f .vscode/c_cpp_properties.json ] && { echo "File c_cpp_properties.json already exist!"; exit; } - -## find target -TARGET=$($PSDK_DIR/sdk-chroot sdk-assistant list | grep armv | grep default | sed 's/^.*A/A/g' | sed 's/\s.*//g') - -## mkdir .vscode if not exist -[ -d .vscode ] || mkdir .vscode - -## find targets path -TARGETS_PATH=$(cd "$PSDK_DIR/../../" && pwd)/targets - -## save file -tee -a .vscode/c_cpp_properties.json << END -{ - "configurations": [ - { - "name": "Linux", - "includePath": [ - "\${workspaceFolder}/**", - "$TARGETS_PATH/$TARGET/usr/include", - "$TARGETS_PATH/$TARGET/usr/include/dconf", - "$TARGETS_PATH/$TARGET/usr/include/flutter-embedder", - "$TARGETS_PATH/$TARGET/usr/include/maliit", - "$TARGETS_PATH/$TARGET/usr/include/appmanifest-cpp", - "$TARGETS_PATH/$TARGET/usr/include/glib-2.0", - "$TARGETS_PATH/$TARGET/usr/lib/glib-2.0/include", - "$TARGETS_PATH/$TARGET/usr/include/sailfishapp", - "$TARGETS_PATH/$TARGET/usr/include/qt5", - "$TARGETS_PATH/$TARGET/usr/include/qt5/QtConcurrent", - "$TARGETS_PATH/$TARGET/usr/include/qt5/QtCore", - "$TARGETS_PATH/$TARGET/usr/include/qt5/QtDBus", - "$TARGETS_PATH/$TARGET/usr/include/qt5/QtGui", - "$TARGETS_PATH/$TARGET/usr/include/qt5/QtMultimedia", - "$TARGETS_PATH/$TARGET/usr/include/qt5/QtQuick" - ], - "defines": [ - "__ARM_PCS_VFP" - ], - "compilerPath": "/usr/bin/g++", - "cStandard": "c17", - "cppStandard": "c++17", - "intelliSenseMode": "clang-x64" - } - ], - "version": 4 -} -END