replace webview plugin with inappwebview plugin to check camera permission once in app
Godwin Asuquo committed
Jan 5, 2023 at 09:40 UTC
b8293ac0aeb001fa262da82f7fcd1fefbb339c19
4 files changed
+26
-20
android/app/src/main/AndroidManifestBase.xml
+10
@@ -6,6 +6,7 @@
6
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
7
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
8
<uses-permission android:name="android.permission.WAKE_LOCK" />
9
+ <uses-permission android:name="android.permission.CAMERA" />
10
11
<application
12
android:name=".Application"
@@ -43,6 +44,15 @@
44
<meta-data
45
android:name="flutterEmbedding"
46
android:value="2" />
47
+ <provider
48
+ android:name="com.pichillilorenzo.flutter_inappwebview.InAppWebViewFileProvider"
49
+ android:authorities="${applicationId}.flutter_inappwebview.fileprovider"
50
+ android:exported="false"
51
+ android:grantUriPermissions="true">
52
+ <meta-data
53
+ android:name="android.support.FILE_PROVIDER_PATHS"
54
+ android:resource="@xml/provider_paths" />
55
+ </provider>
56
</application>
57
58
<queries>
lib/main.dart
+2
-1
@@ -11,6 +11,7 @@ import 'package:flutter/services.dart';
11
import 'package:hive/hive.dart';
12
import 'package:cake_wallet/di.dart';
13
import 'package:path_provider/path_provider.dart';
14
+import 'package:permission_handler/permission_handler.dart';
15
import 'package:shared_preferences/shared_preferences.dart';
16
import 'package:flutter_localizations/flutter_localizations.dart';
17
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
@@ -44,7 +45,7 @@ final rootKey = GlobalKey<RootState>();
45
Future<void> main() async {
46
try {
47
WidgetsFlutterBinding.ensureInitialized();
47
-
48
+ await Permission.camera.request();
49
final appDir = await getApplicationDocumentsDirectory();
50
await Hive.close();
51
Hive.init(appDir.path);
lib/src/screens/buy/buy_webview_page.dart
+13
-18
@@ -9,11 +9,10 @@ import 'package:cake_wallet/src/screens/base_page.dart';
9
import 'package:cake_wallet/store/dashboard/orders_store.dart';
10
import 'package:cake_wallet/view_model/buy/buy_view_model.dart';
11
import 'package:flutter/material.dart';
12
-import 'package:webview_flutter/webview_flutter.dart';
12
+import 'package:flutter_inappwebview/flutter_inappwebview.dart';
13
14
class BuyWebViewPage extends BasePage {
15
- BuyWebViewPage({required this.buyViewModel,
16
- required this.ordersStore, required this.url});
15
+ BuyWebViewPage({required this.buyViewModel, required this.ordersStore, required this.url});
16
17
final OrdersStore ordersStore;
18
final String url;
@@ -46,12 +45,12 @@ class BuyWebViewPageBody extends StatefulWidget {
45
46
class BuyWebViewPageBodyState extends State<BuyWebViewPageBody> {
47
BuyWebViewPageBodyState()
49
- : _webViewkey = GlobalKey(),
50
- _isSaving = false,
51
- orderId = '';
48
+ : _webViewkey = GlobalKey(),
49
+ _isSaving = false,
50
+ orderId = '';
51
52
String orderId;
54
- WebViewController? _webViewController;
53
+ InAppWebViewController? _webViewController;
54
GlobalKey _webViewkey;
55
Timer? _timer;
56
bool _isSaving;
@@ -63,8 +62,6 @@ class BuyWebViewPageBodyState extends State<BuyWebViewPageBody> {
62
_isSaving = false;
63
widget.ordersStore.orderId = '';
64
66
- if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
67
-
65
if (widget.buyViewModel.selectedProvider is WyreBuyProvider) {
66
_saveOrder(keyword: 'completed', splitSymbol: '/');
67
}
@@ -76,31 +73,29 @@ class BuyWebViewPageBodyState extends State<BuyWebViewPageBody> {
73
74
@override
75
Widget build(BuildContext context) {
79
- return WebView(
76
+ return InAppWebView(
77
key: _webViewkey,
81
- initialUrl: widget.url,
82
- javascriptMode: JavascriptMode.unrestricted,
83
- onWebViewCreated: (WebViewController controller) =>
78
+ initialUrlRequest: URLRequest(url: Uri.tryParse(widget.url ?? '')),
79
+ onWebViewCreated: (InAppWebViewController controller) =>
80
setState(() => _webViewController = controller));
81
}
82
83
void _saveOrder({required String keyword, required String splitSymbol}) {
84
_timer?.cancel();
85
_timer = Timer.periodic(Duration(seconds: 1), (timer) async {
90
-
86
try {
87
if (_webViewController == null || _isSaving) {
88
return;
89
}
90
96
- final url = await _webViewController!.currentUrl();
97
-
91
+ final url = await _webViewController!.getUrl();
92
+ final urlString = url.toString();
93
if (url == null) {
94
throw Exception('_saveOrder: Url is null');
95
}
96
102
- if (url!.contains(keyword)) {
103
- final urlParts = url!.split(splitSymbol);
97
+ if (urlString.toString().contains(keyword)) {
98
+ final urlParts = urlString.split(splitSymbol);
99
orderId = urlParts.last;
100
widget.ordersStore.orderId = orderId;
101
pubspec_base.yaml
+1
-1
@@ -38,7 +38,7 @@ dependencies:
38
auto_size_text: ^3.0.0
39
dotted_border: ^2.0.0+2
40
smooth_page_indicator: ^1.0.0+2
41
- webview_flutter: ^3.0.4
41
+ flutter_inappwebview: ^5.7.2+3
42
flutter_spinkit: ^5.1.0
43
uni_links: ^0.5.1
44
lottie: ^1.3.0