From e31900358c9481043ffda8b402129afdf0aa260a Mon Sep 17 00:00:00 2001 From: Khoren Markosyan Date: Thu, 16 Feb 2023 11:56:54 +0400 Subject: [PATCH] minor improvements --- android/build.gradle | 4 +- android/gradlew | 234 ++++++++++++++++++ android/gradlew.bat | 89 +++++++ example/lib/main.dart | 8 +- example/macos/Podfile.lock | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 3 +- example/pubspec.lock | 2 +- example/pubspec.yaml | 2 +- lib/flutter_zxing.dart | 1 + lib/src/ui/reader_widget.dart | 105 ++++---- src/CMakeLists.txt | 9 +- src/native_zxing.cpp | 5 +- zxscanner/pubspec.lock | 71 +++--- 13 files changed, 438 insertions(+), 97 deletions(-) create mode 100755 android/gradlew create mode 100644 android/gradlew.bat diff --git a/android/build.gradle b/android/build.gradle index 3c2331d..bc3b3f9 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.2.1' + classpath 'com.android.tools.build:gradle:7.4.1' } } @@ -24,8 +24,6 @@ apply plugin: 'com.android.library' android { compileSdkVersion 31 - ndkVersion "21.1.6352462" - externalNativeBuild { cmake { path "../src/CMakeLists.txt" diff --git a/android/gradlew b/android/gradlew new file mode 100755 index 0000000..1b6c787 --- /dev/null +++ b/android/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/example/lib/main.dart b/example/lib/main.dart index a95bb63..75b454d 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -7,7 +7,7 @@ import 'widgets/scan_result_widget.dart'; import 'widgets/unsupported_platform_widget.dart'; void main() { - zx.setLogEnabled(false); + zx.setLogEnabled(kDebugMode); runApp(const MyApp()); } @@ -86,10 +86,8 @@ class _DemoPageState extends State { onMultiScanFailure: _onMultiScanFailure, onMultiScanModeChanged: _onMultiScanModeChanged, isMultiScan: isMultiScan, - scanDelay: isMultiScan - ? Duration.zero - : const Duration(milliseconds: 500), - tryInverted: true, + scanDelay: Duration(milliseconds: isMultiScan ? 50 : 500), + resolution: ResolutionPreset.high, ), if (showDebugInfo) DebugInfoWidget( diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock index 97e31a0..1e94004 100644 --- a/example/macos/Podfile.lock +++ b/example/macos/Podfile.lock @@ -15,7 +15,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: flutter_zxing: ea030278aa2a051cd81a5b0053be9d0569d11c9a - FlutterMacOS: ae6af50a8ea7d6103d888583d46bd8328a7e9811 + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 PODFILE CHECKSUM: 0d3963a09fc94f580682bd88480486da345dc3f0 diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index 1ed0a25..dd7c7b0 100644 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -277,6 +277,7 @@ }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); diff --git a/example/pubspec.lock b/example/pubspec.lock index b491d3e..001075b 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -397,5 +397,5 @@ packages: source: hosted version: "6.2.2" sdks: - dart: ">=2.18.0 <3.0.0" + dart: ">=2.19.0 <3.0.0" flutter: ">=3.3.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index df2247d..c23ada8 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 publish_to: "none" # Remove this line if you wish to publish to pub.dev environment: - sdk: ">=2.17.0 <3.0.0" + sdk: ">=2.19.0 <3.0.0" dependencies: flutter: diff --git a/lib/flutter_zxing.dart b/lib/flutter_zxing.dart index 3abc9e2..9bcc719 100644 --- a/lib/flutter_zxing.dart +++ b/lib/flutter_zxing.dart @@ -7,6 +7,7 @@ import 'zxing_cross.dart' if (dart.library.io) 'zxing_mobile.dart' if (dart.library.html) 'zxing_web.dart'; +export 'package:camera/camera.dart' show ResolutionPreset; export 'src/models/models.dart'; export 'src/ui/ui.dart'; diff --git a/lib/src/ui/reader_widget.dart b/lib/src/ui/reader_widget.dart index 5a32a05..93170c5 100644 --- a/lib/src/ui/reader_widget.dart +++ b/lib/src/ui/reader_widget.dart @@ -229,19 +229,30 @@ class _ReaderWidgetState extends State cameraController.addListener(rebuildOnMount); try { await cameraController.initialize(); + cameraController.startImageStream(processImageStream); + } on CameraException catch (e) { + debugPrint('${e.code}: ${e.description}'); + } catch (e) { + debugPrint('Error: $e'); + } + + try { await cameraController.setFlashMode(FlashMode.off); + } catch (e) { + debugPrint('Error: $e'); + } + + try { cameraController .getMaxZoomLevel() .then((double value) => _maxZoomLevel = value); cameraController .getMinZoomLevel() .then((double value) => _minZoomLevel = value); - cameraController.startImageStream(processImageStream); - } on CameraException catch (e) { - debugPrint('${e.code}: ${e.description}'); } catch (e) { debugPrint('Error: $e'); } + rebuildOnMount(); widget.onControllerCreated?.call(controller); } @@ -366,55 +377,59 @@ class _ReaderWidgetState extends State controller?.setZoomLevel(_scaleFactor); }, ), - Align( - alignment: widget.actionButtonsAlignment, - child: Padding( - padding: widget.actionButtonsPadding, - child: ClipRRect( - borderRadius: BorderRadius.circular(10), - child: Container( - color: Colors.black.withOpacity(0.5), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - if (widget.showFlashlight && isCameraReady) - IconButton( - onPressed: _onFlashButtonTapped, - color: Colors.white, - icon: Icon( - _flashIcon( - controller?.value.flashMode ?? FlashMode.off), + SafeArea( + child: Align( + alignment: widget.actionButtonsAlignment, + child: Padding( + padding: widget.actionButtonsPadding, + child: ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Container( + color: Colors.black.withOpacity(0.5), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (widget.showFlashlight && isCameraReady) + IconButton( + onPressed: _onFlashButtonTapped, + color: Colors.white, + icon: Icon( + _flashIcon( + controller?.value.flashMode ?? FlashMode.off), + ), ), - ), - if (widget.showGallery && isCameraReady) - IconButton( - onPressed: _onGalleryButtonTapped, - color: Colors.white, - icon: const Icon(Icons.photo_library), - ), - if (widget.showToggleCamera && isCameraReady) - IconButton( - onPressed: _onCameraButtonTapped, - color: Colors.white, - icon: const Icon(Icons.switch_camera), - ), - ], + if (widget.showGallery && isCameraReady) + IconButton( + onPressed: _onGalleryButtonTapped, + color: Colors.white, + icon: const Icon(Icons.photo_library), + ), + if (widget.showToggleCamera && isCameraReady) + IconButton( + onPressed: _onCameraButtonTapped, + color: Colors.white, + icon: const Icon(Icons.switch_camera), + ), + ], + ), ), ), ), ), ), if (widget.onMultiScanModeChanged != null) - ScanModeDropdown( - isMultiScan: isMultiScan, - alignment: widget.multiScanModeAlignment, - padding: widget.multiScanModePadding, - onChanged: (bool value) { - setState(() { - isMultiScan = value; - }); - widget.onMultiScanModeChanged?.call(value); - }, + SafeArea( + child: ScanModeDropdown( + isMultiScan: isMultiScan, + alignment: widget.multiScanModeAlignment, + padding: widget.multiScanModePadding, + onChanged: (bool value) { + setState(() { + isMultiScan = value; + }); + widget.onMultiScanModeChanged?.call(value); + }, + ), ), ], ); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9b6b60d..8ef955a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,5 +13,10 @@ set (BUILD_WRITERS ON) add_subdirectory(zxing/core) -find_library(log-lib log) -target_link_libraries(flutter_zxing ZXing ${log-lib}) \ No newline at end of file +target_link_libraries(flutter_zxing ZXing) + +# use log-lib only for android platform +if (ANDROID) + find_library(log-lib log) + target_link_libraries(flutter_zxing ${log-lib}) +endif (ANDROID) \ No newline at end of file diff --git a/src/native_zxing.cpp b/src/native_zxing.cpp index 0b3b105..9355dbe 100644 --- a/src/native_zxing.cpp +++ b/src/native_zxing.cpp @@ -3,7 +3,7 @@ #include "MultiFormatWriter.h" #include "BitMatrix.h" #include "native_zxing.h" -#include "ZXVersion.h" +// #include "ZXVersion.h" // This file is not existing for iOS #include #include @@ -23,7 +23,8 @@ extern "C" FUNCTION_ATTRIBUTE char const *version() { - return ZXING_VERSION_STR; + // return ZXING_VERSION_STR; // TODO: Not working on iOS for now + return "2.0.0"; } FUNCTION_ATTRIBUTE diff --git a/zxscanner/pubspec.lock b/zxscanner/pubspec.lock index 4269f23..49f55eb 100644 --- a/zxscanner/pubspec.lock +++ b/zxscanner/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201" + sha256: "569ddca58d535e601dd1584afa117710abc999d036c0cd2c51777fb257df78e8" url: "https://pub.dev" source: hosted - version: "52.0.0" + version: "53.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4 + sha256: "10927c4b7c7c88b1adbca278c3d5531db92e2f4b4abf04e2919a800af965f3f5" url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "5.5.0" archive: dependency: transitive description: @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: args - sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" async: dependency: transitive description: @@ -125,10 +125,10 @@ packages: dependency: transitive description: name: camera_android - sha256: "4cef01e8e78fe27c809a429bf74352ab94ab76b0c980e3ec708f1414614e3d9f" + sha256: e491c836147f60dd8a54cf3895fd2960e13b21b78a9d15b563a1b6c70894f142 url: "https://pub.dev" source: hosted - version: "0.10.3" + version: "0.10.4" camera_avfoundation: dependency: transitive description: @@ -141,10 +141,10 @@ packages: dependency: transitive description: name: camera_platform_interface - sha256: "0eedd642d905ca24f1c483fe9ea0d0e7287b86a402845c28d24df28cc7b0ee6e" + sha256: b632be28e61d00a233f67d98ea90fd7041956f27a1c65500188ee459be60e15f url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.4.0" camera_web: dependency: transitive description: @@ -319,10 +319,10 @@ packages: dependency: "direct main" description: name: flutter_markdown - sha256: "818cf6c28377ba2c91ed283c96fd712e9c175dd2d2488eb7fc93b6afb9ad2e08" + sha256: "7b25c10de1fea883f3c4f9b8389506b54053cd00807beab69fd65c8653a2711f" url: "https://pub.dev" source: hosted - version: "0.6.13+1" + version: "0.6.14" flutter_mobx: dependency: "direct main" description: @@ -360,19 +360,18 @@ packages: flutter_zxing: dependency: "direct main" description: - name: flutter_zxing - sha256: fe7fb8d53ade636758fde71a90f85197346e2fd61e268c2bad287f1fa33abf63 - url: "https://pub.dev" - source: hosted + path: ".." + relative: true + source: path version: "1.0.0" font_awesome_flutter: dependency: "direct main" description: name: font_awesome_flutter - sha256: "875dbb9ec1ad30d68102019ceb682760d06c72747c1c5b7885781b95f88569cc" + sha256: "959ef4add147753f990b4a7c6cccb746d5792dbdc81b1cde99e62e7edb31b206" url: "https://pub.dev" source: hosted - version: "10.3.0" + version: "10.4.0" frontend_server_client: dependency: transitive description: @@ -481,10 +480,10 @@ packages: dependency: transitive description: name: image_picker_android - sha256: b1cbfec0f5aef427a18eb573f5445af8c9c568626bf3388553e40c263d3f7368 + sha256: "385f12ee9c7288575572c7873a332016ec45ebd092e1c2f6bd421b4a9ad21f1d" url: "https://pub.dev" source: hosted - version: "0.8.5+5" + version: "0.8.5+6" image_picker_for_web: dependency: transitive description: @@ -497,10 +496,10 @@ packages: dependency: transitive description: name: image_picker_ios - sha256: "39c013200046d14c58b71dc4fa3d00e425fc9c699d589136cd3ca018727c0493" + sha256: "8ffb14b43713d7c43fb21299cc18181cc5b39bd3ea1cc427a085c6400fe5aa52" url: "https://pub.dev" source: hosted - version: "0.8.6+6" + version: "0.8.6+7" image_picker_platform_interface: dependency: transitive description: @@ -561,10 +560,10 @@ packages: dependency: transitive description: name: markdown - sha256: c2b81e184067b41d0264d514f7cdaa2c02d38511e39d6521a1ccc238f6d7b3f2 + sha256: "4ed544d2ce84975b2ab5cbd4268f2d31f47858553ae2295c92fdf5d6e431a927" url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "7.0.0" matcher: dependency: transitive description: @@ -601,10 +600,10 @@ packages: dependency: "direct main" description: name: mobx - sha256: "41f814e90db4d5fe1303efc570db837a56507832c08c4f0842320fa3d40c14cd" + sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.3+1" mobx_codegen: dependency: "direct dev" description: @@ -657,10 +656,10 @@ packages: dependency: transitive description: name: path_provider_linux - sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + sha256: "2e32f1640f07caef0d3cb993680f181c79e54a3827b997d5ee221490d131fbd9" url: "https://pub.dev" source: hosted - version: "2.1.7" + version: "2.1.8" path_provider_platform_interface: dependency: transitive description: @@ -753,10 +752,10 @@ packages: dependency: "direct main" description: name: share_plus - sha256: e387077716f80609bb979cd199331033326033ecd1c8f200a90c5f57b1c9f55e + sha256: "8c6892037b1824e2d7e8f59d54b3105932899008642e6372e5079c6939b4b625" url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.3.1" share_plus_platform_interface: dependency: transitive description: @@ -942,10 +941,10 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "698fa0b4392effdc73e9e184403b627362eb5fbf904483ac9defbb1c2191d809" + sha256: e8f2efc804810c0f2f5b485f49e7942179f56eabcfe81dce3387fec4bb55876b url: "https://pub.dev" source: hosted - version: "6.1.8" + version: "6.1.9" url_launcher_android: dependency: transitive description: @@ -958,10 +957,10 @@ packages: dependency: transitive description: name: url_launcher_ios - sha256: bb328b24d3bccc20bdf1024a0990ac4f869d57663660de9c936fb8c043edefe3 + sha256: "0a5af0aefdd8cf820dd739886efb1637f1f24489900204f50984634c07a54815" url: "https://pub.dev" source: hosted - version: "6.0.18" + version: "6.1.0" url_launcher_linux: dependency: transitive description: @@ -1046,10 +1045,10 @@ packages: dependency: transitive description: name: xdg_directories - sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 url: "https://pub.dev" source: hosted - version: "0.2.0+3" + version: "1.0.0" xml: dependency: transitive description: