From ed57b091268a27c73a49352d9e0346dd1177fdef Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Sun, 30 Apr 2023 15:18:35 +0300 Subject: [PATCH 01/19] Bump version to 4.1.0 --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 04b46d3..9864c72 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: qr_flutter description: > QR.Flutter is a Flutter library for simple and fast QR code rendering via a Widget or custom painter. -version: 4.0.1 +version: 4.1.0 homepage: https://github.com/theyakka/qr.flutter environment: From 8b514b2a143b9380683ead32f2345949d52fb7d5 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Sun, 30 Apr 2023 15:19:13 +0300 Subject: [PATCH 02/19] Bump constraints --- example/pubspec.yaml | 4 ++-- pubspec.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 6b4fde2..ea9dbc7 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -7,8 +7,8 @@ homepage: https://github.com/lukef/qr.flutter publish_to: none environment: - sdk: ">=2.12.0 <3.0.0" - flutter: ">=1.7.0" + sdk: '>=2.19.6 <3.0.0' + flutter: ">=3.7.0" dependencies: flutter: diff --git a/pubspec.yaml b/pubspec.yaml index 9864c72..6a2db91 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,8 +6,8 @@ version: 4.1.0 homepage: https://github.com/theyakka/qr.flutter environment: - sdk: ">=2.12.0 <3.0.0" - flutter: ">=1.16.0" + sdk: '>=2.19.6 <3.0.0' + flutter: ">=3.7.0" dependencies: flutter: From 6c32b464a3df78de4d9ba894f79805615f30c290 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Sun, 30 Apr 2023 15:32:46 +0300 Subject: [PATCH 03/19] [Android]: Update example for latest Flutter --- example/android/app/build.gradle | 15 ++++++++++++--- .../android/app/src/debug/AndroidManifest.xml | 3 ++- .../android/app/src/main/AndroidManifest.xml | 12 ++++++++---- .../app/src/profile/AndroidManifest.xml | 3 ++- example/android/build.gradle | 13 ++++++++----- .../gradle/wrapper/gradle-wrapper.properties | 3 +-- example/android/settings.gradle | 18 +++++++----------- 7 files changed, 40 insertions(+), 27 deletions(-) diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index caadd4f..eb3501b 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -26,7 +26,16 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 30 + compileSdkVersion flutter.compileSdkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -39,7 +48,7 @@ android { defaultConfig { applicationId "app.yakka.example" minSdkVersion 16 - targetSdkVersion 30 + targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -59,7 +68,7 @@ flutter { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion" testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml index 654eca8..6b107e9 100644 --- a/example/android/app/src/debug/AndroidManifest.xml +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,7 @@ - diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index f58ebf1..4e0e524 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -8,15 +8,14 @@ FlutterApplication and put your custom class here. --> - + + diff --git a/example/android/app/src/profile/AndroidManifest.xml b/example/android/app/src/profile/AndroidManifest.xml index 654eca8..6b107e9 100644 --- a/example/android/app/src/profile/AndroidManifest.xml +++ b/example/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,7 @@ - diff --git a/example/android/build.gradle b/example/android/build.gradle index 42148c2..f6865e6 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,20 +1,23 @@ buildscript { - ext.kotlin_version = '1.3.72' + ext { + buildGradleVersion = '7.2.2' + kotlinVersion = '1.7.21' + } repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "com.android.tools.build:gradle:$buildGradleVersion" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } allprojects { repositories { google() - jcenter() + mavenCentral() } } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index 734b469..3c472b9 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Sun Mar 14 10:07:12 PDT 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 5a2f14f..44e62bc 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -1,15 +1,11 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" From 695f7c2365b3cac3c16245720fb85e22b7c79473 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Sun, 30 Apr 2023 15:36:34 +0300 Subject: [PATCH 04/19] [Android]: Remove deprecated Splash Screen implementation --- example/android/app/src/main/AndroidManifest.xml | 3 --- example/android/app/src/main/res/values/styles.xml | 1 - 2 files changed, 4 deletions(-) diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 4e0e524..bae8b78 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -18,9 +18,6 @@ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> - @drawable/launch_background - From ce45ced3c49d21326605a5527eaf1973f38face0 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Sun, 30 Apr 2023 15:50:41 +0300 Subject: [PATCH 05/19] [iOS]: Update example for latest Flutter --- example/ios/Flutter/AppFrameworkInfo.plist | 2 +- example/ios/Runner.xcodeproj/project.pbxproj | 29 +++++-------------- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- example/ios/Runner/Info.plist | 4 +++ 5 files changed, 15 insertions(+), 24 deletions(-) diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f7..4f8d4d2 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 11.0 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index d96dd44..6802989 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,17 +3,13 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -27,8 +23,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -39,13 +33,11 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -58,8 +50,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -69,9 +59,7 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -148,7 +136,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; + LastUpgradeCheck = 1300; ORGANIZATIONNAME = "The Chromium Authors"; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -193,6 +181,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -203,10 +192,11 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -255,7 +245,6 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -295,7 +284,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -331,7 +320,6 @@ }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -377,7 +365,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -387,7 +375,6 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -427,7 +414,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a1..919434a 100644 --- a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140c..3db53b6 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ UIViewControllerBasedStatusBarAppearance + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + From 7e9308c05fece302ba8c88480dfa6afe63faec4f Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Sun, 30 Apr 2023 15:51:36 +0300 Subject: [PATCH 06/19] Remove deprecated author field in pubspec --- example/pubspec.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/example/pubspec.yaml b/example/pubspec.yaml index ea9dbc7..d9a8223 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -2,7 +2,6 @@ name: example description: > The QR.Flutter example app. version: 2.0.0 -author: Yakka, LLC homepage: https://github.com/lukef/qr.flutter publish_to: none From e897c2a977b749b6717add8f8a26e8c5805fd953 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Sun, 30 Apr 2023 16:06:40 +0300 Subject: [PATCH 07/19] Update QR dependency --- pubspec.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 6a2db91..7642172 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,12 +12,11 @@ environment: dependencies: flutter: sdk: flutter - qr: ^3.0.0 + qr: ^3.0.1 dev_dependencies: flutter_test: sdk: flutter - test: ^1.16.5 flutter: uses-material-design: false From fbffb36f2dec798247f292d500feda60ef5b06fe Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Mon, 1 May 2023 17:22:08 +0300 Subject: [PATCH 08/19] Fix analyzer warnings --- example/lib/main.dart | 14 +- example/lib/main_screen.dart | 53 +++--- example/test/widget_test.dart | 2 +- lib/src/errors.dart | 2 +- lib/src/paint_cache.dart | 17 +- lib/src/qr_image_view.dart | 147 +++++++++-------- lib/src/qr_painter.dart | 275 +++++++++++++++++++------------ lib/src/validator.dart | 10 +- test/image_test.dart | 293 ++++++++++++++++++---------------- test/painter_test.dart | 10 +- 10 files changed, 467 insertions(+), 356 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index df0c819..f0305a2 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -16,12 +16,14 @@ class ExampleApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { - SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( - statusBarColor: Colors.white, - statusBarIconBrightness: Brightness.dark, - systemNavigationBarColor: Colors.white, - systemNavigationBarIconBrightness: Brightness.dark, - )); + SystemChrome.setSystemUIOverlayStyle( + const SystemUiOverlayStyle( + statusBarColor: Colors.white, + statusBarIconBrightness: Brightness.dark, + systemNavigationBarColor: Colors.white, + systemNavigationBarIconBrightness: Brightness.dark, + ), + ); return MaterialApp( title: 'QR.Flutter', theme: ThemeData.light(), diff --git a/example/lib/main_screen.dart b/example/lib/main_screen.dart index e36a32a..c22a1d2 100644 --- a/example/lib/main_screen.dart +++ b/example/lib/main_screen.dart @@ -14,25 +14,25 @@ import 'package:qr_flutter/qr_flutter.dart'; /// This is the screen that you'll see when the app starts class MainScreen extends StatefulWidget { @override - _MainScreenState createState() => _MainScreenState(); + State createState() => _MainScreenState(); } class _MainScreenState extends State { @override Widget build(BuildContext context) { - final message = + const String message = // ignore: lines_longer_than_80_chars 'Hey this is a QR code. Change this value in the main_screen.dart file.'; - final qrFutureBuilder = FutureBuilder( + final FutureBuilder qrFutureBuilder = FutureBuilder( future: _loadOverlayImage(), - builder: (ctx, snapshot) { - final size = 280.0; + builder: (BuildContext ctx, AsyncSnapshot snapshot) { + const double size = 280.0; if (!snapshot.hasData) { - return Container(width: size, height: size); + return const SizedBox(width: size, height: size); } return CustomPaint( - size: Size.square(size), + size: const Size.square(size), painter: QrPainter( data: message, version: QrVersions.auto, @@ -47,7 +47,7 @@ class _MainScreenState extends State { // size: 320.0, embeddedImage: snapshot.data, embeddedImageStyle: QrEmbeddedImageStyle( - size: Size.square(60), + size: const Size.square(60), ), ), ); @@ -57,34 +57,31 @@ class _MainScreenState extends State { return Material( color: Colors.white, child: SafeArea( - top: true, - bottom: true, - child: Container( - child: Column( - children: [ - Expanded( - child: Center( - child: Container( - width: 280, - child: qrFutureBuilder, - ), + child: Column( + children: [ + Expanded( + child: Center( + child: SizedBox( + width: 280, + child: qrFutureBuilder, ), ), - Padding( - padding: EdgeInsets.symmetric(vertical: 20, horizontal: 40) - .copyWith(bottom: 40), - child: Text(message), - ), - ], - ), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 40) + .copyWith(bottom: 40), + child: const Text(message), + ), + ], ), ), ); } Future _loadOverlayImage() async { - final completer = Completer(); - final byteData = await rootBundle.load('assets/images/4.0x/logo_yakka.png'); + final Completer completer = Completer(); + final ByteData byteData = + await rootBundle.load('assets/images/4.0x/logo_yakka.png'); ui.decodeImageFromList(byteData.buffer.asUint8List(), completer.complete); return completer.future; } diff --git a/example/test/widget_test.dart b/example/test/widget_test.dart index 2a9f3b2..5d919ed 100644 --- a/example/test/widget_test.dart +++ b/example/test/widget_test.dart @@ -10,7 +10,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { - testWidgets('Counter increments smoke test', (tester) async { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. await tester.pumpWidget(ExampleApp()); diff --git a/lib/src/errors.dart b/lib/src/errors.dart index 239b9ea..5068cb2 100644 --- a/lib/src/errors.dart +++ b/lib/src/errors.dart @@ -13,7 +13,7 @@ import 'qr_versions.dart'; class QrUnsupportedVersionException implements Exception { /// Create a new QrUnsupportedVersionException. factory QrUnsupportedVersionException(int providedVersion) { - final message = + final String message = 'Invalid version. $providedVersion is not >= ${QrVersions.min} ' 'and <= ${QrVersions.max}'; return QrUnsupportedVersionException._internal(providedVersion, message); diff --git a/lib/src/paint_cache.dart b/lib/src/paint_cache.dart index 6a23e4c..68f460a 100644 --- a/lib/src/paint_cache.dart +++ b/lib/src/paint_cache.dart @@ -14,13 +14,16 @@ class PaintCache { final Map _keyedPaints = {}; String _cacheKey(QrCodeElement element, {FinderPatternPosition? position}) { - final posKey = position != null ? position.toString() : 'any'; - return '${element.toString()}:$posKey'; + final String posKey = position != null ? position.toString() : 'any'; + return '$element:$posKey'; } /// Save a [Paint] for the provided element and position into the cache. - void cache(Paint paint, QrCodeElement element, - {FinderPatternPosition? position}) { + void cache( + Paint paint, + QrCodeElement element, { + FinderPatternPosition? position, + }) { if (element == QrCodeElement.codePixel) { _pixelPaints.add(paint); } else { @@ -42,8 +45,10 @@ class PaintCache { /// element and position. Note: Finder pattern elements can only have a max /// one [Paint] object per position. As such they will always return a [List] /// with a fixed size of `1`. - List paints(QrCodeElement element, - {FinderPatternPosition? position}) { + List paints( + QrCodeElement element, { + FinderPatternPosition? position, + }) { if (element == QrCodeElement.codePixel) { return _pixelPaints; } else { diff --git a/lib/src/qr_image_view.dart b/lib/src/qr_image_view.dart index afaa71b..edcad03 100644 --- a/lib/src/qr_image_view.dart +++ b/lib/src/qr_image_view.dart @@ -21,11 +21,10 @@ class QrImageView extends StatefulWidget { /// using the default options). QrImageView({ required String data, - Key? key, + super.key, this.size, this.padding = const EdgeInsets.all(10.0), this.backgroundColor = Colors.transparent, - this.foregroundColor, this.version = QrVersions.auto, this.errorCorrectionLevel = QrErrorCorrectLevel.L, this.errorStateBuilder, @@ -43,20 +42,20 @@ class QrImageView extends StatefulWidget { color: Colors.black, ), this.embeddedImageEmitsError = false, + @Deprecated('use colors in eyeStyle and dataModuleStyle instead') + this.foregroundColor, }) : assert(QrVersions.isSupportedVersion(version)), _data = data, - _qrCode = null, - super(key: key); + _qrCode = null; /// Create a new QR code using the [QrCode] data and the passed options (or /// using the default options). QrImageView.withQr({ required QrCode qr, - Key? key, + super.key, this.size, this.padding = const EdgeInsets.all(10.0), this.backgroundColor = Colors.transparent, - this.foregroundColor, this.version = QrVersions.auto, this.errorCorrectionLevel = QrErrorCorrectLevel.L, this.errorStateBuilder, @@ -74,23 +73,21 @@ class QrImageView extends StatefulWidget { color: Colors.black, ), this.embeddedImageEmitsError = false, + @Deprecated('use colors in eyeStyle and dataModuleStyle instead') + this.foregroundColor, }) : assert(QrVersions.isSupportedVersion(version)), _data = null, - _qrCode = qr, - super(key: key); + _qrCode = qr; // The data passed to the widget final String? _data; + // The QR code data passed to the widget final QrCode? _qrCode; /// The background color of the final QR code widget. final Color backgroundColor; - /// The foreground color of the final QR code widget. - @Deprecated('use colors in eyeStyle and dataModuleStyle instead') - final Color? foregroundColor; - /// The QR code version to use. final int version; @@ -145,8 +142,12 @@ class QrImageView extends StatefulWidget { /// Styling option for QR data module. final QrDataModuleStyle dataModuleStyle; + /// The foreground color of the final QR code widget. + @Deprecated('use colors in eyeStyle and dataModuleStyle instead') + final Color? foregroundColor; + @override - _QrImageViewState createState() => _QrImageViewState(); + State createState() => _QrImageViewState(); } class _QrImageViewState extends State { @@ -174,44 +175,47 @@ class _QrImageViewState extends State { _validationResult = QrValidationResult(status: QrValidationStatus.valid, qrCode: _qr); } - return LayoutBuilder(builder: (context, constraints) { - // validation failed, show an error state widget if builder is present. - if (!_validationResult.isValid) { - return _errorWidget(context, constraints, _validationResult.error); - } - // no error, build the regular widget - final widgetSize = widget.size ?? constraints.biggest.shortestSide; - if (widget.embeddedImage != null) { - // if requesting to embed an image then we need to load via a - // FutureBuilder because the image provider will be async. - return FutureBuilder( - future: _loadQrImage(context, widget.embeddedImageStyle), - builder: (ctx, snapshot) { - if (snapshot.error != null) { - print("snapshot error: ${snapshot.error}"); - if (widget.embeddedImageEmitsError) { - return _errorWidget(context, constraints, snapshot.error); - } else { - return _qrWidget(context, null, widgetSize); + return LayoutBuilder( + builder: (BuildContext context, BoxConstraints constraints) { + // validation failed, show an error state widget if builder is present. + if (!_validationResult.isValid) { + return _errorWidget(context, constraints, _validationResult.error); + } + // no error, build the regular widget + final double widgetSize = + widget.size ?? constraints.biggest.shortestSide; + if (widget.embeddedImage != null) { + // if requesting to embed an image then we need to load via a + // FutureBuilder because the image provider will be async. + return FutureBuilder( + future: _loadQrImage(context, widget.embeddedImageStyle), + builder: (BuildContext ctx, AsyncSnapshot snapshot) { + if (snapshot.error != null) { + print('snapshot error: ${snapshot.error}'); + if (widget.embeddedImageEmitsError) { + return _errorWidget(context, constraints, snapshot.error); + } else { + return _qrWidget(context, null, widgetSize); + } } - } - if (snapshot.hasData) { - print('loaded image'); - final loadedImage = snapshot.data; - return _qrWidget(context, loadedImage, widgetSize); - } else { - return Container(); - } - }, - ); - } else { - return _qrWidget(context, null, widgetSize); - } - }); + if (snapshot.hasData) { + print('loaded image'); + final ui.Image? loadedImage = snapshot.data; + return _qrWidget(context, loadedImage, widgetSize); + } else { + return Container(); + } + }, + ); + } else { + return _qrWidget(context, null, widgetSize); + } + }, + ); } Widget _qrWidget(BuildContext context, ui.Image? image, double edgeLength) { - final painter = QrPainter.withQr( + final QrPainter painter = QrPainter.withQr( qr: _qr!, color: widget.foregroundColor, gapless: widget.gapless, @@ -230,40 +234,51 @@ class _QrImageViewState extends State { } Widget _errorWidget( - BuildContext context, BoxConstraints constraints, Object? error) { - final errorWidget = widget.errorStateBuilder == null + BuildContext context, + BoxConstraints constraints, + Object? error, + ) { + final Widget errorWidget = widget.errorStateBuilder == null ? Container() : widget.errorStateBuilder!(context, error); - final errorSideLength = (widget.constrainErrorBounds + final double errorSideLength = widget.constrainErrorBounds ? widget.size ?? constraints.biggest.shortestSide - : constraints.biggest.longestSide); + : constraints.biggest.longestSide; return _QrContentView( edgeLength: errorSideLength, backgroundColor: widget.backgroundColor, padding: widget.padding, - child: errorWidget, semanticsLabel: widget.semanticsLabel, + child: errorWidget, ); } late ImageStreamListener streamListener; + Future _loadQrImage( - BuildContext buildContext, QrEmbeddedImageStyle? style) async { + BuildContext buildContext, + QrEmbeddedImageStyle? style, + ) { if (style != null) {} - final mq = MediaQuery.of(buildContext); - final completer = Completer(); - final stream = widget.embeddedImage!.resolve(ImageConfiguration( - devicePixelRatio: mq.devicePixelRatio, - )); + final MediaQueryData mq = MediaQuery.of(buildContext); + final Completer completer = Completer(); + final ImageStream stream = widget.embeddedImage!.resolve( + ImageConfiguration( + devicePixelRatio: mq.devicePixelRatio, + ), + ); - streamListener = ImageStreamListener((info, err) { - stream.removeListener(streamListener); - completer.complete(info.image); - }, onError: (dynamic err, _) { - stream.removeListener(streamListener); - completer.completeError(err); - }); + streamListener = ImageStreamListener( + (ImageInfo info, bool err) { + stream.removeListener(streamListener); + completer.complete(info.image); + }, + onError: (Object err, _) { + stream.removeListener(streamListener); + completer.completeError(err); + }, + ); stream.addListener(streamListener); return completer.future; } @@ -274,7 +289,7 @@ class _QrImageViewState extends State { typedef QrErrorBuilder = Widget Function(BuildContext context, Object? error); class _QrContentView extends StatelessWidget { - _QrContentView({ + const _QrContentView({ required this.edgeLength, required this.child, this.backgroundColor, diff --git a/lib/src/qr_painter.dart b/lib/src/qr_painter.dart index 5126d4d..337defc 100644 --- a/lib/src/qr_painter.dart +++ b/lib/src/qr_painter.dart @@ -5,7 +5,6 @@ */ import 'dart:async'; -import 'dart:typed_data'; import 'dart:ui' as ui; import 'package:flutter/services.dart'; @@ -20,7 +19,7 @@ import 'validator.dart'; // ignore_for_file: deprecated_member_use_from_same_package -const _finderPatternLimit = 7; +const int _finderPatternLimit = 7; // default color for the qr code pixels const Color? _qrDefaultColor = null; @@ -32,8 +31,6 @@ class QrPainter extends CustomPainter { required String data, required this.version, this.errorCorrectionLevel = QrErrorCorrectLevel.L, - this.color = _qrDefaultColor, - this.emptyColor, this.gapless = false, this.embeddedImage, this.embeddedImageStyle, @@ -45,6 +42,12 @@ class QrPainter extends CustomPainter { dataModuleShape: QrDataModuleShape.square, color: Color(0xFF000000), ), + @Deprecated('use colors in eyeStyle and dataModuleStyle instead') + this.color = _qrDefaultColor, + @Deprecated( + 'You should use the background color value of your container widget', + ) + this.emptyColor, }) : assert(QrVersions.isSupportedVersion(version)) { _init(data); } @@ -54,8 +57,6 @@ class QrPainter extends CustomPainter { /// flow or for when you need to pre-validate the QR data. QrPainter.withQr({ required QrCode qr, - this.color = _qrDefaultColor, - this.emptyColor, this.gapless = false, this.embeddedImage, this.embeddedImageStyle, @@ -67,6 +68,12 @@ class QrPainter extends CustomPainter { dataModuleShape: QrDataModuleShape.square, color: Color(0xFF000000), ), + @Deprecated('use colors in eyeStyle and dataModuleStyle instead') + this.color = _qrDefaultColor, + @Deprecated( + 'You should use the background color value of your container widget', + ) + this.emptyColor, }) : _qr = qr, version = qr.typeNumber, errorCorrectionLevel = qr.errorCorrectLevel { @@ -80,14 +87,6 @@ class QrPainter extends CustomPainter { /// The error correction level of the QR code. final int errorCorrectionLevel; // the qr code error correction level - /// The color of the squares. - @Deprecated('use colors in eyeStyle and dataModuleStyle instead') - final Color? color; // the color of the dark squares - - /// The color of the non-squares (background). - @Deprecated( - 'You should use the background color value of your container widget') - final Color? emptyColor; // the other color /// If set to false, the painter will leave a 1px gap between each of the /// squares. final bool gapless; @@ -119,14 +118,24 @@ class QrPainter extends CustomPainter { final double _gapSize = 0.25; /// Cache for all of the [Paint] objects. - final _paintCache = PaintCache(); + final PaintCache _paintCache = PaintCache(); + + /// The color of the squares. + @Deprecated('use colors in eyeStyle and dataModuleStyle instead') + final Color? color; // the color of the dark squares + + /// The color of the non-squares (background). + @Deprecated( + 'You should use the background color value of your container widget', + ) + final Color? emptyColor; // the other color void _init(String data) { if (!QrVersions.isSupportedVersion(version)) { throw QrUnsupportedVersionException(version); } // configure and make the QR code data - final validationResult = QrValidator.validate( + final QrValidationResult validationResult = QrValidator.validate( data: data, version: version, errorCorrectionLevel: errorCorrectionLevel, @@ -145,23 +154,33 @@ class QrPainter extends CustomPainter { // Cache the pixel paint object. For now there is only one but we might // expand it to multiple later (e.g.: different colours). _paintCache.cache( - Paint()..style = PaintingStyle.fill, QrCodeElement.codePixel); + Paint()..style = PaintingStyle.fill, + QrCodeElement.codePixel, + ); // Cache the empty pixel paint object. Empty color is deprecated and will go // away. _paintCache.cache( - Paint()..style = PaintingStyle.fill, QrCodeElement.codePixelEmpty); + Paint()..style = PaintingStyle.fill, + QrCodeElement.codePixelEmpty, + ); // Cache the finder pattern painters. We'll keep one for each one in case // we want to provide customization options later. - for (final position in FinderPatternPosition.values) { - _paintCache.cache(Paint()..style = PaintingStyle.stroke, - QrCodeElement.finderPatternOuter, - position: position); - _paintCache.cache(Paint()..style = PaintingStyle.stroke, - QrCodeElement.finderPatternInner, - position: position); + for (final FinderPatternPosition position in FinderPatternPosition.values) { _paintCache.cache( - Paint()..style = PaintingStyle.fill, QrCodeElement.finderPatternDot, - position: position); + Paint()..style = PaintingStyle.stroke, + QrCodeElement.finderPatternOuter, + position: position, + ); + _paintCache.cache( + Paint()..style = PaintingStyle.stroke, + QrCodeElement.finderPatternInner, + position: position, + ); + _paintCache.cache( + Paint()..style = PaintingStyle.fill, + QrCodeElement.finderPatternDot, + position: position, + ); } } @@ -170,22 +189,32 @@ class QrPainter extends CustomPainter { // if the widget has a zero size side then we cannot continue painting. if (size.shortestSide == 0) { print("[QR] WARN: width or height is zero. You should set a 'size' value " - "or nest this painter in a Widget that defines a non-zero size"); + 'or nest this painter in a Widget that defines a non-zero size'); return; } - final paintMetrics = _PaintMetrics( + final _PaintMetrics paintMetrics = _PaintMetrics( containerSize: size.shortestSide, moduleCount: _qr!.moduleCount, - gapSize: (gapless ? 0 : _gapSize), + gapSize: gapless ? 0 : _gapSize, ); // draw the finder pattern elements - _drawFinderPatternItem(FinderPatternPosition.topLeft, canvas, paintMetrics); _drawFinderPatternItem( - FinderPatternPosition.bottomLeft, canvas, paintMetrics); + FinderPatternPosition.topLeft, + canvas, + paintMetrics, + ); _drawFinderPatternItem( - FinderPatternPosition.topRight, canvas, paintMetrics); + FinderPatternPosition.bottomLeft, + canvas, + paintMetrics, + ); + _drawFinderPatternItem( + FinderPatternPosition.topRight, + canvas, + paintMetrics, + ); // DEBUG: draw the inner content boundary // final paint = Paint()..style = ui.PaintingStyle.stroke; @@ -198,9 +227,10 @@ class QrPainter extends CustomPainter { double left; double top; - final gap = !gapless ? _gapSize : 0; + final num gap = !gapless ? _gapSize : 0; // get the painters for the pixel information - final pixelPaint = _paintCache.firstPaint(QrCodeElement.codePixel); + final ui.Paint? pixelPaint = + _paintCache.firstPaint(QrCodeElement.codePixel); if (color != null) { pixelPaint!.color = color!; } else { @@ -211,24 +241,29 @@ class QrPainter extends CustomPainter { emptyPixelPaint = _paintCache.firstPaint(QrCodeElement.codePixelEmpty); emptyPixelPaint!.color = emptyColor!; } - for (var x = 0; x < _qr!.moduleCount; x++) { - for (var y = 0; y < _qr!.moduleCount; y++) { + for (int x = 0; x < _qr!.moduleCount; x++) { + for (int y = 0; y < _qr!.moduleCount; y++) { // draw the finder patterns independently - if (_isFinderPatternPosition(x, y)) continue; - final paint = _qrImage.isDark(y, x) ? pixelPaint : emptyPixelPaint; - if (paint == null) continue; + if (_isFinderPatternPosition(x, y)) { + continue; + } + final ui.Paint? paint = + _qrImage.isDark(y, x) ? pixelPaint : emptyPixelPaint; + if (paint == null) { + continue; + } // paint a pixel left = paintMetrics.inset + (x * (paintMetrics.pixelSize + gap)); top = paintMetrics.inset + (y * (paintMetrics.pixelSize + gap)); - var pixelHTweak = 0.0; - var pixelVTweak = 0.0; + double pixelHTweak = 0.0; + double pixelVTweak = 0.0; if (gapless && _hasAdjacentHorizontalPixel(x, y, _qr!.moduleCount)) { pixelHTweak = 0.5; } if (gapless && _hasAdjacentVerticalPixel(x, y, _qr!.moduleCount)) { pixelVTweak = 0.5; } - final squareRect = Rect.fromLTWH( + final ui.Rect squareRect = Rect.fromLTWH( left, top, paintMetrics.pixelSize + pixelHTweak, @@ -237,22 +272,25 @@ class QrPainter extends CustomPainter { if (dataModuleStyle.dataModuleShape == QrDataModuleShape.square) { canvas.drawRect(squareRect, paint); } else { - final roundedRect = RRect.fromRectAndRadius(squareRect, - Radius.circular(paintMetrics.pixelSize + pixelHTweak)); + final ui.RRect roundedRect = RRect.fromRectAndRadius( + squareRect, + Radius.circular(paintMetrics.pixelSize + pixelHTweak), + ); canvas.drawRRect(roundedRect, paint); } } } if (embeddedImage != null) { - final originalSize = Size( + final ui.Size originalSize = Size( embeddedImage!.width.toDouble(), embeddedImage!.height.toDouble(), ); - final requestedSize = + final ui.Size? requestedSize = embeddedImageStyle != null ? embeddedImageStyle!.size : null; - final imageSize = _scaledAspectSize(size, originalSize, requestedSize); - final position = Offset( + final ui.Size imageSize = + _scaledAspectSize(size, originalSize, requestedSize); + final ui.Offset position = Offset( (size.width - imageSize.width) / 2.0, (size.height - imageSize.height) / 2.0, ); @@ -262,21 +300,25 @@ class QrPainter extends CustomPainter { } bool _hasAdjacentVerticalPixel(int x, int y, int moduleCount) { - if (y + 1 >= moduleCount) return false; + if (y + 1 >= moduleCount) { + return false; + } return _qrImage.isDark(y + 1, x); } bool _hasAdjacentHorizontalPixel(int x, int y, int moduleCount) { - if (x + 1 >= moduleCount) return false; + if (x + 1 >= moduleCount) { + return false; + } return _qrImage.isDark(y, x + 1); } bool _isFinderPatternPosition(int x, int y) { - final isTopLeft = (y < _finderPatternLimit && x < _finderPatternLimit); - final isBottomLeft = (y < _finderPatternLimit && - (x >= _qr!.moduleCount - _finderPatternLimit)); - final isTopRight = (y >= _qr!.moduleCount - _finderPatternLimit && - (x < _finderPatternLimit)); + final bool isTopLeft = y < _finderPatternLimit && x < _finderPatternLimit; + final bool isBottomLeft = y < _finderPatternLimit && + (x >= _qr!.moduleCount - _finderPatternLimit); + final bool isTopRight = y >= _qr!.moduleCount - _finderPatternLimit && + (x < _finderPatternLimit); return isTopLeft || isBottomLeft || isTopRight; } @@ -285,11 +327,12 @@ class QrPainter extends CustomPainter { Canvas canvas, _PaintMetrics metrics, ) { - final totalGap = (_finderPatternLimit - 1) * metrics.gapSize; - final radius = ((_finderPatternLimit * metrics.pixelSize) + totalGap) - - metrics.pixelSize; - final strokeAdjust = (metrics.pixelSize / 2.0); - final edgePos = + final double totalGap = (_finderPatternLimit - 1) * metrics.gapSize; + final double radius = + ((_finderPatternLimit * metrics.pixelSize) + totalGap) - + metrics.pixelSize; + final double strokeAdjust = metrics.pixelSize / 2.0; + final double edgePos = (metrics.inset + metrics.innerContentSize) - (radius + strokeAdjust); Offset offset; @@ -303,8 +346,10 @@ class QrPainter extends CustomPainter { } // configure the paints - final outerPaint = _paintCache.firstPaint(QrCodeElement.finderPatternOuter, - position: position)!; + final ui.Paint outerPaint = _paintCache.firstPaint( + QrCodeElement.finderPatternOuter, + position: position, + )!; outerPaint.strokeWidth = metrics.pixelSize; if (color != null) { outerPaint.color = color!; @@ -312,44 +357,55 @@ class QrPainter extends CustomPainter { outerPaint.color = eyeStyle.color!; } - final innerPaint = _paintCache.firstPaint(QrCodeElement.finderPatternInner, - position: position)!; + final ui.Paint innerPaint = _paintCache + .firstPaint(QrCodeElement.finderPatternInner, position: position)!; innerPaint.strokeWidth = metrics.pixelSize; - innerPaint.color = emptyColor ?? Color(0x00ffffff); + innerPaint.color = emptyColor ?? const Color(0x00ffffff); - final dotPaint = _paintCache.firstPaint(QrCodeElement.finderPatternDot, - position: position); + final ui.Paint? dotPaint = _paintCache.firstPaint( + QrCodeElement.finderPatternDot, + position: position, + ); if (color != null) { dotPaint!.color = color!; } else { dotPaint!.color = eyeStyle.color!; } - final outerRect = Rect.fromLTWH(offset.dx, offset.dy, radius, radius); + final ui.Rect outerRect = + Rect.fromLTWH(offset.dx, offset.dy, radius, radius); - final innerRadius = radius - (2 * metrics.pixelSize); - final innerRect = Rect.fromLTWH(offset.dx + metrics.pixelSize, - offset.dy + metrics.pixelSize, innerRadius, innerRadius); + final double innerRadius = radius - (2 * metrics.pixelSize); + final ui.Rect innerRect = Rect.fromLTWH( + offset.dx + metrics.pixelSize, + offset.dy + metrics.pixelSize, + innerRadius, + innerRadius, + ); - final gap = metrics.pixelSize * 2; - final dotSize = radius - gap - (2 * strokeAdjust); - final dotRect = Rect.fromLTWH(offset.dx + metrics.pixelSize + strokeAdjust, - offset.dy + metrics.pixelSize + strokeAdjust, dotSize, dotSize); + final double gap = metrics.pixelSize * 2; + final double dotSize = radius - gap - (2 * strokeAdjust); + final ui.Rect dotRect = Rect.fromLTWH( + offset.dx + metrics.pixelSize + strokeAdjust, + offset.dy + metrics.pixelSize + strokeAdjust, + dotSize, + dotSize, + ); if (eyeStyle.eyeShape == QrEyeShape.square) { canvas.drawRect(outerRect, outerPaint); canvas.drawRect(innerRect, innerPaint); canvas.drawRect(dotRect, dotPaint); } else { - final roundedOuterStrokeRect = + final ui.RRect roundedOuterStrokeRect = RRect.fromRectAndRadius(outerRect, Radius.circular(radius)); canvas.drawRRect(roundedOuterStrokeRect, outerPaint); - final roundedInnerStrokeRect = + final ui.RRect roundedInnerStrokeRect = RRect.fromRectAndRadius(outerRect, Radius.circular(innerRadius)); canvas.drawRRect(roundedInnerStrokeRect, innerPaint); - final roundedDotStrokeRect = + final ui.RRect roundedDotStrokeRect = RRect.fromRectAndRadius(dotRect, Radius.circular(dotSize)); canvas.drawRRect(roundedDotStrokeRect, dotPaint); } @@ -358,23 +414,30 @@ class QrPainter extends CustomPainter { bool _hasOneNonZeroSide(Size size) => size.longestSide > 0; Size _scaledAspectSize( - Size widgetSize, Size originalSize, Size? requestedSize) { + Size widgetSize, + Size originalSize, + Size? requestedSize, + ) { if (requestedSize != null && !requestedSize.isEmpty) { return requestedSize; } else if (requestedSize != null && _hasOneNonZeroSide(requestedSize)) { - final maxSide = requestedSize.longestSide; - final ratio = maxSide / originalSize.longestSide; + final double maxSide = requestedSize.longestSide; + final double ratio = maxSide / originalSize.longestSide; return Size(ratio * originalSize.width, ratio * originalSize.height); } else { - final maxSide = 0.25 * widgetSize.shortestSide; - final ratio = maxSide / originalSize.longestSide; + final double maxSide = 0.25 * widgetSize.shortestSide; + final double ratio = maxSide / originalSize.longestSide; return Size(ratio * originalSize.width, ratio * originalSize.height); } } void _drawImageOverlay( - Canvas canvas, Offset position, Size size, QrEmbeddedImageStyle? style) { - final paint = Paint() + Canvas canvas, + Offset position, + Size size, + QrEmbeddedImageStyle? style, + ) { + final ui.Paint paint = Paint() ..isAntiAlias = true ..filterQuality = FilterQuality.high; if (style != null) { @@ -382,10 +445,11 @@ class QrPainter extends CustomPainter { paint.colorFilter = ColorFilter.mode(style.color!, BlendMode.srcATop); } } - final srcSize = + final ui.Size srcSize = Size(embeddedImage!.width.toDouble(), embeddedImage!.height.toDouble()); - final src = Alignment.center.inscribe(srcSize, Offset.zero & srcSize); - final dst = Alignment.center.inscribe(size, position & size); + final ui.Rect src = + Alignment.center.inscribe(srcSize, Offset.zero & srcSize); + final ui.Rect dst = Alignment.center.inscribe(size, position & size); canvas.drawImageRect(embeddedImage!, src, dst, paint); } @@ -406,31 +470,36 @@ class QrPainter extends CustomPainter { /// Returns a [ui.Picture] object containing the QR code data. ui.Picture toPicture(double size) { - final recorder = ui.PictureRecorder(); - final canvas = Canvas(recorder); + final ui.PictureRecorder recorder = ui.PictureRecorder(); + final ui.Canvas canvas = Canvas(recorder); paint(canvas, Size(size, size)); return recorder.endRecording(); } /// Returns the raw QR code [ui.Image] object. - Future toImage(double size, - {ui.ImageByteFormat format = ui.ImageByteFormat.png}) async { - return await toPicture(size).toImage(size.toInt(), size.toInt()); + Future toImage( + double size, { + ui.ImageByteFormat format = ui.ImageByteFormat.png, + }) { + return toPicture(size).toImage(size.toInt(), size.toInt()); } /// Returns the raw QR code image byte data. - Future toImageData(double size, - {ui.ImageByteFormat format = ui.ImageByteFormat.png}) async { - final image = await toImage(size, format: format); + Future toImageData( + double size, { + ui.ImageByteFormat format = ui.ImageByteFormat.png, + }) async { + final ui.Image image = await toImage(size, format: format); return image.toByteData(format: format); } } class _PaintMetrics { - _PaintMetrics( - {required this.containerSize, - required this.gapSize, - required this.moduleCount}) { + _PaintMetrics({ + required this.containerSize, + required this.gapSize, + required this.moduleCount, + }) { _calculateMetrics(); } @@ -448,8 +517,8 @@ class _PaintMetrics { double get inset => _inset; void _calculateMetrics() { - final gapTotal = (moduleCount - 1) * gapSize; - var pixelSize = (containerSize - gapTotal) / moduleCount; + final double gapTotal = (moduleCount - 1) * gapSize; + final double pixelSize = (containerSize - gapTotal) / moduleCount; _pixelSize = (pixelSize * 2).roundToDouble() / 2; _innerContentSize = (_pixelSize * moduleCount) + gapTotal; _inset = (containerSize - _innerContentSize) / 2; diff --git a/lib/src/validator.dart b/lib/src/validator.dart index b40d31c..12a1eb8 100644 --- a/lib/src/validator.dart +++ b/lib/src/validator.dart @@ -30,10 +30,14 @@ class QrValidator { ); } return QrValidationResult( - status: QrValidationStatus.valid, qrCode: qrCode); - } on InputTooLongException catch (itle) { + status: QrValidationStatus.valid, + qrCode: qrCode, + ); + } on InputTooLongException catch (title) { return QrValidationResult( - status: QrValidationStatus.contentTooLong, error: itle); + status: QrValidationStatus.contentTooLong, + error: title, + ); } on Exception catch (ex) { return QrValidationResult(status: QrValidationStatus.error, error: ex); } diff --git a/test/image_test.dart b/test/image_test.dart index a6bf5be..2734926 100644 --- a/test/image_test.dart +++ b/test/image_test.dart @@ -11,8 +11,10 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:qr_flutter/qr_flutter.dart'; void main() { - testWidgets('QrImageView generates correct image', (tester) async { - final qrImage = MaterialApp( + testWidgets('QrImageView generates correct image', ( + WidgetTester tester, + ) async { + final MaterialApp qrImage = MaterialApp( home: Center( child: RepaintBoundary( child: QrImageView( @@ -31,143 +33,155 @@ void main() { ); }); - testWidgets('QrImageView generates correct image with eye style', - (tester) async { - final qrImage = MaterialApp( - home: Center( - child: RepaintBoundary( - child: QrImageView( - data: 'This is a test image', - version: QrVersions.auto, - gapless: true, - errorCorrectionLevel: QrErrorCorrectLevel.L, - eyeStyle: const QrEyeStyle( - eyeShape: QrEyeShape.circle, - color: Colors.green, - ), - ), - ), - ), - ); - await tester.pumpWidget(qrImage); - await expectLater( - find.byType(QrImageView), - matchesGoldenFile('./.golden/qr_image_eye_styled_golden.png'), - ); - }); - - testWidgets('QrImageView generates correct image with data module style', - (tester) async { - final qrImage = MaterialApp( - home: Center( - child: RepaintBoundary( - child: QrImageView( - data: 'This is a test image', - version: QrVersions.auto, - gapless: true, - errorCorrectionLevel: QrErrorCorrectLevel.L, - dataModuleStyle: const QrDataModuleStyle( - dataModuleShape: QrDataModuleShape.circle, - color: Colors.blue, - ), - ), - ), - ), - ); - await tester.pumpWidget(qrImage); - await expectLater( - find.byType(QrImageView), - matchesGoldenFile('./.golden/qr_image_data_module_styled_golden.png'), - ); - }); - testWidgets( - 'QrImageView generates correct image with eye and data module sytle', - (tester) async { - final qrImage = MaterialApp( - home: Center( - child: RepaintBoundary( - child: QrImageView( - data: 'This is a test image', - version: QrVersions.auto, - gapless: true, - errorCorrectionLevel: QrErrorCorrectLevel.L, - eyeStyle: const QrEyeStyle( - eyeShape: QrEyeShape.circle, - color: Colors.green, - ), - dataModuleStyle: const QrDataModuleStyle( - dataModuleShape: QrDataModuleShape.circle, - color: Colors.blue, - ), - ), - ), - ), - ); - await tester.pumpWidget(qrImage); - await expectLater( - find.byType(QrImageView), - matchesGoldenFile('./.golden/qr_image_eye_data_module_styled_golden.png'), - ); - }); - - testWidgets( - 'QrImageView does not apply eye and data module color when foreground ' - 'color is also specified', (tester) async { - final qrImage = MaterialApp( - home: Center( - child: RepaintBoundary( - child: QrImageView( - data: 'This is a test image', - version: QrVersions.auto, - gapless: true, - foregroundColor: Colors.red, - errorCorrectionLevel: QrErrorCorrectLevel.L, - eyeStyle: const QrEyeStyle( - eyeShape: QrEyeShape.circle, - color: Colors.green, - ), - dataModuleStyle: const QrDataModuleStyle( - dataModuleShape: QrDataModuleShape.circle, - color: Colors.blue, - ), - ), - ), - ), - ); - await tester.pumpWidget(qrImage); - await expectLater( - find.byType(QrImageView), - matchesGoldenFile('./.golden/qr_image_foreground_colored_golden.png'), - ); - }); - - testWidgets('QrImageView generates correct image with logo', (tester) async { - await pumpWidgetWithImages( - tester, - MaterialApp( + 'QrImageView generates correct image with eye style', + (WidgetTester tester) async { + final MaterialApp qrImage = MaterialApp( home: Center( child: RepaintBoundary( child: QrImageView( - data: 'This is a a qr code with a logo', + data: 'This is a test image', version: QrVersions.auto, gapless: true, errorCorrectionLevel: QrErrorCorrectLevel.L, - embeddedImage: FileImage(File('test/.images/logo_yakka.png')), + eyeStyle: const QrEyeStyle( + eyeShape: QrEyeShape.circle, + color: Colors.green, + ), ), ), ), - ), - ['test/.images/logo_yakka.png'], - ); + ); + await tester.pumpWidget(qrImage); + await expectLater( + find.byType(QrImageView), + matchesGoldenFile('./.golden/qr_image_eye_styled_golden.png'), + ); + }, + ); - await tester.pumpAndSettle(); + testWidgets( + 'QrImageView generates correct image with data module style', + (WidgetTester tester) async { + final MaterialApp qrImage = MaterialApp( + home: Center( + child: RepaintBoundary( + child: QrImageView( + data: 'This is a test image', + version: QrVersions.auto, + gapless: true, + errorCorrectionLevel: QrErrorCorrectLevel.L, + dataModuleStyle: const QrDataModuleStyle( + dataModuleShape: QrDataModuleShape.circle, + color: Colors.blue, + ), + ), + ), + ), + ); + await tester.pumpWidget(qrImage); + await expectLater( + find.byType(QrImageView), + matchesGoldenFile('./.golden/qr_image_data_module_styled_golden.png'), + ); + }, + ); - await expectLater( - find.byType(QrImageView), - matchesGoldenFile('./.golden/qr_image_logo_golden.png'), - ); - }); + testWidgets( + 'QrImageView generates correct image with eye and data module sytle', + (WidgetTester tester) async { + final MaterialApp qrImage = MaterialApp( + home: Center( + child: RepaintBoundary( + child: QrImageView( + data: 'This is a test image', + version: QrVersions.auto, + gapless: true, + errorCorrectionLevel: QrErrorCorrectLevel.L, + eyeStyle: const QrEyeStyle( + eyeShape: QrEyeShape.circle, + color: Colors.green, + ), + dataModuleStyle: const QrDataModuleStyle( + dataModuleShape: QrDataModuleShape.circle, + color: Colors.blue, + ), + ), + ), + ), + ); + await tester.pumpWidget(qrImage); + await expectLater( + find.byType(QrImageView), + matchesGoldenFile( + './.golden/qr_image_eye_data_module_styled_golden.png', + ), + ); + }, + ); + + testWidgets( + 'QrImageView does not apply eye and data module color when foreground ' + 'color is also specified', + (WidgetTester tester) async { + final MaterialApp qrImage = MaterialApp( + home: Center( + child: RepaintBoundary( + child: QrImageView( + data: 'This is a test image', + version: QrVersions.auto, + gapless: true, + foregroundColor: Colors.red, + errorCorrectionLevel: QrErrorCorrectLevel.L, + eyeStyle: const QrEyeStyle( + eyeShape: QrEyeShape.circle, + color: Colors.green, + ), + dataModuleStyle: const QrDataModuleStyle( + dataModuleShape: QrDataModuleShape.circle, + color: Colors.blue, + ), + ), + ), + ), + ); + await tester.pumpWidget(qrImage); + await expectLater( + find.byType(QrImageView), + matchesGoldenFile('./.golden/qr_image_foreground_colored_golden.png'), + ); + }, + ); + + testWidgets( + 'QrImageView generates correct image with logo', + (WidgetTester tester) async { + await pumpWidgetWithImages( + tester, + MaterialApp( + home: Center( + child: RepaintBoundary( + child: QrImageView( + data: 'This is a a qr code with a logo', + version: QrVersions.auto, + gapless: true, + errorCorrectionLevel: QrErrorCorrectLevel.L, + embeddedImage: FileImage(File('test/.images/logo_yakka.png')), + ), + ), + ), + ), + ['test/.images/logo_yakka.png'], + ); + + await tester.pumpAndSettle(); + + await expectLater( + find.byType(QrImageView), + matchesGoldenFile('./.golden/qr_image_logo_golden.png'), + ); + }, + ); } /// Pre-cache images to make sure they show up in golden tests. @@ -180,19 +194,24 @@ Future pumpWidgetWithImages( ) async { Future? precacheFuture; await tester.pumpWidget( - Builder(builder: (buildContext) { - precacheFuture = tester.runAsync(() async { - await Future.wait([ - for (final assetName in assetNames) - precacheImage(FileImage(File(assetName)), buildContext), - ]); - }); - return widget; - }), + Builder( + builder: (BuildContext buildContext) { + precacheFuture = tester.runAsync(() async { + await Future.wait(>[ + for (final String assetName in assetNames) + precacheImage(FileImage(File(assetName)), buildContext), + ]); + }); + return widget; + }, + ), ); await precacheFuture; } Widget buildTestableWidget(Widget widget) { - return MediaQuery(data: MediaQueryData(), child: MaterialApp(home: widget)); + return MediaQuery( + data: const MediaQueryData(), + child: MaterialApp(home: widget), + ); } diff --git a/test/painter_test.dart b/test/painter_test.dart index 31bbba6..dcc0942 100644 --- a/test/painter_test.dart +++ b/test/painter_test.dart @@ -10,8 +10,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:qr_flutter/qr_flutter.dart'; void main() { - testWidgets('QrPainter generates correct image', (tester) async { - final painter = QrPainter( + testWidgets('QrPainter generates correct image', (WidgetTester tester) async { + final QrPainter painter = QrPainter( data: 'The painter is this thing', version: QrVersions.auto, gapless: true, @@ -21,10 +21,10 @@ void main() { await tester.runAsync(() async { imageData = await painter.toImageData(600.0); }); - final imageBytes = imageData!.buffer.asUint8List(); - final widget = Center( + final Uint8List imageBytes = imageData!.buffer.asUint8List(); + final Widget widget = Center( child: RepaintBoundary( - child: Container( + child: SizedBox( width: 600, height: 600, child: Image.memory(imageBytes), From 0315bb336d1d7b95ea8a1c764aebcc9025e89984 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Mon, 1 May 2023 18:32:40 +0300 Subject: [PATCH 09/19] Improve code quality --- example/lib/main_screen.dart | 4 ++-- lib/src/paint_cache.dart | 16 ++++++---------- lib/src/qr_image_view.dart | 30 +++++++++++++++--------------- lib/src/qr_painter.dart | 18 +++++++----------- lib/src/types.dart | 11 ++++++----- 5 files changed, 36 insertions(+), 43 deletions(-) diff --git a/example/lib/main_screen.dart b/example/lib/main_screen.dart index c22a1d2..dd05fad 100644 --- a/example/lib/main_screen.dart +++ b/example/lib/main_screen.dart @@ -46,8 +46,8 @@ class _MainScreenState extends State { ), // size: 320.0, embeddedImage: snapshot.data, - embeddedImageStyle: QrEmbeddedImageStyle( - size: const Size.square(60), + embeddedImageStyle: const QrEmbeddedImageStyle( + size: Size.square(60), ), ), ); diff --git a/lib/src/paint_cache.dart b/lib/src/paint_cache.dart index 68f460a..634ab5b 100644 --- a/lib/src/paint_cache.dart +++ b/lib/src/paint_cache.dart @@ -34,11 +34,9 @@ class PaintCache { /// Retrieve the first [Paint] object from the paint cache for the provided /// element and position. Paint? firstPaint(QrCodeElement element, {FinderPatternPosition? position}) { - if (element == QrCodeElement.codePixel) { - return _pixelPaints.first; - } else { - return _keyedPaints[_cacheKey(element, position: position)]; - } + return element == QrCodeElement.codePixel + ? _pixelPaints.first + : _keyedPaints[_cacheKey(element, position: position)]; } /// Retrieve all [Paint] objects from the paint cache for the provided @@ -49,10 +47,8 @@ class PaintCache { QrCodeElement element, { FinderPatternPosition? position, }) { - if (element == QrCodeElement.codePixel) { - return _pixelPaints; - } else { - return [_keyedPaints[_cacheKey(element, position: position)]]; - } + return element == QrCodeElement.codePixel + ? _pixelPaints + : [_keyedPaints[_cacheKey(element, position: position)]]; } } diff --git a/lib/src/qr_image_view.dart b/lib/src/qr_image_view.dart index edcad03..043c2db 100644 --- a/lib/src/qr_image_view.dart +++ b/lib/src/qr_image_view.dart @@ -44,7 +44,10 @@ class QrImageView extends StatefulWidget { this.embeddedImageEmitsError = false, @Deprecated('use colors in eyeStyle and dataModuleStyle instead') this.foregroundColor, - }) : assert(QrVersions.isSupportedVersion(version)), + }) : assert( + QrVersions.isSupportedVersion(version), + 'QR code version $version is not supported', + ), _data = data, _qrCode = null; @@ -75,7 +78,10 @@ class QrImageView extends StatefulWidget { this.embeddedImageEmitsError = false, @Deprecated('use colors in eyeStyle and dataModuleStyle instead') this.foregroundColor, - }) : assert(QrVersions.isSupportedVersion(version)), + }) : assert( + QrVersions.isSupportedVersion(version), + 'QR code version $version is not supported', + ), _data = null, _qrCode = qr; @@ -165,11 +171,7 @@ class _QrImageViewState extends State { version: widget.version, errorCorrectionLevel: widget.errorCorrectionLevel, ); - if (_validationResult.isValid) { - _qr = _validationResult.qrCode; - } else { - _qr = null; - } + _qr = _validationResult.isValid ? _validationResult.qrCode : null; } else if (widget._qrCode != null) { _qr = widget._qrCode; _validationResult = @@ -192,29 +194,27 @@ class _QrImageViewState extends State { builder: (BuildContext ctx, AsyncSnapshot snapshot) { if (snapshot.error != null) { print('snapshot error: ${snapshot.error}'); - if (widget.embeddedImageEmitsError) { - return _errorWidget(context, constraints, snapshot.error); - } else { - return _qrWidget(context, null, widgetSize); - } + return widget.embeddedImageEmitsError + ? _errorWidget(context, constraints, snapshot.error) + : _qrWidget(null, widgetSize); } if (snapshot.hasData) { print('loaded image'); final ui.Image? loadedImage = snapshot.data; - return _qrWidget(context, loadedImage, widgetSize); + return _qrWidget(loadedImage, widgetSize); } else { return Container(); } }, ); } else { - return _qrWidget(context, null, widgetSize); + return _qrWidget(null, widgetSize); } }, ); } - Widget _qrWidget(BuildContext context, ui.Image? image, double edgeLength) { + Widget _qrWidget(ui.Image? image, double edgeLength) { final QrPainter painter = QrPainter.withQr( qr: _qr!, color: widget.foregroundColor, diff --git a/lib/src/qr_painter.dart b/lib/src/qr_painter.dart index 337defc..730ba4f 100644 --- a/lib/src/qr_painter.dart +++ b/lib/src/qr_painter.dart @@ -48,7 +48,10 @@ class QrPainter extends CustomPainter { 'You should use the background color value of your container widget', ) this.emptyColor, - }) : assert(QrVersions.isSupportedVersion(version)) { + }) : assert( + QrVersions.isSupportedVersion(version), + 'QR code version $version is not supported', + ) { _init(data); } @@ -351,11 +354,7 @@ class QrPainter extends CustomPainter { position: position, )!; outerPaint.strokeWidth = metrics.pixelSize; - if (color != null) { - outerPaint.color = color!; - } else { - outerPaint.color = eyeStyle.color!; - } + outerPaint.color = color != null ? color! : eyeStyle.color!; final ui.Paint innerPaint = _paintCache .firstPaint(QrCodeElement.finderPatternInner, position: position)!; @@ -477,10 +476,7 @@ class QrPainter extends CustomPainter { } /// Returns the raw QR code [ui.Image] object. - Future toImage( - double size, { - ui.ImageByteFormat format = ui.ImageByteFormat.png, - }) { + Future toImage(double size) { return toPicture(size).toImage(size.toInt(), size.toInt()); } @@ -489,7 +485,7 @@ class QrPainter extends CustomPainter { double size, { ui.ImageByteFormat format = ui.ImageByteFormat.png, }) async { - final ui.Image image = await toImage(size, format: format); + final ui.Image image = await toImage(size); return image.toByteData(format: format); } } diff --git a/lib/src/types.dart b/lib/src/types.dart index 0b1a493..b67b185 100644 --- a/lib/src/types.dart +++ b/lib/src/types.dart @@ -4,8 +4,6 @@ * See LICENSE for distribution and usage details. */ -import 'dart:ui'; - import 'package:flutter/widgets.dart'; /// Represents a specific element / part of a QR code. This is used to isolate @@ -59,6 +57,7 @@ enum QrDataModuleShape { } /// Styling options for finder pattern eye. +@immutable class QrEyeStyle { /// Create a new set of styling options for QR Eye. const QrEyeStyle({this.eyeShape, this.color}); @@ -82,6 +81,7 @@ class QrEyeStyle { } /// Styling options for data module. +@immutable class QrDataModuleStyle { /// Create a new set of styling options for data modules. const QrDataModuleStyle({ @@ -108,9 +108,10 @@ class QrDataModuleStyle { } /// Styling options for any embedded image overlay +@immutable class QrEmbeddedImageStyle { /// Create a new set of styling options. - QrEmbeddedImageStyle({ + const QrEmbeddedImageStyle({ this.size, this.color, }); @@ -118,10 +119,10 @@ class QrEmbeddedImageStyle { /// The size of the image. If one dimension is zero then the other dimension /// will be used to scale the zero dimension based on the original image /// size. - Size? size; + final Size? size; /// Color to tint the image. - Color? color; + final Color? color; /// Check to see if the style object has a non-null, non-zero size. bool get hasDefinedSize => size != null && size!.longestSide > 0; From 5502f62efbb252a6139e20ef89ad104ceb167d87 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Mon, 1 May 2023 18:33:52 +0300 Subject: [PATCH 10/19] Add Ivan Semkin to AUTHORS --- AUTHORS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 6a6707a..6c56fc7 100644 --- a/AUTHORS +++ b/AUTHORS @@ -5,4 +5,5 @@ Charles Crete: @cretezy Dmitry: @kelegorm Pedro Massango: @pedromassango Luke Pighetti: @lukepighetti -Jonas Zebari: @jonas-zebari \ No newline at end of file +Jonas Zebari: @jonas-zebari +Ivan Semkin: @vanyasem \ No newline at end of file From c2b47e257bd06b67d05cd9ce40ef6c8acf2abc8a Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Wed, 3 May 2023 21:31:45 +0300 Subject: [PATCH 11/19] Cosmetic code changes --- lib/src/paint_cache.dart | 1 - lib/src/qr_image_view.dart | 5 +++-- lib/src/qr_painter.dart | 2 +- test/image_test.dart | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/src/paint_cache.dart b/lib/src/paint_cache.dart index 634ab5b..454ee36 100644 --- a/lib/src/paint_cache.dart +++ b/lib/src/paint_cache.dart @@ -8,7 +8,6 @@ import 'package:flutter/widgets.dart'; import 'types.dart'; -/// class PaintCache { final List _pixelPaints = []; final Map _keyedPaints = {}; diff --git a/lib/src/qr_image_view.dart b/lib/src/qr_image_view.dart index 043c2db..6ff8934 100644 --- a/lib/src/qr_image_view.dart +++ b/lib/src/qr_image_view.dart @@ -193,13 +193,13 @@ class _QrImageViewState extends State { future: _loadQrImage(context, widget.embeddedImageStyle), builder: (BuildContext ctx, AsyncSnapshot snapshot) { if (snapshot.error != null) { - print('snapshot error: ${snapshot.error}'); + debugPrint('snapshot error: ${snapshot.error}'); return widget.embeddedImageEmitsError ? _errorWidget(context, constraints, snapshot.error) : _qrWidget(null, widgetSize); } if (snapshot.hasData) { - print('loaded image'); + debugPrint('loaded image'); final ui.Image? loadedImage = snapshot.data; return _qrWidget(loadedImage, widgetSize); } else { @@ -217,6 +217,7 @@ class _QrImageViewState extends State { Widget _qrWidget(ui.Image? image, double edgeLength) { final QrPainter painter = QrPainter.withQr( qr: _qr!, + // ignore: deprecated_member_use_from_same_package color: widget.foregroundColor, gapless: widget.gapless, embeddedImageStyle: widget.embeddedImageStyle, diff --git a/lib/src/qr_painter.dart b/lib/src/qr_painter.dart index 730ba4f..78df4d1 100644 --- a/lib/src/qr_painter.dart +++ b/lib/src/qr_painter.dart @@ -191,7 +191,7 @@ class QrPainter extends CustomPainter { void paint(Canvas canvas, Size size) { // if the widget has a zero size side then we cannot continue painting. if (size.shortestSide == 0) { - print("[QR] WARN: width or height is zero. You should set a 'size' value " + debugPrint("[QR] WARN: width or height is zero. You should set a 'size' value " 'or nest this painter in a Widget that defines a non-zero size'); return; } diff --git a/test/image_test.dart b/test/image_test.dart index 2734926..565fe3e 100644 --- a/test/image_test.dart +++ b/test/image_test.dart @@ -131,6 +131,7 @@ void main() { data: 'This is a test image', version: QrVersions.auto, gapless: true, + // ignore: deprecated_member_use_from_same_package foregroundColor: Colors.red, errorCorrectionLevel: QrErrorCorrectLevel.L, eyeStyle: const QrEyeStyle( From 0a954731fb28bedf7900d95b6557178996d9a138 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Wed, 3 May 2023 21:39:20 +0300 Subject: [PATCH 12/19] Update tests --- example/test/widget_test.dart | 29 ------------------ .../qr_image_data_module_styled_golden.png | Bin 32971 -> 32358 bytes ...qr_image_eye_data_module_styled_golden.png | Bin 41818 -> 41232 bytes test/.golden/qr_image_eye_styled_golden.png | Bin 15976 -> 15879 bytes .../qr_image_foreground_colored_golden.png | Bin 41920 -> 41271 bytes test/.golden/qr_image_golden.png | Bin 5092 -> 5035 bytes test/.golden/qr_image_logo_golden.png | Bin 14775 -> 12850 bytes 7 files changed, 29 deletions(-) delete mode 100644 example/test/widget_test.dart diff --git a/example/test/widget_test.dart b/example/test/widget_test.dart deleted file mode 100644 index 5d919ed..0000000 --- a/example/test/widget_test.dart +++ /dev/null @@ -1,29 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility that Flutter provides. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:example/main.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(ExampleApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -} diff --git a/test/.golden/qr_image_data_module_styled_golden.png b/test/.golden/qr_image_data_module_styled_golden.png index 47a1641b890fa949f4253dd9ddeccf3229069509..d50b737da1c1eaa3014202dfd9161ea80e5e5e94 100644 GIT binary patch literal 32358 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 diff --git a/test/.golden/qr_image_eye_data_module_styled_golden.png b/test/.golden/qr_image_eye_data_module_styled_golden.png index 8f44474099e73bee6dfb5479ca3dd5e15d3714fa..275496d9add85c2f81c3b9b016d05201c9ae1059 100644 GIT binary patch literal 41232 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 VNTUo_#X(OHyZwi3?pgbt{RcrQ>vRAB literal 41818 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

|sWX(=8F^p8ybn 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%0AnfYyIWXPq$|V(*&*mJHGN$ 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

3|fBd@F=;N>)KZok>&F89Fr@szh|RD7OnjdANT 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 v1zW)oX(0j3c}SWCuHr`!>;LnwD*vY54Q diff --git a/test/.golden/qr_image_eye_styled_golden.png b/test/.golden/qr_image_eye_styled_golden.png index fe964e5eb3c2770233956eb75da3bc946630577c..867ae26c4bca8d37435b3c9ec062395b30e9c666 100644 GIT binary patch literal 15879 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 diff --git a/test/.golden/qr_image_foreground_colored_golden.png b/test/.golden/qr_image_foreground_colored_golden.png index affaf04f4ea85917b2e0a5d51fffe0a47e5c57d5..60de4e7fa6b550170d05a566ca4217bc5ba4b3ea 100644 GIT binary patch literal 41271 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 literal 41920 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 diff --git a/test/.golden/qr_image_golden.png b/test/.golden/qr_image_golden.png index 93e2dd8975409ff20ee55873f03dced4d31048ab..493c247457e54cbcad53ad994d85d94c9f8dd944 100644 GIT binary patch literal 5035 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 literal 5092 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 diff --git a/test/.golden/qr_image_logo_golden.png b/test/.golden/qr_image_logo_golden.png index 0ab1b80160e1ba85356571f1e77ff5508680e5f8..8856a1b36837549bb6cf8f1207b3b5302f5e66de 100644 GIT binary patch literal 12850 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 literal 14775 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 Date: Thu, 4 May 2023 13:24:24 +0300 Subject: [PATCH 13/19] Update changelog and readme --- CHANGELOG.md | 3 +++ README.md | 50 ++++++++++++++++++++++---------------------------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35b3ec5..b35b156 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 4.1.0 +- Bump `qr` dependency (from `^3.0.0` to `^3.0.1`). + # 4.0.1 - Bump `qr` dependency (from `^2.0.0` to `^3.0.0`). - **BREAKING**: Rename `QrImage` to `QrImageView` diff --git a/README.md b/README.md index 3c8f84b..d83e971 100644 --- a/README.md +++ b/README.md @@ -55,8 +55,8 @@ import 'package:qr_flutter/qr_flutter.dart'; Next, to render a basic QR code you can use the following code (or something like it): ```dart -QrImage( - data: "1234567890", +QrImageView( + data: '1234567890', version: QrVersions.auto, size: 200.0, ), @@ -64,21 +64,22 @@ QrImage( Depending on your data requirements you may want to tweak the QR code output. The following options are available: -| Property | Type | Description | -|----|----|----| -| `version` | int | `QrVersions.auto` or a value between 1 and 40. See http://www.qrcode.com/en/about/version.html for limitations and details. | -| `errorCorrectionLevel` | int | A value defined on `QrErrorCorrectLevel`. e.g.: `QrErrorCorrectLevel.L`. | -| `size` | double | The (square) size of the image. If not given, will auto size using shortest size constraint. | -| `padding` | EdgeInsets | Padding surrounding the QR code data. | -| `backgroundColor` | Color | The background color (default is none). | -| `foregroundColor` | Color | The foreground color (default is black). | -| `gapless` | bool | Adds an extra pixel in size to prevent gaps (default is true). | -| `errorStateBuilder` | QrErrorBuilder | Allows you to show an error state `Widget` in the event there is an error rendering the QR code (e.g.: version is too low, input is too long, etc). | -| `constrainErrorBounds` | bool | If true, the error `Widget` will be constrained to the square that the QR code was going to be drawn in. If false, the error state `Widget` will grow/shrink to whatever size it needs. | -| `embeddedImage` | ImageProvider | An `ImageProvider` that defines an image to be overlaid in the center of the QR code. | -| `embeddedImageStyle` | QrEmbeddedImageStyle | Properties to style the embedded image. | -| `embeddedImageEmitsError` | bool | If true, any failure to load the embedded image will trigger the `errorStateBuilder` or render an empty `Container`. If false, the QR code will be rendered and the embedded image will be ignored. | -|`semanticsLabel`|String|`semanticsLabel` will be used by screen readers to describe the content of the QR code.| +| Property | Type | Description | +|---------------------------|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `version` | int | `QrVersions.auto` or a value between 1 and 40. See http://www.qrcode.com/en/about/version.html for limitations and details. | +| `errorCorrectionLevel` | int | A value defined on `QrErrorCorrectLevel`. e.g.: `QrErrorCorrectLevel.L`. | +| `size` | double | The (square) size of the image. If not given, will auto size using shortest size constraint. | +| `padding` | EdgeInsets | Padding surrounding the QR code data. | +| `backgroundColor` | Color | The background color (default is none). | +| `eyeStyle` | QrEyeStyle | Configures the QR code eyes' (corners') shape and color. | +| `dataModuleStyle` | QrDataModuleStyle | Configures the shape and the color of the dots. | +| `gapless` | bool | Adds an extra pixel in size to prevent gaps (default is true). | +| `errorStateBuilder` | QrErrorBuilder | Allows you to show an error state `Widget` in the event there is an error rendering the QR code (e.g.: version is too low, input is too long, etc). | +| `constrainErrorBounds` | bool | If true, the error `Widget` will be constrained to the square that the QR code was going to be drawn in. If false, the error state `Widget` will grow/shrink to whatever size it needs. | +| `embeddedImage` | ImageProvider | An `ImageProvider` that defines an image to be overlaid in the center of the QR code. | +| `embeddedImageStyle` | QrEmbeddedImageStyle | Properties to style the embedded image. | +| `embeddedImageEmitsError` | bool | If true, any failure to load the embedded image will trigger the `errorStateBuilder` or render an empty `Container`. If false, the QR code will be rendered and the embedded image will be ignored. | +| `semanticsLabel` | String | `semanticsLabel` will be used by screen readers to describe the content of the QR code. | # Examples @@ -90,7 +91,7 @@ Also, the following examples give you a quick overview on how to use the library A basic QR code will look something like: ```dart -QrImage( +QrImageView( data: 'This is a simple QR code', version: QrVersions.auto, size: 320, @@ -101,7 +102,7 @@ QrImage( A QR code with an image (from your application's assets) will look like: ```dart -QrImage( +QrImageView( data: 'This QR code has an embedded image as well', version: QrVersions.auto, size: 320, @@ -116,7 +117,7 @@ QrImage( To show an error state in the event that the QR code can't be validated: ```dart -QrImage( +QrImageView( data: 'This QR code will show the error state instead', version: 1, size: 320, @@ -125,7 +126,7 @@ QrImage( return Container( child: Center( child: Text( - "Uh oh! Something went wrong...", + 'Uh oh! Something went wrong...', textAlign: TextAlign.center, ), ), @@ -134,13 +135,6 @@ QrImage( ) ``` - -# FAQ -## Has it been tested in production? Can I use it in production? - -Yep! It's stable and ready to rock. It's currently in use in quite a few production applications including: -- Sixpoint: [Android](https://play.google.com/store/apps/details?id=com.sixpoint.sixpoint&hl=en_US) & [iOS](https://itunes.apple.com/us/app/sixpoint/id663008674?mt=8) - # Outro ## Credits Thanks to Kevin Moore for his awesome [QR - Dart](https://github.com/kevmoo/qr.dart) library. It's the core of this library. From 0f78906ba9653fa3dc69cf577c3039c28625bc47 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Thu, 4 May 2023 13:26:10 +0300 Subject: [PATCH 14/19] Update package version in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d83e971..0c1ed27 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ You should add the following to your `pubspec.yaml` file: ```yaml dependencies: - qr_flutter: ^4.0.0 + qr_flutter: ^4.1.0 ``` **Note**: If you're using the Flutter `master` channel, if you encounter build issues, or want to try the latest and greatest then you should use the `master` branch and not a specific release version. To do so, use the following configuration in your `pubspec.yaml`: From fd87cc6629493e9440c9ae7ec87221712f98ab55 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Thu, 4 May 2023 23:47:33 +0300 Subject: [PATCH 15/19] Fix git dependency docs in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0c1ed27..49869e1 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ dependencies: dependencies: qr_flutter: git: - url: git://github.com/lukef/qr.flutter.git + url: https://github.com/theyakka/qr.flutter.git ``` Keep in mind the `master` branch could be unstable. From b30cbf85592bc01982b389d1ee6fe07d86337a68 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Fri, 5 May 2023 12:24:40 +0300 Subject: [PATCH 16/19] dart format --- lib/src/qr_image_view.dart | 4 ++-- lib/src/qr_painter.dart | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/src/qr_image_view.dart b/lib/src/qr_image_view.dart index 6ff8934..809e742 100644 --- a/lib/src/qr_image_view.dart +++ b/lib/src/qr_image_view.dart @@ -43,7 +43,7 @@ class QrImageView extends StatefulWidget { ), this.embeddedImageEmitsError = false, @Deprecated('use colors in eyeStyle and dataModuleStyle instead') - this.foregroundColor, + this.foregroundColor, }) : assert( QrVersions.isSupportedVersion(version), 'QR code version $version is not supported', @@ -77,7 +77,7 @@ class QrImageView extends StatefulWidget { ), this.embeddedImageEmitsError = false, @Deprecated('use colors in eyeStyle and dataModuleStyle instead') - this.foregroundColor, + this.foregroundColor, }) : assert( QrVersions.isSupportedVersion(version), 'QR code version $version is not supported', diff --git a/lib/src/qr_painter.dart b/lib/src/qr_painter.dart index 78df4d1..be754b3 100644 --- a/lib/src/qr_painter.dart +++ b/lib/src/qr_painter.dart @@ -43,11 +43,11 @@ class QrPainter extends CustomPainter { color: Color(0xFF000000), ), @Deprecated('use colors in eyeStyle and dataModuleStyle instead') - this.color = _qrDefaultColor, + this.color = _qrDefaultColor, @Deprecated( 'You should use the background color value of your container widget', ) - this.emptyColor, + this.emptyColor, }) : assert( QrVersions.isSupportedVersion(version), 'QR code version $version is not supported', @@ -72,11 +72,11 @@ class QrPainter extends CustomPainter { color: Color(0xFF000000), ), @Deprecated('use colors in eyeStyle and dataModuleStyle instead') - this.color = _qrDefaultColor, + this.color = _qrDefaultColor, @Deprecated( 'You should use the background color value of your container widget', ) - this.emptyColor, + this.emptyColor, }) : _qr = qr, version = qr.typeNumber, errorCorrectionLevel = qr.errorCorrectLevel { @@ -191,7 +191,8 @@ class QrPainter extends CustomPainter { void paint(Canvas canvas, Size size) { // if the widget has a zero size side then we cannot continue painting. if (size.shortestSide == 0) { - debugPrint("[QR] WARN: width or height is zero. You should set a 'size' value " + debugPrint( + "[QR] WARN: width or height is zero. You should set a 'size' value " 'or nest this painter in a Widget that defines a non-zero size'); return; } From 0f4e54549d7634ad6d6e444b2fed0cfed02fcde6 Mon Sep 17 00:00:00 2001 From: Luke Freeman Date: Sat, 13 May 2023 20:50:23 -0700 Subject: [PATCH 17/19] bump gradle version --- example/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/android/build.gradle b/example/android/build.gradle index f6865e6..29a8f72 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,6 +1,6 @@ buildscript { ext { - buildGradleVersion = '7.2.2' + buildGradleVersion = '7.4.2' kotlinVersion = '1.7.21' } repositories { From e77ac65c7d7f62984c1ee6cbd3178ab1dbac3262 Mon Sep 17 00:00:00 2001 From: Luke Freeman Date: Sat, 13 May 2023 20:58:29 -0700 Subject: [PATCH 18/19] bump SDK version --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 7642172..f0e2e74 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ version: 4.1.0 homepage: https://github.com/theyakka/qr.flutter environment: - sdk: '>=2.19.6 <3.0.0' + sdk: '>=2.19.6 <4.0.0' flutter: ">=3.7.0" dependencies: From ffbb276ec6ec2830ca50841a7aab9cfb4b7fb26b Mon Sep 17 00:00:00 2001 From: Luke Freeman Date: Sun, 14 May 2023 10:48:11 -0700 Subject: [PATCH 19/19] fix code warnings --- analysis_options.yaml | 1 - lib/src/errors.dart | 2 +- lib/src/paint_cache.dart | 4 +- lib/src/qr_image_view.dart | 24 +++++----- lib/src/qr_painter.dart | 96 +++++++++++++++++++------------------- test/image_test.dart | 24 +++++----- test/painter_test.dart | 6 +-- 7 files changed, 79 insertions(+), 78 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 82b26a2..2607df3 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -80,7 +80,6 @@ linter: # libraries # classes - one_member_abstracts # avoid - - avoid_classes_with_only_static_members # avoid - public_member_api_docs # constructors - prefer_constructors_over_static_methods diff --git a/lib/src/errors.dart b/lib/src/errors.dart index 5068cb2..239b9ea 100644 --- a/lib/src/errors.dart +++ b/lib/src/errors.dart @@ -13,7 +13,7 @@ import 'qr_versions.dart'; class QrUnsupportedVersionException implements Exception { /// Create a new QrUnsupportedVersionException. factory QrUnsupportedVersionException(int providedVersion) { - final String message = + final message = 'Invalid version. $providedVersion is not >= ${QrVersions.min} ' 'and <= ${QrVersions.max}'; return QrUnsupportedVersionException._internal(providedVersion, message); diff --git a/lib/src/paint_cache.dart b/lib/src/paint_cache.dart index 454ee36..ead3df3 100644 --- a/lib/src/paint_cache.dart +++ b/lib/src/paint_cache.dart @@ -8,12 +8,14 @@ import 'package:flutter/widgets.dart'; import 'types.dart'; +/// Caches painter objects so we do have to recreate them and waste expensive +/// cycles. class PaintCache { final List _pixelPaints = []; final Map _keyedPaints = {}; String _cacheKey(QrCodeElement element, {FinderPatternPosition? position}) { - final String posKey = position != null ? position.toString() : 'any'; + final posKey = position != null ? position.toString() : 'any'; return '$element:$posKey'; } diff --git a/lib/src/qr_image_view.dart b/lib/src/qr_image_view.dart index 809e742..e803f5c 100644 --- a/lib/src/qr_image_view.dart +++ b/lib/src/qr_image_view.dart @@ -178,20 +178,20 @@ class _QrImageViewState extends State { QrValidationResult(status: QrValidationStatus.valid, qrCode: _qr); } return LayoutBuilder( - builder: (BuildContext context, BoxConstraints constraints) { + builder: (context, constraints) { // validation failed, show an error state widget if builder is present. if (!_validationResult.isValid) { return _errorWidget(context, constraints, _validationResult.error); } // no error, build the regular widget - final double widgetSize = + final widgetSize = widget.size ?? constraints.biggest.shortestSide; if (widget.embeddedImage != null) { // if requesting to embed an image then we need to load via a // FutureBuilder because the image provider will be async. return FutureBuilder( future: _loadQrImage(context, widget.embeddedImageStyle), - builder: (BuildContext ctx, AsyncSnapshot snapshot) { + builder: (ctx, snapshot) { if (snapshot.error != null) { debugPrint('snapshot error: ${snapshot.error}'); return widget.embeddedImageEmitsError @@ -200,7 +200,7 @@ class _QrImageViewState extends State { } if (snapshot.hasData) { debugPrint('loaded image'); - final ui.Image? loadedImage = snapshot.data; + final loadedImage = snapshot.data; return _qrWidget(loadedImage, widgetSize); } else { return Container(); @@ -215,7 +215,7 @@ class _QrImageViewState extends State { } Widget _qrWidget(ui.Image? image, double edgeLength) { - final QrPainter painter = QrPainter.withQr( + final painter = QrPainter.withQr( qr: _qr!, // ignore: deprecated_member_use_from_same_package color: widget.foregroundColor, @@ -239,10 +239,10 @@ class _QrImageViewState extends State { BoxConstraints constraints, Object? error, ) { - final Widget errorWidget = widget.errorStateBuilder == null + final errorWidget = widget.errorStateBuilder == null ? Container() : widget.errorStateBuilder!(context, error); - final double errorSideLength = widget.constrainErrorBounds + final errorSideLength = widget.constrainErrorBounds ? widget.size ?? constraints.biggest.shortestSide : constraints.biggest.longestSide; return _QrContentView( @@ -262,20 +262,20 @@ class _QrImageViewState extends State { ) { if (style != null) {} - final MediaQueryData mq = MediaQuery.of(buildContext); - final Completer completer = Completer(); - final ImageStream stream = widget.embeddedImage!.resolve( + final mq = MediaQuery.of(buildContext); + final completer = Completer(); + final stream = widget.embeddedImage!.resolve( ImageConfiguration( devicePixelRatio: mq.devicePixelRatio, ), ); streamListener = ImageStreamListener( - (ImageInfo info, bool err) { + (info, err) { stream.removeListener(streamListener); completer.complete(info.image); }, - onError: (Object err, _) { + onError: (err, _) { stream.removeListener(streamListener); completer.completeError(err); }, diff --git a/lib/src/qr_painter.dart b/lib/src/qr_painter.dart index be754b3..f2f3ba2 100644 --- a/lib/src/qr_painter.dart +++ b/lib/src/qr_painter.dart @@ -138,7 +138,7 @@ class QrPainter extends CustomPainter { throw QrUnsupportedVersionException(version); } // configure and make the QR code data - final QrValidationResult validationResult = QrValidator.validate( + final validationResult = QrValidator.validate( data: data, version: version, errorCorrectionLevel: errorCorrectionLevel, @@ -168,7 +168,7 @@ class QrPainter extends CustomPainter { ); // Cache the finder pattern painters. We'll keep one for each one in case // we want to provide customization options later. - for (final FinderPatternPosition position in FinderPatternPosition.values) { + for (final position in FinderPatternPosition.values) { _paintCache.cache( Paint()..style = PaintingStyle.stroke, QrCodeElement.finderPatternOuter, @@ -197,7 +197,7 @@ class QrPainter extends CustomPainter { return; } - final _PaintMetrics paintMetrics = _PaintMetrics( + final paintMetrics = _PaintMetrics( containerSize: size.shortestSide, moduleCount: _qr!.moduleCount, gapSize: gapless ? 0 : _gapSize, @@ -231,9 +231,9 @@ class QrPainter extends CustomPainter { double left; double top; - final num gap = !gapless ? _gapSize : 0; + final gap = !gapless ? _gapSize : 0; // get the painters for the pixel information - final ui.Paint? pixelPaint = + final pixelPaint = _paintCache.firstPaint(QrCodeElement.codePixel); if (color != null) { pixelPaint!.color = color!; @@ -245,13 +245,13 @@ class QrPainter extends CustomPainter { emptyPixelPaint = _paintCache.firstPaint(QrCodeElement.codePixelEmpty); emptyPixelPaint!.color = emptyColor!; } - for (int x = 0; x < _qr!.moduleCount; x++) { - for (int y = 0; y < _qr!.moduleCount; y++) { + for (var x = 0; x < _qr!.moduleCount; x++) { + for (var y = 0; y < _qr!.moduleCount; y++) { // draw the finder patterns independently if (_isFinderPatternPosition(x, y)) { continue; } - final ui.Paint? paint = + final paint = _qrImage.isDark(y, x) ? pixelPaint : emptyPixelPaint; if (paint == null) { continue; @@ -259,15 +259,15 @@ class QrPainter extends CustomPainter { // paint a pixel left = paintMetrics.inset + (x * (paintMetrics.pixelSize + gap)); top = paintMetrics.inset + (y * (paintMetrics.pixelSize + gap)); - double pixelHTweak = 0.0; - double pixelVTweak = 0.0; + var pixelHTweak = 0.0; + var pixelVTweak = 0.0; if (gapless && _hasAdjacentHorizontalPixel(x, y, _qr!.moduleCount)) { pixelHTweak = 0.5; } if (gapless && _hasAdjacentVerticalPixel(x, y, _qr!.moduleCount)) { pixelVTweak = 0.5; } - final ui.Rect squareRect = Rect.fromLTWH( + final squareRect = Rect.fromLTWH( left, top, paintMetrics.pixelSize + pixelHTweak, @@ -276,7 +276,7 @@ class QrPainter extends CustomPainter { if (dataModuleStyle.dataModuleShape == QrDataModuleShape.square) { canvas.drawRect(squareRect, paint); } else { - final ui.RRect roundedRect = RRect.fromRectAndRadius( + final roundedRect = RRect.fromRectAndRadius( squareRect, Radius.circular(paintMetrics.pixelSize + pixelHTweak), ); @@ -286,15 +286,15 @@ class QrPainter extends CustomPainter { } if (embeddedImage != null) { - final ui.Size originalSize = Size( + final originalSize = Size( embeddedImage!.width.toDouble(), embeddedImage!.height.toDouble(), ); - final ui.Size? requestedSize = + final requestedSize = embeddedImageStyle != null ? embeddedImageStyle!.size : null; - final ui.Size imageSize = + final imageSize = _scaledAspectSize(size, originalSize, requestedSize); - final ui.Offset position = Offset( + final position = Offset( (size.width - imageSize.width) / 2.0, (size.height - imageSize.height) / 2.0, ); @@ -318,10 +318,10 @@ class QrPainter extends CustomPainter { } bool _isFinderPatternPosition(int x, int y) { - final bool isTopLeft = y < _finderPatternLimit && x < _finderPatternLimit; - final bool isBottomLeft = y < _finderPatternLimit && + final isTopLeft = y < _finderPatternLimit && x < _finderPatternLimit; + final isBottomLeft = y < _finderPatternLimit && (x >= _qr!.moduleCount - _finderPatternLimit); - final bool isTopRight = y >= _qr!.moduleCount - _finderPatternLimit && + final isTopRight = y >= _qr!.moduleCount - _finderPatternLimit && (x < _finderPatternLimit); return isTopLeft || isBottomLeft || isTopRight; } @@ -331,12 +331,12 @@ class QrPainter extends CustomPainter { Canvas canvas, _PaintMetrics metrics, ) { - final double totalGap = (_finderPatternLimit - 1) * metrics.gapSize; - final double radius = + final totalGap = (_finderPatternLimit - 1) * metrics.gapSize; + final radius = ((_finderPatternLimit * metrics.pixelSize) + totalGap) - metrics.pixelSize; - final double strokeAdjust = metrics.pixelSize / 2.0; - final double edgePos = + final strokeAdjust = metrics.pixelSize / 2.0; + final edgePos = (metrics.inset + metrics.innerContentSize) - (radius + strokeAdjust); Offset offset; @@ -350,19 +350,19 @@ class QrPainter extends CustomPainter { } // configure the paints - final ui.Paint outerPaint = _paintCache.firstPaint( + final outerPaint = _paintCache.firstPaint( QrCodeElement.finderPatternOuter, position: position, )!; outerPaint.strokeWidth = metrics.pixelSize; outerPaint.color = color != null ? color! : eyeStyle.color!; - final ui.Paint innerPaint = _paintCache + final innerPaint = _paintCache .firstPaint(QrCodeElement.finderPatternInner, position: position)!; innerPaint.strokeWidth = metrics.pixelSize; innerPaint.color = emptyColor ?? const Color(0x00ffffff); - final ui.Paint? dotPaint = _paintCache.firstPaint( + final dotPaint = _paintCache.firstPaint( QrCodeElement.finderPatternDot, position: position, ); @@ -372,20 +372,20 @@ class QrPainter extends CustomPainter { dotPaint!.color = eyeStyle.color!; } - final ui.Rect outerRect = + final outerRect = Rect.fromLTWH(offset.dx, offset.dy, radius, radius); - final double innerRadius = radius - (2 * metrics.pixelSize); - final ui.Rect innerRect = Rect.fromLTWH( + final innerRadius = radius - (2 * metrics.pixelSize); + final innerRect = Rect.fromLTWH( offset.dx + metrics.pixelSize, offset.dy + metrics.pixelSize, innerRadius, innerRadius, ); - final double gap = metrics.pixelSize * 2; - final double dotSize = radius - gap - (2 * strokeAdjust); - final ui.Rect dotRect = Rect.fromLTWH( + final gap = metrics.pixelSize * 2; + final dotSize = radius - gap - (2 * strokeAdjust); + final dotRect = Rect.fromLTWH( offset.dx + metrics.pixelSize + strokeAdjust, offset.dy + metrics.pixelSize + strokeAdjust, dotSize, @@ -397,15 +397,15 @@ class QrPainter extends CustomPainter { canvas.drawRect(innerRect, innerPaint); canvas.drawRect(dotRect, dotPaint); } else { - final ui.RRect roundedOuterStrokeRect = + final roundedOuterStrokeRect = RRect.fromRectAndRadius(outerRect, Radius.circular(radius)); canvas.drawRRect(roundedOuterStrokeRect, outerPaint); - final ui.RRect roundedInnerStrokeRect = + final roundedInnerStrokeRect = RRect.fromRectAndRadius(outerRect, Radius.circular(innerRadius)); canvas.drawRRect(roundedInnerStrokeRect, innerPaint); - final ui.RRect roundedDotStrokeRect = + final roundedDotStrokeRect = RRect.fromRectAndRadius(dotRect, Radius.circular(dotSize)); canvas.drawRRect(roundedDotStrokeRect, dotPaint); } @@ -421,12 +421,12 @@ class QrPainter extends CustomPainter { if (requestedSize != null && !requestedSize.isEmpty) { return requestedSize; } else if (requestedSize != null && _hasOneNonZeroSide(requestedSize)) { - final double maxSide = requestedSize.longestSide; - final double ratio = maxSide / originalSize.longestSide; + final maxSide = requestedSize.longestSide; + final ratio = maxSide / originalSize.longestSide; return Size(ratio * originalSize.width, ratio * originalSize.height); } else { - final double maxSide = 0.25 * widgetSize.shortestSide; - final double ratio = maxSide / originalSize.longestSide; + final maxSide = 0.25 * widgetSize.shortestSide; + final ratio = maxSide / originalSize.longestSide; return Size(ratio * originalSize.width, ratio * originalSize.height); } } @@ -437,7 +437,7 @@ class QrPainter extends CustomPainter { Size size, QrEmbeddedImageStyle? style, ) { - final ui.Paint paint = Paint() + final paint = Paint() ..isAntiAlias = true ..filterQuality = FilterQuality.high; if (style != null) { @@ -445,11 +445,11 @@ class QrPainter extends CustomPainter { paint.colorFilter = ColorFilter.mode(style.color!, BlendMode.srcATop); } } - final ui.Size srcSize = + final srcSize = Size(embeddedImage!.width.toDouble(), embeddedImage!.height.toDouble()); - final ui.Rect src = + final src = Alignment.center.inscribe(srcSize, Offset.zero & srcSize); - final ui.Rect dst = Alignment.center.inscribe(size, position & size); + final dst = Alignment.center.inscribe(size, position & size); canvas.drawImageRect(embeddedImage!, src, dst, paint); } @@ -470,8 +470,8 @@ class QrPainter extends CustomPainter { /// Returns a [ui.Picture] object containing the QR code data. ui.Picture toPicture(double size) { - final ui.PictureRecorder recorder = ui.PictureRecorder(); - final ui.Canvas canvas = Canvas(recorder); + final recorder = ui.PictureRecorder(); + final canvas = Canvas(recorder); paint(canvas, Size(size, size)); return recorder.endRecording(); } @@ -486,7 +486,7 @@ class QrPainter extends CustomPainter { double size, { ui.ImageByteFormat format = ui.ImageByteFormat.png, }) async { - final ui.Image image = await toImage(size); + final image = await toImage(size); return image.toByteData(format: format); } } @@ -514,8 +514,8 @@ class _PaintMetrics { double get inset => _inset; void _calculateMetrics() { - final double gapTotal = (moduleCount - 1) * gapSize; - final double pixelSize = (containerSize - gapTotal) / moduleCount; + final gapTotal = (moduleCount - 1) * gapSize; + final pixelSize = (containerSize - gapTotal) / moduleCount; _pixelSize = (pixelSize * 2).roundToDouble() / 2; _innerContentSize = (_pixelSize * moduleCount) + gapTotal; _inset = (containerSize - _innerContentSize) / 2; diff --git a/test/image_test.dart b/test/image_test.dart index 565fe3e..578c1c8 100644 --- a/test/image_test.dart +++ b/test/image_test.dart @@ -12,9 +12,9 @@ import 'package:qr_flutter/qr_flutter.dart'; void main() { testWidgets('QrImageView generates correct image', ( - WidgetTester tester, + tester, ) async { - final MaterialApp qrImage = MaterialApp( + final qrImage = MaterialApp( home: Center( child: RepaintBoundary( child: QrImageView( @@ -35,8 +35,8 @@ void main() { testWidgets( 'QrImageView generates correct image with eye style', - (WidgetTester tester) async { - final MaterialApp qrImage = MaterialApp( + (tester) async { + final qrImage = MaterialApp( home: Center( child: RepaintBoundary( child: QrImageView( @@ -62,8 +62,8 @@ void main() { testWidgets( 'QrImageView generates correct image with data module style', - (WidgetTester tester) async { - final MaterialApp qrImage = MaterialApp( + (tester) async { + final qrImage = MaterialApp( home: Center( child: RepaintBoundary( child: QrImageView( @@ -89,8 +89,8 @@ void main() { testWidgets( 'QrImageView generates correct image with eye and data module sytle', - (WidgetTester tester) async { - final MaterialApp qrImage = MaterialApp( + (tester) async { + final qrImage = MaterialApp( home: Center( child: RepaintBoundary( child: QrImageView( @@ -123,8 +123,8 @@ void main() { testWidgets( 'QrImageView does not apply eye and data module color when foreground ' 'color is also specified', - (WidgetTester tester) async { - final MaterialApp qrImage = MaterialApp( + (tester) async { + final qrImage = MaterialApp( home: Center( child: RepaintBoundary( child: QrImageView( @@ -156,7 +156,7 @@ void main() { testWidgets( 'QrImageView generates correct image with logo', - (WidgetTester tester) async { + (tester) async { await pumpWidgetWithImages( tester, MaterialApp( @@ -196,7 +196,7 @@ Future pumpWidgetWithImages( Future? precacheFuture; await tester.pumpWidget( Builder( - builder: (BuildContext buildContext) { + builder: (buildContext) { precacheFuture = tester.runAsync(() async { await Future.wait(>[ for (final String assetName in assetNames) diff --git a/test/painter_test.dart b/test/painter_test.dart index dcc0942..3e292c9 100644 --- a/test/painter_test.dart +++ b/test/painter_test.dart @@ -10,8 +10,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:qr_flutter/qr_flutter.dart'; void main() { - testWidgets('QrPainter generates correct image', (WidgetTester tester) async { - final QrPainter painter = QrPainter( + testWidgets('QrPainter generates correct image', (tester) async { + final painter = QrPainter( data: 'The painter is this thing', version: QrVersions.auto, gapless: true, @@ -21,7 +21,7 @@ void main() { await tester.runAsync(() async { imageData = await painter.toImageData(600.0); }); - final Uint8List imageBytes = imageData!.buffer.asUint8List(); + final imageBytes = imageData!.buffer.asUint8List(); final Widget widget = Center( child: RepaintBoundary( child: SizedBox(