├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── android
├── app
│ ├── build.gradle
│ ├── old_build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── io
│ │ │ │ └── flutter
│ │ │ │ └── plugins
│ │ │ │ └── GeneratedPluginRegistrant.java
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── openlabx
│ │ │ │ └── open_qr_code
│ │ │ │ ├── MainActivity.kt
│ │ │ │ └── old_MainActivity.kt
│ │ ├── old_AndroidManifest.xml
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ ├── launch_background.xml
│ │ │ ├── logo_v1.png
│ │ │ └── old_launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── logo_v1.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── logo_v1.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── logo_v1.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── logo_v1.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── logo_v1.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── f.md
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── open_qr_code_android.iml
└── settings.gradle
├── assets
├── icons
│ ├── fb_64px.png
│ ├── git_64px.png
│ ├── ig_64px.png
│ ├── in_64px.png
│ ├── x_64px.png
│ └── yt_64px.png
└── images
│ ├── logo.webp
│ ├── logo1.png
│ ├── logo1.webp
│ ├── logo_v1.ico
│ └── logo_v1.png
├── downlaod
├── Open QR Code-v1.0.0.apk
└── OpenQRCode.zip
├── firebase.json
├── lib
├── app.dart
├── core
│ ├── providers
│ │ ├── qr_provider.dart
│ │ └── theme_provider.dart
│ └── themes
│ │ ├── dark_theme.dart
│ │ └── light_theme.dart
├── main.dart
├── presentation
│ └── screens
│ │ ├── home
│ │ ├── home_screen.dart
│ │ └── old_home_screen.dart
│ │ ├── qr_generator
│ │ ├── old_qr_generator_screen.dart
│ │ ├── qr_generator_screen.dart
│ │ ├── qr_generator_screen_mobile.dart
│ │ └── qr_generator_screen_web.dart
│ │ ├── qr_scanner
│ │ └── qr_scanner_screen.dart
│ │ └── settings
│ │ ├── old_settings_screen.dart
│ │ └── settings_screen.dart
└── services
│ ├── history_service.dart
│ └── qr_service.dart
├── open_qr_code.iml
├── pubspec.lock
├── pubspec.yaml
├── screenshots
├── android
│ ├── 1.jpg
│ ├── 10.jpg
│ ├── 11.jpg
│ ├── 12.jpg
│ ├── 13.jpg
│ ├── 14.jpg
│ ├── 15.jpg
│ ├── 17.jpg
│ ├── 18.jpg
│ ├── 19.jpg
│ ├── 2.jpg
│ ├── 20.jpg
│ ├── 21.jpg
│ ├── 22.jpg
│ ├── 23.jpg
│ ├── 24.jpg
│ ├── 25.jpg
│ ├── 26.jpg
│ ├── 3.jpg
│ ├── 4.jpg
│ ├── 5.jpg
│ ├── 6.jpg
│ ├── 7.jpg
│ ├── 8.jpg
│ ├── 9.jpg
│ ├── openlabx QR Code.png
│ └── qr_code_1725352250881.png
├── logo_v1.png
├── multiview.png
├── multiview2.png
├── openlabx QR Code.png
└── win
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.png
│ ├── 7.png
│ └── 8.png
├── test
└── f.md
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
├── index.html
└── manifest.json
└── windows
├── CMakeLists.txt
├── f.md
├── flutter
├── CMakeLists.txt
├── ephemeral
│ ├── cpp_client_wrapper
│ │ ├── binary_messenger_impl.h
│ │ ├── byte_buffer_streams.h
│ │ ├── core_implementations.cc
│ │ ├── engine_method_result.cc
│ │ ├── flutter_engine.cc
│ │ ├── flutter_view_controller.cc
│ │ ├── include
│ │ │ └── flutter
│ │ │ │ ├── basic_message_channel.h
│ │ │ │ ├── binary_messenger.h
│ │ │ │ ├── byte_streams.h
│ │ │ │ ├── dart_project.h
│ │ │ │ ├── encodable_value.h
│ │ │ │ ├── engine_method_result.h
│ │ │ │ ├── event_channel.h
│ │ │ │ ├── event_sink.h
│ │ │ │ ├── event_stream_handler.h
│ │ │ │ ├── event_stream_handler_functions.h
│ │ │ │ ├── flutter_engine.h
│ │ │ │ ├── flutter_view.h
│ │ │ │ ├── flutter_view_controller.h
│ │ │ │ ├── message_codec.h
│ │ │ │ ├── method_call.h
│ │ │ │ ├── method_channel.h
│ │ │ │ ├── method_codec.h
│ │ │ │ ├── method_result.h
│ │ │ │ ├── method_result_functions.h
│ │ │ │ ├── plugin_registrar.h
│ │ │ │ ├── plugin_registrar_windows.h
│ │ │ │ ├── plugin_registry.h
│ │ │ │ ├── standard_codec_serializer.h
│ │ │ │ ├── standard_message_codec.h
│ │ │ │ ├── standard_method_codec.h
│ │ │ │ └── texture_registrar.h
│ │ ├── plugin_registrar.cc
│ │ ├── readme
│ │ ├── standard_codec.cc
│ │ └── texture_registrar_impl.h
│ ├── f.md
│ ├── flutter_export.h
│ ├── flutter_messenger.h
│ ├── flutter_plugin_registrar.h
│ ├── flutter_texture_registrar.h
│ ├── flutter_windows.dll
│ ├── flutter_windows.dll.exp
│ └── flutter_windows.dll.lib
├── f.md
├── generated_plugin_registrant.cc
├── generated_plugin_registrant.h
└── generated_plugins.cmake
└── runner
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── old_CMakeLists.txt
├── old_Runner.rc
├── old_main.cpp
├── resource.h
├── resources
├── app_icon.ico
└── logo_v1.ico
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 OpenLabX
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id "com.android.application"
3 | id "kotlin-android"
4 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
5 | id "dev.flutter.flutter-gradle-plugin"
6 | }
7 |
8 | android {
9 | namespace = "com.openlabx.open_qr_code"
10 | compileSdk = flutter.compileSdkVersion
11 | ndkVersion = flutter.ndkVersion
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_1_8
15 | targetCompatibility = JavaVersion.VERSION_1_8
16 | }
17 |
18 | kotlinOptions {
19 | jvmTarget = "1.8"
20 | }
21 |
22 | defaultConfig {
23 | applicationId = "com.openlabx.open_qr_code"
24 | minSdk = flutter.minSdkVersion
25 | targetSdk = flutter.targetSdkVersion
26 | versionCode = flutter.versionCode
27 | versionName = flutter.versionName
28 | }
29 |
30 | buildTypes {
31 | release {
32 | // Add your signing config for the release build.
33 | signingConfig = signingConfigs.debug
34 | minifyEnabled false
35 | shrinkResources false
36 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
37 |
38 | // Rename the APK file to "Open QR Code-v{versionName}.apk"
39 | applicationVariants.all { variant ->
40 | variant.outputs.all {
41 | def appName = "Open QR Code"
42 | def versionName = variant.versionName
43 | outputFileName = "${appName}-v${versionName}.apk"
44 | }
45 | }
46 | }
47 | }
48 | }
49 |
50 | flutter {
51 | source = "../.."
52 | }
53 |
--------------------------------------------------------------------------------
/android/app/old_build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id "com.android.application"
3 | id "kotlin-android"
4 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
5 | id "dev.flutter.flutter-gradle-plugin"
6 | }
7 |
8 | android {
9 | namespace = "com.example.open_qr_code"
10 | compileSdk = flutter.compileSdkVersion
11 | ndkVersion = flutter.ndkVersion
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_1_8
15 | targetCompatibility = JavaVersion.VERSION_1_8
16 | }
17 |
18 | kotlinOptions {
19 | jvmTarget = JavaVersion.VERSION_1_8
20 | }
21 |
22 | defaultConfig {
23 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
24 | applicationId = "com.openlabx.open_qr_code"
25 | // You can update the following values to match your application needs.
26 | // For more information, see: https://flutter.dev/to/review-gradle-config.
27 | minSdk = flutter.minSdkVersion
28 | targetSdk = flutter.targetSdkVersion
29 | versionCode = flutter.versionCode
30 | versionName = flutter.versionName
31 | }
32 |
33 | buildTypes {
34 | release {
35 | // TODO: Add your own signing config for the release build.
36 | // Signing with the debug keys for now, so `flutter run --release` works.
37 | signingConfig = signingConfigs.debug
38 | }
39 | }
40 | }
41 |
42 | flutter {
43 | source = "../.."
44 | }
45 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
15 |
16 |
25 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java:
--------------------------------------------------------------------------------
1 | package io.flutter.plugins;
2 |
3 | import androidx.annotation.Keep;
4 | import androidx.annotation.NonNull;
5 | import io.flutter.Log;
6 |
7 | import io.flutter.embedding.engine.FlutterEngine;
8 |
9 | /**
10 | * Generated file. Do not edit.
11 | * This file is generated by the Flutter tool based on the
12 | * plugins that support the Android platform.
13 | */
14 | @Keep
15 | public final class GeneratedPluginRegistrant {
16 | private static final String TAG = "GeneratedPluginRegistrant";
17 | public static void registerWith(@NonNull FlutterEngine flutterEngine) {
18 | try {
19 | flutterEngine.getPlugins().add(new io.flutter.plugins.camerax.CameraAndroidCameraxPlugin());
20 | } catch (Exception e) {
21 | Log.e(TAG, "Error registering plugin camera_android_camerax, io.flutter.plugins.camerax.CameraAndroidCameraxPlugin", e);
22 | }
23 | try {
24 | flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin());
25 | } catch (Exception e) {
26 | Log.e(TAG, "Error registering plugin firebase_core, io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin", e);
27 | }
28 | try {
29 | flutterEngine.getPlugins().add(new io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin());
30 | } catch (Exception e) {
31 | Log.e(TAG, "Error registering plugin flutter_plugin_android_lifecycle, io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin", e);
32 | }
33 | try {
34 | flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin());
35 | } catch (Exception e) {
36 | Log.e(TAG, "Error registering plugin package_info_plus, dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin", e);
37 | }
38 | try {
39 | flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
40 | } catch (Exception e) {
41 | Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e);
42 | }
43 | try {
44 | flutterEngine.getPlugins().add(new net.touchcapture.qr.flutterqr.FlutterQrPlugin());
45 | } catch (Exception e) {
46 | Log.e(TAG, "Error registering plugin qr_code_scanner, net.touchcapture.qr.flutterqr.FlutterQrPlugin", e);
47 | }
48 | try {
49 | flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.share.SharePlusPlugin());
50 | } catch (Exception e) {
51 | Log.e(TAG, "Error registering plugin share_plus, dev.fluttercommunity.plus.share.SharePlusPlugin", e);
52 | }
53 | try {
54 | flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin());
55 | } catch (Exception e) {
56 | Log.e(TAG, "Error registering plugin shared_preferences_android, io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin", e);
57 | }
58 | try {
59 | flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin());
60 | } catch (Exception e) {
61 | Log.e(TAG, "Error registering plugin url_launcher_android, io.flutter.plugins.urllauncher.UrlLauncherPlugin", e);
62 | }
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/openlabx/open_qr_code/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.openlabx.open_qr_code
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/openlabx/open_qr_code/old_MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.open_qr_code
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity()
6 |
--------------------------------------------------------------------------------
/android/app/src/main/old_AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
16 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
31 |
34 |
35 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/logo_v1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/drawable/logo_v1.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/old_launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/logo_v1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-hdpi/logo_v1.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/logo_v1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-mdpi/logo_v1.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/logo_v1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-xhdpi/logo_v1.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/logo_v1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-xxhdpi/logo_v1.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/logo_v1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/app/src/main/res/mipmap-xxxhdpi/logo_v1.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | allprojects {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | }
6 | }
7 |
8 | rootProject.buildDir = "../build"
9 | subprojects {
10 | project.buildDir = "${rootProject.buildDir}/${project.name}"
11 | }
12 | subprojects {
13 | project.evaluationDependsOn(":app")
14 | }
15 |
16 | tasks.register("clean", Delete) {
17 | delete rootProject.buildDir
18 | }
19 |
--------------------------------------------------------------------------------
/android/f.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip
6 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/android/local.properties:
--------------------------------------------------------------------------------
1 | sdk.dir=C:\\Users\\demo\\AppData\\Local\\Android\\sdk
2 | flutter.sdk=C:\\src\\flutter
3 | flutter.buildMode=release
4 | flutter.versionName=1.0.0
5 | flutter.versionCode=1
--------------------------------------------------------------------------------
/android/open_qr_code_android.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def flutterSdkPath = {
3 | def properties = new Properties()
4 | file("local.properties").withInputStream { properties.load(it) }
5 | def flutterSdkPath = properties.getProperty("flutter.sdk")
6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
7 | return flutterSdkPath
8 | }()
9 |
10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
11 |
12 | repositories {
13 | google()
14 | mavenCentral()
15 | gradlePluginPortal()
16 | }
17 | }
18 |
19 | plugins {
20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
21 | id "com.android.application" version "7.3.0" apply false
22 | id "org.jetbrains.kotlin.android" version "1.7.10" apply false
23 | }
24 |
25 | include ":app"
26 |
--------------------------------------------------------------------------------
/assets/icons/fb_64px.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/icons/fb_64px.png
--------------------------------------------------------------------------------
/assets/icons/git_64px.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/icons/git_64px.png
--------------------------------------------------------------------------------
/assets/icons/ig_64px.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/icons/ig_64px.png
--------------------------------------------------------------------------------
/assets/icons/in_64px.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/icons/in_64px.png
--------------------------------------------------------------------------------
/assets/icons/x_64px.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/icons/x_64px.png
--------------------------------------------------------------------------------
/assets/icons/yt_64px.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/icons/yt_64px.png
--------------------------------------------------------------------------------
/assets/images/logo.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/images/logo.webp
--------------------------------------------------------------------------------
/assets/images/logo1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/images/logo1.png
--------------------------------------------------------------------------------
/assets/images/logo1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/images/logo1.webp
--------------------------------------------------------------------------------
/assets/images/logo_v1.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/images/logo_v1.ico
--------------------------------------------------------------------------------
/assets/images/logo_v1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/assets/images/logo_v1.png
--------------------------------------------------------------------------------
/downlaod/Open QR Code-v1.0.0.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/downlaod/Open QR Code-v1.0.0.apk
--------------------------------------------------------------------------------
/downlaod/OpenQRCode.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/downlaod/OpenQRCode.zip
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": {
3 | "public": "build/web",
4 | "ignore": [
5 | "firebase.json",
6 | "**/.*",
7 | "**/node_modules/**"
8 | ]
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/lib/app.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 | import 'presentation/screens/home/home_screen.dart';
4 | import 'core/themes/light_theme.dart';
5 | import 'core/themes/dark_theme.dart';
6 | import 'core/providers/theme_provider.dart';
7 |
8 | class MyApp extends StatelessWidget {
9 | @override
10 | Widget build(BuildContext context) {
11 | return Consumer(
12 | builder: (context, themeProvider, child) {
13 | return MaterialApp(
14 | title: 'Open QR Code',
15 | theme: lightTheme,
16 | darkTheme: darkTheme,
17 | themeMode: themeProvider.themeMode,
18 | home: HomeScreen(),
19 | debugShowCheckedModeBanner: false, // Disable the debug banner
20 | );
21 | },
22 | );
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/lib/core/providers/qr_provider.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class QRProvider extends ChangeNotifier {
4 | String? _qrData;
5 |
6 | String? get qrData => _qrData;
7 |
8 | void setQRData(String data) {
9 | _qrData = data;
10 | notifyListeners();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/core/providers/theme_provider.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:shared_preferences/shared_preferences.dart';
3 |
4 | class ThemeProvider extends ChangeNotifier {
5 | ThemeMode _themeMode = ThemeMode.system;
6 |
7 | ThemeMode get themeMode => _themeMode;
8 |
9 | ThemeProvider() {
10 | _loadThemePreference();
11 | }
12 |
13 | void _loadThemePreference() async {
14 | final prefs = await SharedPreferences.getInstance();
15 | final themeMode = prefs.getString('themeMode');
16 |
17 | if (themeMode != null) {
18 | _themeMode = ThemeMode.values
19 | .firstWhere((element) => element.toString() == themeMode);
20 | }
21 | notifyListeners();
22 | }
23 |
24 | void setTheme(ThemeMode mode) async {
25 | _themeMode = mode;
26 | notifyListeners();
27 |
28 | final prefs = await SharedPreferences.getInstance();
29 | await prefs.setString('themeMode', mode.toString());
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/lib/core/themes/dark_theme.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | final ThemeData darkTheme = ThemeData(
4 | primarySwatch: Colors.blue,
5 | brightness: Brightness.dark,
6 | visualDensity: VisualDensity.adaptivePlatformDensity,
7 | );
8 |
--------------------------------------------------------------------------------
/lib/core/themes/light_theme.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | final ThemeData lightTheme = ThemeData(
4 | primarySwatch: Colors.blue,
5 | brightness: Brightness.light,
6 | visualDensity: VisualDensity.adaptivePlatformDensity,
7 | );
8 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 | import 'app.dart';
4 | import 'core/providers/theme_provider.dart';
5 | import 'package:firebase_core/firebase_core.dart';
6 |
7 | void main() {
8 | runApp(
9 | MultiProvider(
10 | providers: [
11 | ChangeNotifierProvider(create: (_) => ThemeProvider()),
12 | ],
13 | child: MyApp(),
14 | ),
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/lib/presentation/screens/home/home_screen.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../qr_generator/qr_generator_screen.dart';
3 | import '../qr_scanner/qr_scanner_screen.dart';
4 | import '../settings/settings_screen.dart';
5 |
6 | class HomeScreen extends StatelessWidget {
7 | @override
8 | Widget build(BuildContext context) {
9 | return Scaffold(
10 | appBar: AppBar(
11 | title: Text('Open QR Code'),
12 | actions: [
13 | IconButton(
14 | icon: Icon(Icons.settings),
15 | onPressed: () {
16 | Navigator.of(context).push(
17 | MaterialPageRoute(builder: (context) => SettingsScreen()),
18 | );
19 | },
20 | ),
21 | ],
22 | ),
23 | body: Column(
24 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
25 | children: [
26 | Expanded(
27 | child: Center(
28 | child: Column(
29 | mainAxisAlignment: MainAxisAlignment.center,
30 | children: [
31 | // Logo Image
32 | Image.asset(
33 | 'assets/images/logo_v1.png',
34 | height: 360, // Adjust height as needed
35 | ),
36 | SizedBox(height: 20),
37 | Text(
38 | 'Welcome to Open QR Code',
39 | style: Theme.of(context).textTheme.titleLarge,
40 | ),
41 | SizedBox(height: 40),
42 | ElevatedButton(
43 | onPressed: () {
44 | Navigator.of(context).push(
45 | MaterialPageRoute(
46 | builder: (context) => QRGeneratorScreen()),
47 | );
48 | },
49 | style: ElevatedButton.styleFrom(
50 | shape: RoundedRectangleBorder(
51 | borderRadius: BorderRadius.circular(8.0),
52 | ),
53 | padding:
54 | EdgeInsets.symmetric(horizontal: 60, vertical: 20),
55 | ),
56 | child: Text(
57 | 'Generate QR Code',
58 | style: TextStyle(fontSize: 18),
59 | ),
60 | ),
61 | SizedBox(height: 20),
62 | ElevatedButton(
63 | onPressed: () {
64 | Navigator.of(context).push(
65 | MaterialPageRoute(
66 | builder: (context) => QRScannerScreen()),
67 | );
68 | },
69 | style: ElevatedButton.styleFrom(
70 | shape: RoundedRectangleBorder(
71 | borderRadius: BorderRadius.circular(8.0),
72 | ),
73 | padding:
74 | EdgeInsets.symmetric(horizontal: 60, vertical: 20),
75 | ),
76 | child: Text(
77 | 'Scan QR Code',
78 | style: TextStyle(fontSize: 18),
79 | ),
80 | ),
81 | ],
82 | ),
83 | ),
84 | ),
85 | Padding(
86 | padding: const EdgeInsets.all(8.0),
87 | child: Column(
88 | children: [
89 | Text(
90 | 'Made with 🧡 and developed by OpenLabX',
91 | style: TextStyle(
92 | fontSize: 16,
93 | fontWeight: FontWeight.w400,
94 | ),
95 | ),
96 | Text(
97 | '© 2024 OpenLabX',
98 | style: TextStyle(
99 | fontSize: 14,
100 | fontWeight: FontWeight.w300,
101 | ),
102 | ),
103 | ],
104 | ),
105 | ),
106 | ],
107 | ),
108 | );
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/lib/presentation/screens/home/old_home_screen.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../qr_generator/qr_generator_screen.dart';
3 | import '../qr_scanner/qr_scanner_screen.dart';
4 | import '../settings/settings_screen.dart';
5 |
6 | class HomeScreen extends StatelessWidget {
7 | @override
8 | Widget build(BuildContext context) {
9 | return Scaffold(
10 | appBar: AppBar(
11 | title: Text('Open QR Code'),
12 | actions: [
13 | IconButton(
14 | icon: Icon(Icons.settings),
15 | onPressed: () {
16 | Navigator.of(context).push(
17 | MaterialPageRoute(builder: (context) => SettingsScreen()),
18 | );
19 | },
20 | ),
21 | ],
22 | ),
23 | body: Column(
24 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
25 | children: [
26 | Expanded(
27 | child: Center(
28 | child: Column(
29 | mainAxisAlignment: MainAxisAlignment.center,
30 | children: [
31 | // Logo Image
32 | Image.asset(
33 | 'assets/images/logo_v1.png',
34 | height: 360, // Adjust height as needed
35 | ),
36 | SizedBox(height: 20),
37 | Text(
38 | 'Welcome to Open QR Code',
39 | style: Theme.of(context).textTheme.titleLarge,
40 | ),
41 | SizedBox(height: 40),
42 | ElevatedButton(
43 | onPressed: () {
44 | Navigator.of(context).push(
45 | MaterialPageRoute(
46 | builder: (context) => QRGeneratorScreen()),
47 | );
48 | },
49 | style: ElevatedButton.styleFrom(
50 | shape: RoundedRectangleBorder(
51 | borderRadius: BorderRadius.circular(8.0),
52 | ),
53 | padding:
54 | EdgeInsets.symmetric(horizontal: 60, vertical: 20),
55 | ),
56 | child: Text(
57 | 'Generate QR Code',
58 | style: TextStyle(fontSize: 18),
59 | ),
60 | ),
61 | SizedBox(height: 20),
62 | ElevatedButton(
63 | onPressed: () {
64 | Navigator.of(context).push(
65 | MaterialPageRoute(
66 | builder: (context) => QRScannerScreen()),
67 | );
68 | },
69 | style: ElevatedButton.styleFrom(
70 | shape: RoundedRectangleBorder(
71 | borderRadius: BorderRadius.circular(8.0),
72 | ),
73 | padding:
74 | EdgeInsets.symmetric(horizontal: 60, vertical: 20),
75 | ),
76 | child: Text(
77 | 'Scan QR Code',
78 | style: TextStyle(fontSize: 18),
79 | ),
80 | ),
81 | ],
82 | ),
83 | ),
84 | ),
85 | Padding(
86 | padding: const EdgeInsets.all(8.0),
87 | child: Column(
88 | children: [
89 | Text(
90 | 'Made with 🧡 and developed by OpenLabX',
91 | style: TextStyle(
92 | fontSize: 16,
93 | fontWeight: FontWeight.w400,
94 | ),
95 | ),
96 | Text(
97 | '© 2024 OpenLabX',
98 | style: TextStyle(
99 | fontSize: 14,
100 | fontWeight: FontWeight.w300,
101 | ),
102 | ),
103 | ],
104 | ),
105 | ),
106 | ],
107 | ),
108 | );
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/lib/presentation/screens/qr_generator/qr_generator_screen.dart:
--------------------------------------------------------------------------------
1 | // qr_generator_screen.dart
2 |
3 | export 'qr_generator_screen_mobile.dart'
4 | if (dart.library.html) 'qr_generator_screen_web.dart';
5 |
--------------------------------------------------------------------------------
/lib/presentation/screens/qr_generator/qr_generator_screen_mobile.dart:
--------------------------------------------------------------------------------
1 | import 'dart:typed_data';
2 | import 'package:flutter/material.dart';
3 | import 'package:qr_flutter/qr_flutter.dart';
4 | import 'package:path_provider/path_provider.dart';
5 | import 'package:share_plus/share_plus.dart';
6 | import 'package:screenshot/screenshot.dart';
7 | import 'dart:io' as io;
8 |
9 | class QRGeneratorScreen extends StatefulWidget {
10 | @override
11 | _QRGeneratorScreenState createState() => _QRGeneratorScreenState();
12 | }
13 |
14 | class _QRGeneratorScreenState extends State {
15 | final TextEditingController _controller = TextEditingController();
16 | final ScreenshotController _screenshotController = ScreenshotController();
17 | String _inputData = '';
18 |
19 | Future _saveQRCode() async {
20 | try {
21 | // Get the external storage directory
22 | final directory = await getExternalStorageDirectory();
23 |
24 | // Define the path to the Pictures directory
25 | final path = '/storage/emulated/0/Pictures/QR_Codes';
26 |
27 | // Ensure the directory exists
28 | await io.Directory(path).create(recursive: true);
29 |
30 | // Save the screenshot to the specified directory
31 | final imagePath = await _screenshotController.captureAndSave(path,
32 | fileName: 'qr_code_${DateTime.now().millisecondsSinceEpoch}.png');
33 |
34 | ScaffoldMessenger.of(context).showSnackBar(
35 | SnackBar(content: Text('QR Code saved to $imagePath')),
36 | );
37 |
38 | // Optionally, refresh the gallery so the image appears immediately
39 | await io.File(imagePath!).create();
40 | } catch (e) {
41 | print('Error saving QR code: $e');
42 | ScaffoldMessenger.of(context).showSnackBar(
43 | SnackBar(content: Text('Failed to save QR code.')),
44 | );
45 | }
46 | }
47 |
48 | Future _shareQRCode() async {
49 | try {
50 | final directory = await getApplicationDocumentsDirectory();
51 | final imagePath = await _screenshotController
52 | .captureAndSave(directory.path, fileName: 'qr_code.png');
53 | if (imagePath != null) {
54 | final file = io.File(imagePath);
55 | await Share.shareXFiles([XFile(file.path)],
56 | text: 'Here is your QR code!');
57 | } else {
58 | ScaffoldMessenger.of(context).showSnackBar(
59 | SnackBar(content: Text('Failed to capture QR code image.')),
60 | );
61 | }
62 | } catch (e) {
63 | print('Error sharing QR code: $e');
64 | ScaffoldMessenger.of(context).showSnackBar(
65 | SnackBar(content: Text('Failed to share QR code.')),
66 | );
67 | }
68 | }
69 |
70 | @override
71 | Widget build(BuildContext context) {
72 | return Scaffold(
73 | appBar: AppBar(
74 | title: Text('Generate QR Code'),
75 | ),
76 | body: Padding(
77 | padding: const EdgeInsets.all(16.0),
78 | child: Column(
79 | children: [
80 | TextField(
81 | controller: _controller,
82 | decoration: InputDecoration(
83 | labelText: 'Enter data for QR Code',
84 | border: OutlineInputBorder(),
85 | ),
86 | onChanged: (value) {
87 | setState(() {
88 | _inputData = value;
89 | });
90 | },
91 | ),
92 | SizedBox(height: 20),
93 | _inputData.isEmpty
94 | ? Container()
95 | : Screenshot(
96 | controller: _screenshotController,
97 | child: Container(
98 | color: Colors.white,
99 | padding: const EdgeInsets.all(20.0),
100 | child: QrImageView(
101 | data: _inputData,
102 | version: QrVersions.auto,
103 | size: 200.0,
104 | backgroundColor: Colors.white,
105 | ),
106 | ),
107 | ),
108 | SizedBox(height: 20),
109 | Row(
110 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
111 | children: [
112 | ElevatedButton(
113 | onPressed: () {
114 | if (_inputData.isNotEmpty) {
115 | _saveQRCode();
116 | }
117 | },
118 | child: Text('Save'),
119 | ),
120 | ElevatedButton(
121 | onPressed: () {
122 | if (_inputData.isNotEmpty) {
123 | _shareQRCode();
124 | }
125 | },
126 | child: Text('Share'),
127 | ),
128 | ],
129 | ),
130 | ],
131 | ),
132 | ),
133 | );
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/lib/presentation/screens/qr_generator/qr_generator_screen_web.dart:
--------------------------------------------------------------------------------
1 | // qr_generator_screen_web.dart
2 |
3 | import 'dart:typed_data';
4 | import 'package:flutter/material.dart';
5 | import 'package:qr_flutter/qr_flutter.dart';
6 | import 'package:screenshot/screenshot.dart';
7 | import 'dart:html' as html;
8 |
9 | class QRGeneratorScreen extends StatefulWidget {
10 | @override
11 | _QRGeneratorScreenState createState() => _QRGeneratorScreenState();
12 | }
13 |
14 | class _QRGeneratorScreenState extends State {
15 | final TextEditingController _controller = TextEditingController();
16 | final ScreenshotController _screenshotController = ScreenshotController();
17 | String _inputData = '';
18 |
19 | Future _saveQRCode() async {
20 | Uint8List? capturedImage = await _screenshotController.capture();
21 | if (capturedImage != null) {
22 | final blob = html.Blob([capturedImage]);
23 | final url = html.Url.createObjectUrlFromBlob(blob);
24 | final anchor = html.AnchorElement(href: url)
25 | ..setAttribute('download', 'qr_code.png')
26 | ..click();
27 | html.Url.revokeObjectUrl(url);
28 | } else {
29 | ScaffoldMessenger.of(context).showSnackBar(
30 | SnackBar(content: Text('Failed to capture QR code image.')),
31 | );
32 | }
33 | }
34 |
35 | Future _shareQRCode() async {
36 | Uint8List? capturedImage = await _screenshotController.capture();
37 | if (capturedImage != null) {
38 | final blob = html.Blob([capturedImage]);
39 | final url = html.Url.createObjectUrlFromBlob(blob);
40 | final anchor = html.AnchorElement(href: url)
41 | ..setAttribute('download', 'qr_code.png')
42 | ..click();
43 | html.Url.revokeObjectUrl(url);
44 | } else {
45 | ScaffoldMessenger.of(context).showSnackBar(
46 | SnackBar(content: Text('Failed to capture QR code image.')),
47 | );
48 | }
49 | }
50 |
51 | @override
52 | Widget build(BuildContext context) {
53 | return Scaffold(
54 | appBar: AppBar(
55 | title: Text('Generate QR Code'),
56 | ),
57 | body: Padding(
58 | padding: const EdgeInsets.all(16.0),
59 | child: Column(
60 | children: [
61 | TextField(
62 | controller: _controller,
63 | decoration: InputDecoration(
64 | labelText: 'Enter data for QR Code',
65 | border: OutlineInputBorder(),
66 | ),
67 | onChanged: (value) {
68 | setState(() {
69 | _inputData = value;
70 | });
71 | },
72 | ),
73 | SizedBox(height: 20),
74 | _inputData.isEmpty
75 | ? Container()
76 | : Screenshot(
77 | controller: _screenshotController,
78 | child: Container(
79 | color: Colors.white,
80 | padding: const EdgeInsets.all(20.0),
81 | child: QrImageView(
82 | data: _inputData,
83 | version: QrVersions.auto,
84 | size: 200.0,
85 | backgroundColor: Colors.white,
86 | ),
87 | ),
88 | ),
89 | SizedBox(height: 20),
90 | Row(
91 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
92 | children: [
93 | ElevatedButton(
94 | onPressed: () {
95 | if (_inputData.isNotEmpty) {
96 | _saveQRCode();
97 | }
98 | },
99 | child: Text('Save'),
100 | ),
101 | ElevatedButton(
102 | onPressed: () {
103 | if (_inputData.isNotEmpty) {
104 | _shareQRCode();
105 | }
106 | },
107 | child: Text('Share'),
108 | ),
109 | ],
110 | ),
111 | ],
112 | ),
113 | ),
114 | );
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/lib/presentation/screens/qr_scanner/qr_scanner_screen.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:qr_code_scanner/qr_code_scanner.dart';
3 | import 'package:url_launcher/url_launcher.dart';
4 | import 'package:share_plus/share_plus.dart';
5 |
6 | class QRScannerScreen extends StatefulWidget {
7 | @override
8 | _QRScannerScreenState createState() => _QRScannerScreenState();
9 | }
10 |
11 | class _QRScannerScreenState extends State
12 | with SingleTickerProviderStateMixin {
13 | final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
14 | QRViewController? controller;
15 | String? scannedData;
16 | bool isScanning = true;
17 | late AnimationController _animationController;
18 |
19 | @override
20 | void initState() {
21 | super.initState();
22 | _animationController = AnimationController(
23 | duration: const Duration(seconds: 2),
24 | vsync: this,
25 | )..repeat(reverse: true);
26 | }
27 |
28 | @override
29 | void dispose() {
30 | controller?.dispose();
31 | _animationController.dispose();
32 | super.dispose();
33 | }
34 |
35 | void _handleScannedData(String data) async {
36 | if (!isScanning) return;
37 | setState(() {
38 | isScanning = false;
39 | });
40 | await controller?.pauseCamera();
41 |
42 | showModalBottomSheet(
43 | context: context,
44 | builder: (context) {
45 | return Container(
46 | padding: EdgeInsets.all(16.0),
47 | child: Column(
48 | mainAxisSize: MainAxisSize.min,
49 | children: [
50 | Text('Scanned Data',
51 | style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
52 | SizedBox(height: 10),
53 | Text(data, style: TextStyle(fontSize: 16)),
54 | SizedBox(height: 20),
55 | ElevatedButton.icon(
56 | icon: Icon(Icons.open_in_browser),
57 | label: Text('Open in Browser'),
58 | onPressed: () async {
59 | _launchURL(context, data);
60 | Navigator.pop(context);
61 | await controller?.resumeCamera();
62 | setState(() {
63 | isScanning = true;
64 | });
65 | },
66 | ),
67 | ElevatedButton.icon(
68 | icon: Icon(Icons.share),
69 | label: Text('Share'),
70 | onPressed: () {
71 | Share.share(data);
72 | Navigator.pop(context);
73 | setState(() {
74 | isScanning = true;
75 | });
76 | },
77 | ),
78 | ],
79 | ),
80 | );
81 | },
82 | );
83 | }
84 |
85 | void _launchURL(BuildContext context, String url) async {
86 | if (Uri.tryParse(url)?.hasAbsolutePath ?? false) {
87 | if (await canLaunch(url)) {
88 | await launch(url);
89 | } else {
90 | _showErrorDialog(context, 'Cannot launch this URL');
91 | }
92 | } else {
93 | _showErrorDialog(context, 'Invalid URL format');
94 | }
95 | }
96 |
97 | void _showErrorDialog(BuildContext context, String message) {
98 | showDialog(
99 | context: context,
100 | builder: (context) => AlertDialog(
101 | title: Text('Error'),
102 | content: Text(message),
103 | actions: [
104 | TextButton(
105 | onPressed: () => Navigator.of(context).pop(),
106 | child: Text('OK'),
107 | ),
108 | ],
109 | ),
110 | );
111 | }
112 |
113 | @override
114 | Widget build(BuildContext context) {
115 | return Scaffold(
116 | appBar: AppBar(
117 | title: Text('Scan QR Code'),
118 | ),
119 | body: Stack(
120 | children: [
121 | QRView(
122 | key: qrKey,
123 | onQRViewCreated: _onQRViewCreated,
124 | overlay: QrScannerOverlayShape(
125 | borderColor: Colors.red,
126 | borderRadius: 10,
127 | borderLength: 30,
128 | borderWidth: 10,
129 | cutOutSize: 300,
130 | ),
131 | ),
132 | Center(
133 | child: AnimatedBuilder(
134 | animation: _animationController,
135 | builder: (context, child) {
136 | return Transform.translate(
137 | offset: Offset(0, _animationController.value * 300 - 150),
138 | child: Container(
139 | width: 300,
140 | height: 2,
141 | color: Colors.red,
142 | ),
143 | );
144 | },
145 | ),
146 | ),
147 | ],
148 | ),
149 | );
150 | }
151 |
152 | void _onQRViewCreated(QRViewController controller) {
153 | this.controller = controller;
154 | controller.scannedDataStream.listen((scanData) {
155 | if (scanData.code != null && isScanning) {
156 | _handleScannedData(scanData.code!);
157 | }
158 | });
159 | }
160 | }
161 |
--------------------------------------------------------------------------------
/lib/services/history_service.dart:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/lib/services/history_service.dart
--------------------------------------------------------------------------------
/lib/services/qr_service.dart:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/lib/services/qr_service.dart
--------------------------------------------------------------------------------
/open_qr_code.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: open_qr_code
2 | description: "A new Flutter project."
3 | # The following line prevents the package from being accidentally published to
4 | # pub.dev using `flutter pub publish`. This is preferred for private packages.
5 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev
6 |
7 | # The following defines the version and build number for your application.
8 | # A version number is three numbers separated by dots, like 1.2.43
9 | # followed by an optional build number separated by a +.
10 | # Both the version and the builder number may be overridden in flutter
11 | # build by specifying --build-name and --build-number, respectively.
12 | # In Android, build-name is used as versionName while build-number used as versionCode.
13 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
14 | # In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion.
15 | # Read more about iOS versioning at
16 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
17 | # In Windows, build-name is used as the major, minor, and patch parts
18 | # of the product and file versions while build-number is used as the build suffix.
19 | version: 1.0.0+1
20 |
21 | environment:
22 | sdk: ^3.5.0
23 |
24 | # Dependencies specify other packages that your package needs in order to work.
25 | # To automatically upgrade your package dependencies to the latest versions
26 | # consider running `flutter pub upgrade --major-versions`. Alternatively,
27 | # dependencies can be manually updated by changing the version numbers below to
28 | # the latest version available on pub.dev. To see which dependencies have newer
29 | # versions available, run `flutter pub outdated`.
30 | dependencies:
31 | flutter:
32 | sdk: flutter
33 | provider: ^6.0.0
34 | shared_preferences: ^2.0.13
35 | qr_flutter: ^4.1.0
36 | qr_code_scanner: ^1.0.1 # Update to the latest version
37 | camera: ^0.11.0+2 # Update to the latest version
38 |
39 | # Necessary dependencies for Save and Share Functionality
40 | path_provider: ^2.0.11
41 | share_plus: ^10.0.2
42 | screenshot: ^3.0.0
43 | url_launcher: ^6.0.20 # To open URLs in the browser
44 | package_info_plus: ^8.0.2
45 | flutter_launcher_icons: ^0.13.1
46 | firebase_core: ^2.24.2
47 |
48 |
49 | dev_dependencies:
50 | flutter_test:
51 | sdk: flutter
52 |
53 |
54 | flutter_icons:
55 | android: true
56 | ios: true
57 | image_path: "assets/images/logo_v1.png" # Replace with the correct path to your icon
58 | adaptive_icon_background: "assets/images/logo_v1.png" # Replace with the correct path
59 | adaptive_icon_foreground: "assets/images/logo_v1.png" # Replace with the correct path
60 |
61 |
62 | # The "flutter_lints" package below contains a set of recommended lints to
63 | # encourage good coding practices. The lint set provided by the package is
64 | # activated in the `analysis_options.yaml` file located at the root of your
65 | # package. See that file for information about deactivating specific lint
66 | # rules and activating additional ones.
67 | flutter_lints: ^4.0.0
68 |
69 | # For information on the generic Dart part of this file, see the
70 | # following page: https://dart.dev/tools/pub/pubspec
71 |
72 | # The following section is specific to Flutter packages.
73 | flutter:
74 | assets:
75 | - assets/images/logo_v1.png
76 | - assets/icons/ig_64px.png
77 | - assets/icons/x_64px.png
78 | - assets/icons/fb_64px.png
79 | - assets/icons/yt_64px.png
80 | - assets/icons/git_64px.png
81 | # The following line ensures that the Material Icons font is
82 | # included with your application, so that you can use the icons in
83 | # the material Icons class.
84 | uses-material-design: true
85 |
86 | # To add assets to your application, add an assets section, like this:
87 | # assets:
88 | # - images/a_dot_burr.jpeg
89 | # - images/a_dot_ham.jpeg
90 |
91 | # An image asset can refer to one or more resolution-specific "variants", see
92 | # https://flutter.dev/to/resolution-aware-images
93 |
94 | # For details regarding adding assets from package dependencies, see
95 | # https://flutter.dev/to/asset-from-package
96 |
97 | # To add custom fonts to your application, add a fonts section here,
98 | # in this "flutter" section. Each entry in this list should have a
99 | # "family" key with the font family name, and a "fonts" key with a
100 | # list giving the asset and other descriptors for the font. For
101 | # example:
102 | # fonts:
103 | # - family: Schyler
104 | # fonts:
105 | # - asset: fonts/Schyler-Regular.ttf
106 | # - asset: fonts/Schyler-Italic.ttf
107 | # style: italic
108 | # - family: Trajan Pro
109 | # fonts:
110 | # - asset: fonts/TrajanPro.ttf
111 | # - asset: fonts/TrajanPro_Bold.ttf
112 | # weight: 700
113 | #
114 | # For details regarding fonts from package dependencies,
115 | # see https://flutter.dev/to/font-from-package
116 |
117 |
--------------------------------------------------------------------------------
/screenshots/android/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/1.jpg
--------------------------------------------------------------------------------
/screenshots/android/10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/10.jpg
--------------------------------------------------------------------------------
/screenshots/android/11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/11.jpg
--------------------------------------------------------------------------------
/screenshots/android/12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/12.jpg
--------------------------------------------------------------------------------
/screenshots/android/13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/13.jpg
--------------------------------------------------------------------------------
/screenshots/android/14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/14.jpg
--------------------------------------------------------------------------------
/screenshots/android/15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/15.jpg
--------------------------------------------------------------------------------
/screenshots/android/17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/17.jpg
--------------------------------------------------------------------------------
/screenshots/android/18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/18.jpg
--------------------------------------------------------------------------------
/screenshots/android/19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/19.jpg
--------------------------------------------------------------------------------
/screenshots/android/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/2.jpg
--------------------------------------------------------------------------------
/screenshots/android/20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/20.jpg
--------------------------------------------------------------------------------
/screenshots/android/21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/21.jpg
--------------------------------------------------------------------------------
/screenshots/android/22.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/22.jpg
--------------------------------------------------------------------------------
/screenshots/android/23.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/23.jpg
--------------------------------------------------------------------------------
/screenshots/android/24.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/24.jpg
--------------------------------------------------------------------------------
/screenshots/android/25.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/25.jpg
--------------------------------------------------------------------------------
/screenshots/android/26.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/26.jpg
--------------------------------------------------------------------------------
/screenshots/android/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/3.jpg
--------------------------------------------------------------------------------
/screenshots/android/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/4.jpg
--------------------------------------------------------------------------------
/screenshots/android/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/5.jpg
--------------------------------------------------------------------------------
/screenshots/android/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/6.jpg
--------------------------------------------------------------------------------
/screenshots/android/7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/7.jpg
--------------------------------------------------------------------------------
/screenshots/android/8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/8.jpg
--------------------------------------------------------------------------------
/screenshots/android/9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/9.jpg
--------------------------------------------------------------------------------
/screenshots/android/openlabx QR Code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/openlabx QR Code.png
--------------------------------------------------------------------------------
/screenshots/android/qr_code_1725352250881.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/android/qr_code_1725352250881.png
--------------------------------------------------------------------------------
/screenshots/logo_v1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/logo_v1.png
--------------------------------------------------------------------------------
/screenshots/multiview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/multiview.png
--------------------------------------------------------------------------------
/screenshots/multiview2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/multiview2.png
--------------------------------------------------------------------------------
/screenshots/openlabx QR Code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/openlabx QR Code.png
--------------------------------------------------------------------------------
/screenshots/win/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/win/1.png
--------------------------------------------------------------------------------
/screenshots/win/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/win/2.png
--------------------------------------------------------------------------------
/screenshots/win/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/win/3.png
--------------------------------------------------------------------------------
/screenshots/win/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/win/4.png
--------------------------------------------------------------------------------
/screenshots/win/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/win/5.png
--------------------------------------------------------------------------------
/screenshots/win/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/win/6.png
--------------------------------------------------------------------------------
/screenshots/win/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/win/7.png
--------------------------------------------------------------------------------
/screenshots/win/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/screenshots/win/8.png
--------------------------------------------------------------------------------
/test/f.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/web/favicon.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openlab-x/OpenQRCode/e50bcf0e6caf8af12a1bab0d989a787f2b7e313b/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | Open QR Code
33 |
34 |
35 |
36 |
37 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "open_qr_code",
3 | "short_name": "open_qr_code",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
9 | "orientation": "portrait-primary",
10 | "prefer_related_applications": false,
11 | "icons": [
12 | {
13 | "src": "icons/Icon-192.png",
14 | "sizes": "192x192",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "icons/Icon-512.png",
19 | "sizes": "512x512",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "icons/Icon-maskable-192.png",
24 | "sizes": "192x192",
25 | "type": "image/png",
26 | "purpose": "maskable"
27 | },
28 | {
29 | "src": "icons/Icon-maskable-512.png",
30 | "sizes": "512x512",
31 | "type": "image/png",
32 | "purpose": "maskable"
33 | }
34 | ]
35 | }
36 |
--------------------------------------------------------------------------------
/windows/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # Project-level configuration.
2 | cmake_minimum_required(VERSION 3.14)
3 | project(open_qr_code LANGUAGES CXX)
4 |
5 | # The name of the executable created for the application. Change this to change
6 | # the on-disk name of your application.
7 | set(BINARY_NAME "OpenQRCode")
8 |
9 | # Explicitly opt in to modern CMake behaviors to avoid warnings with recent
10 | # versions of CMake.
11 | cmake_policy(VERSION 3.14...3.25)
12 |
13 | # Define build configuration option.
14 | get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
15 | if(IS_MULTICONFIG)
16 | set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release"
17 | CACHE STRING "" FORCE)
18 | else()
19 | if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
20 | set(CMAKE_BUILD_TYPE "Debug" CACHE
21 | STRING "Flutter build mode" FORCE)
22 | set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
23 | "Debug" "Profile" "Release")
24 | endif()
25 | endif()
26 | # Define settings for the Profile build mode.
27 | set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
28 | set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
29 | set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}")
30 | set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}")
31 |
32 | # Use Unicode for all projects.
33 | add_definitions(-DUNICODE -D_UNICODE)
34 |
35 | # Compilation settings that should be applied to most targets.
36 | #
37 | # Be cautious about adding new options here, as plugins use this function by
38 | # default. In most cases, you should add new options to specific targets instead
39 | # of modifying this function.
40 | function(APPLY_STANDARD_SETTINGS TARGET)
41 | target_compile_features(${TARGET} PUBLIC cxx_std_17)
42 | target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100")
43 | target_compile_options(${TARGET} PRIVATE /EHsc)
44 | target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0")
45 | target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>")
46 | endfunction()
47 |
48 | # Flutter library and tool build rules.
49 | set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
50 | add_subdirectory(${FLUTTER_MANAGED_DIR})
51 |
52 | # Application build; see runner/CMakeLists.txt.
53 | add_subdirectory("runner")
54 |
55 |
56 | # Generated plugin build rules, which manage building the plugins and adding
57 | # them to the application.
58 | include(flutter/generated_plugins.cmake)
59 |
60 |
61 | # === Installation ===
62 | # Support files are copied into place next to the executable, so that it can
63 | # run in place. This is done instead of making a separate bundle (as on Linux)
64 | # so that building and running from within Visual Studio will work.
65 | set(BUILD_BUNDLE_DIR "$")
66 | # Make the "install" step default, as it's required to run.
67 | set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
68 | if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
69 | set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
70 | endif()
71 |
72 | set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
73 | set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}")
74 |
75 | install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
76 | COMPONENT Runtime)
77 |
78 | install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
79 | COMPONENT Runtime)
80 |
81 | install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
82 | COMPONENT Runtime)
83 |
84 | if(PLUGIN_BUNDLED_LIBRARIES)
85 | install(FILES "${PLUGIN_BUNDLED_LIBRARIES}"
86 | DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
87 | COMPONENT Runtime)
88 | endif()
89 |
90 | # Copy the native assets provided by the build.dart from all packages.
91 | set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/")
92 | install(DIRECTORY "${NATIVE_ASSETS_DIR}"
93 | DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
94 | COMPONENT Runtime)
95 |
96 | # Fully re-copy the assets directory on each build to avoid having stale files
97 | # from a previous install.
98 | set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
99 | install(CODE "
100 | file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
101 | " COMPONENT Runtime)
102 | install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
103 | DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
104 |
105 | # Install the AOT library on non-Debug builds only.
106 | install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
107 | CONFIGURATIONS Profile;Release
108 | COMPONENT Runtime)
109 |
--------------------------------------------------------------------------------
/windows/f.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/windows/flutter/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # This file controls Flutter-level build steps. It should not be edited.
2 | cmake_minimum_required(VERSION 3.14)
3 |
4 | set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
5 |
6 | # Configuration provided via flutter tool.
7 | include(${EPHEMERAL_DIR}/generated_config.cmake)
8 |
9 | # TODO: Move the rest of this into files in ephemeral. See
10 | # https://github.com/flutter/flutter/issues/57146.
11 | set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
12 |
13 | # Set fallback configurations for older versions of the flutter tool.
14 | if (NOT DEFINED FLUTTER_TARGET_PLATFORM)
15 | set(FLUTTER_TARGET_PLATFORM "windows-x64")
16 | endif()
17 |
18 | # === Flutter Library ===
19 | set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
20 |
21 | # Published to parent scope for install step.
22 | set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
23 | set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
24 | set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
25 | set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE)
26 |
27 | list(APPEND FLUTTER_LIBRARY_HEADERS
28 | "flutter_export.h"
29 | "flutter_windows.h"
30 | "flutter_messenger.h"
31 | "flutter_plugin_registrar.h"
32 | "flutter_texture_registrar.h"
33 | )
34 | list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/")
35 | add_library(flutter INTERFACE)
36 | target_include_directories(flutter INTERFACE
37 | "${EPHEMERAL_DIR}"
38 | )
39 | target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib")
40 | add_dependencies(flutter flutter_assemble)
41 |
42 | # === Wrapper ===
43 | list(APPEND CPP_WRAPPER_SOURCES_CORE
44 | "core_implementations.cc"
45 | "standard_codec.cc"
46 | )
47 | list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/")
48 | list(APPEND CPP_WRAPPER_SOURCES_PLUGIN
49 | "plugin_registrar.cc"
50 | )
51 | list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/")
52 | list(APPEND CPP_WRAPPER_SOURCES_APP
53 | "flutter_engine.cc"
54 | "flutter_view_controller.cc"
55 | )
56 | list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/")
57 |
58 | # Wrapper sources needed for a plugin.
59 | add_library(flutter_wrapper_plugin STATIC
60 | ${CPP_WRAPPER_SOURCES_CORE}
61 | ${CPP_WRAPPER_SOURCES_PLUGIN}
62 | )
63 | apply_standard_settings(flutter_wrapper_plugin)
64 | set_target_properties(flutter_wrapper_plugin PROPERTIES
65 | POSITION_INDEPENDENT_CODE ON)
66 | set_target_properties(flutter_wrapper_plugin PROPERTIES
67 | CXX_VISIBILITY_PRESET hidden)
68 | target_link_libraries(flutter_wrapper_plugin PUBLIC flutter)
69 | target_include_directories(flutter_wrapper_plugin PUBLIC
70 | "${WRAPPER_ROOT}/include"
71 | )
72 | add_dependencies(flutter_wrapper_plugin flutter_assemble)
73 |
74 | # Wrapper sources needed for the runner.
75 | add_library(flutter_wrapper_app STATIC
76 | ${CPP_WRAPPER_SOURCES_CORE}
77 | ${CPP_WRAPPER_SOURCES_APP}
78 | )
79 | apply_standard_settings(flutter_wrapper_app)
80 | target_link_libraries(flutter_wrapper_app PUBLIC flutter)
81 | target_include_directories(flutter_wrapper_app PUBLIC
82 | "${WRAPPER_ROOT}/include"
83 | )
84 | add_dependencies(flutter_wrapper_app flutter_assemble)
85 |
86 | # === Flutter tool backend ===
87 | # _phony_ is a non-existent file to force this command to run every time,
88 | # since currently there's no way to get a full input/output list from the
89 | # flutter tool.
90 | set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_")
91 | set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE)
92 | add_custom_command(
93 | OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
94 | ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN}
95 | ${CPP_WRAPPER_SOURCES_APP}
96 | ${PHONY_OUTPUT}
97 | COMMAND ${CMAKE_COMMAND} -E env
98 | ${FLUTTER_TOOL_ENVIRONMENT}
99 | "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
100 | ${FLUTTER_TARGET_PLATFORM} $
101 | VERBATIM
102 | )
103 | add_custom_target(flutter_assemble DEPENDS
104 | "${FLUTTER_LIBRARY}"
105 | ${FLUTTER_LIBRARY_HEADERS}
106 | ${CPP_WRAPPER_SOURCES_CORE}
107 | ${CPP_WRAPPER_SOURCES_PLUGIN}
108 | ${CPP_WRAPPER_SOURCES_APP}
109 | )
110 |
--------------------------------------------------------------------------------
/windows/flutter/ephemeral/cpp_client_wrapper/binary_messenger_impl.h:
--------------------------------------------------------------------------------
1 | // Copyright 2013 The Flutter Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style license that can be
3 | // found in the LICENSE file.
4 |
5 | #ifndef FLUTTER_SHELL_PLATFORM_COMMON_CLIENT_WRAPPER_BINARY_MESSENGER_IMPL_H_
6 | #define FLUTTER_SHELL_PLATFORM_COMMON_CLIENT_WRAPPER_BINARY_MESSENGER_IMPL_H_
7 |
8 | #include
9 |
10 | #include