This commit is contained in:
hiddify-com
2024-05-31 23:01:00 +02:00
parent 0ba23400c1
commit 5a02c4b546
6 changed files with 45 additions and 56 deletions

View File

@@ -41,7 +41,8 @@ if (flutterVersionName == null) {
} }
android { android {
namespace "com.hiddify.hiddify" namespace 'com.hiddify.hiddify'
testNamespace "test.com.hiddify.hiddify"
compileSdkVersion 34 compileSdkVersion 34
ndkVersion "26.1.10909125" ndkVersion "26.1.10909125"

View File

@@ -16,3 +16,4 @@ subprojects {
tasks.register("clean", Delete) { tasks.register("clean", Delete) {
delete rootProject.buildDir delete rootProject.buildDir
} }

View File

@@ -18,8 +18,8 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.4.2" apply false id "com.android.application" version "8.0.0" apply false
id "org.jetbrains.kotlin.android" version "1.8.21" apply false id "org.jetbrains.kotlin.android" version "1.8.0" apply false
} }
include ":app" include ":app"

View File

@@ -1,15 +1,15 @@
import 'package:dartx/dartx.dart'; import 'package:dartx/dartx.dart';
import 'package:fluentui_system_icons/fluentui_system_icons.dart'; import 'package:fluentui_system_icons/fluentui_system_icons.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_easy_permission/easy_permissions.dart'; // import 'package:flutter_easy_permission/easy_permissions.dart';
import 'package:hiddify/core/localization/translations.dart'; import 'package:hiddify/core/localization/translations.dart';
import 'package:hiddify/utils/utils.dart'; import 'package:hiddify/utils/utils.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:mobile_scanner/mobile_scanner.dart'; import 'package:mobile_scanner/mobile_scanner.dart';
// import 'package:permission_handler/permission_handler.dart'; // import 'package:permission_handler/permission_handler.dart';
const permissions = [Permissions.CAMERA]; // const permissions = [Permissions.CAMERA];
const permissionGroup = [PermissionGroup.Camera]; // const permissionGroup = [PermissionGroup.Camera];
class QRCodeScannerScreen extends StatefulHookConsumerWidget { class QRCodeScannerScreen extends StatefulHookConsumerWidget {
const QRCodeScannerScreen({super.key}); const QRCodeScannerScreen({super.key});
@@ -24,62 +24,59 @@ class QRCodeScannerScreen extends StatefulHookConsumerWidget {
} }
@override @override
ConsumerState<QRCodeScannerScreen> createState() => ConsumerState<QRCodeScannerScreen> createState() => _QRCodeScannerScreenState();
_QRCodeScannerScreenState();
} }
class _QRCodeScannerScreenState extends ConsumerState<QRCodeScannerScreen> class _QRCodeScannerScreenState extends ConsumerState<QRCodeScannerScreen> with WidgetsBindingObserver, PresLogger {
with WidgetsBindingObserver, PresLogger { final controller = MobileScannerController(detectionTimeoutMs: 500, autoStart: false);
final controller =
MobileScannerController(detectionTimeoutMs: 500, autoStart: false);
bool started = false; bool started = false;
late FlutterEasyPermission _easyPermission; // late FlutterEasyPermission _easyPermission;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addObserver(this);
_easyPermission = FlutterEasyPermission() // _easyPermission = FlutterEasyPermission()
..addPermissionCallback(onGranted: (requestCode, androidPerms, iosPerm) { // ..addPermissionCallback(onGranted: (requestCode, androidPerms, iosPerm) {
debugPrint("android:$androidPerms"); // debugPrint("android:$androidPerms");
debugPrint("iOS:$iosPerm"); // debugPrint("iOS:$iosPerm");
startQrScannerIfPermissionGranted(); // startQrScannerIfPermissionGranted();
}, onDenied: (requestCode, androidPerms, iosPerm, isPermanent) { // }, onDenied: (requestCode, androidPerms, iosPerm, isPermanent) {
if (isPermanent) { // if (isPermanent) {
FlutterEasyPermission.showAppSettingsDialog(title: "Camera"); // FlutterEasyPermission.showAppSettingsDialog(title: "Camera");
} else { // } else {
debugPrint("android:$androidPerms"); // debugPrint("android:$androidPerms");
debugPrint("iOS:$iosPerm"); // debugPrint("iOS:$iosPerm");
} // }
}, onSettingsReturned: () { // }, onSettingsReturned: () {
startQrScannerIfPermissionGranted(); // startQrScannerIfPermissionGranted();
}); // });
} }
@override @override
void dispose() { void dispose() {
controller.stop(); controller.stop();
_easyPermission.dispose(); // _easyPermission.dispose();
WidgetsBinding.instance.removeObserver(this); WidgetsBinding.instance.removeObserver(this);
super.dispose(); super.dispose();
} }
void startQrScannerIfPermissionGranted() { void startQrScannerIfPermissionGranted() {
FlutterEasyPermission.has(perms: permissions, permsGroup: permissionGroup) // FlutterEasyPermission.has(perms: permissions, permsGroup: permissionGroup)
.then((value) { // .then((value) {
if (value) { // if (value) {
controller.start().then((result) { // controller.start().then((result) {
if (result != null) { // if (result != null) {
setState(() { // setState(() {
started = true; // started = true;
}); // });
} // }
}).catchError((error) { // }).catchError((error) {
loggy.warning("Error starting scanner: $error"); // loggy.warning("Error starting scanner: $error");
}); // });
} else {} // } else {}
}); // });
} }
@override @override
@@ -139,8 +136,7 @@ class _QRCodeScannerScreenState extends ConsumerState<QRCodeScannerScreen>
final uri = Uri.tryParse(rawData); final uri = Uri.tryParse(rawData);
if (context.mounted && uri != null) { if (context.mounted && uri != null) {
loggy.debug('captured url: [$uri]'); loggy.debug('captured url: [$uri]');
Navigator.of(context, rootNavigator: true) Navigator.of(context, rootNavigator: true).pop(uri.toString());
.pop(uri.toString());
} }
} else { } else {
loggy.warning("unable to capture"); loggy.warning("unable to capture");
@@ -148,8 +144,7 @@ class _QRCodeScannerScreenState extends ConsumerState<QRCodeScannerScreen>
}, },
errorBuilder: (_, error, __) { errorBuilder: (_, error, __) {
final message = switch (error.errorCode) { final message = switch (error.errorCode) {
MobileScannerErrorCode.permissionDenied => MobileScannerErrorCode.permissionDenied => t.profile.add.qrScanner.permissionDeniedError,
t.profile.add.qrScanner.permissionDeniedError,
_ => t.profile.add.qrScanner.unexpectedError, _ => t.profile.add.qrScanner.unexpectedError,
}; };

View File

@@ -487,14 +487,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.0" version: "0.6.0"
flutter_easy_permission:
dependency: "direct main"
description:
name: flutter_easy_permission
sha256: "05eb1b561c894adef28b3ae38d8087fc2635f1047c5e18cf2698fb42b6ccc132"
url: "https://pub.dev"
source: hosted
version: "1.1.2"
flutter_gen_core: flutter_gen_core:
dependency: transitive dependency: transitive
description: description:

View File

@@ -81,7 +81,7 @@ dependencies:
timezone_to_country: ^2.1.0 timezone_to_country: ^2.1.0
json_path: ^0.7.1 json_path: ^0.7.1
# permission_handler: ^11.3.0 # is not compatible with windows # permission_handler: ^11.3.0 # is not compatible with windows
flutter_easy_permission: ^1.1.2 # flutter_easy_permission: ^1.1.2
in_app_review: ^2.0.9 in_app_review: ^2.0.9
# circle_flags: ^4.0.2 # circle_flags: ^4.0.2
circle_flags: circle_flags: