dev
dart 87 lines 2.89 KB
Raw
1 import 'package:cake_wallet/di.dart';
2 import 'package:cake_wallet/entities/preferences_key.dart';
3 import 'package:cake_wallet/generated/i18n.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
6 import 'package:cake_wallet/utils/permission_handler.dart';
7 import 'package:cake_wallet/utils/show_pop_up.dart';
8 import 'package:flutter/material.dart';
9 import 'package:flutter_inappwebview/flutter_inappwebview.dart';
10 import 'package:permission_handler/permission_handler.dart';
11 import 'package:shared_preferences/shared_preferences.dart';
12
13 class WebViewPage extends BasePage {
14 WebViewPage(this._title, this._url);
15
16 final String _title;
17 final Uri _url;
18
19 @override
20 String get title => _title;
21
22 @override
23 Widget body(BuildContext context) {
24 return WebViewPageBody(_title, _url);
25 }
26 }
27
28 class WebViewPageBody extends StatefulWidget {
29 WebViewPageBody(this.title, this.uri);
30
31 final String title;
32 final Uri uri;
33
34 @override
35 WebViewPageBodyState createState() => WebViewPageBodyState();
36 }
37
38 class WebViewPageBodyState extends State<WebViewPageBody> {
39 WebViewPageBodyState();
40
41 @override
42 Widget build(BuildContext context) {
43 return InAppWebView(
44 initialSettings: InAppWebViewSettings(
45 transparentBackground: true,
46 ),
47 initialUrlRequest: URLRequest(url: WebUri.uri(widget.uri)),
48 onPermissionRequest: (controller, request) async {
49 final sharedPrefs = getIt.get<SharedPreferences>();
50
51 if (sharedPrefs.getBool(PreferencesKey.showCameraConsent) ?? true) {
52 final bool userConsent = await showPopUp<bool>(
53 context: context,
54 builder: (BuildContext context) {
55 return AlertWithTwoActions(
56 alertTitle: S.of(context).privacy,
57 alertContent: S.of(context).camera_consent(widget.title),
58 rightButtonText: S.of(context).agree,
59 leftButtonText: S.of(context).cancel,
60 actionRightButton: () => Navigator.of(context).pop(true),
61 actionLeftButton: () => Navigator.of(context).pop(false));
62 }) ??
63 false;
64
65 /// if user did NOT give the consent then return permission denied
66 if (!userConsent) {
67 return PermissionResponse(
68 resources: request.resources,
69 action: PermissionResponseAction.DENY,
70 );
71 }
72
73 sharedPrefs.setBool(PreferencesKey.showCameraConsent, false);
74 }
75
76 bool permissionGranted =
77 await PermissionHandler.checkPermission(Permission.camera, context);
78
79 return PermissionResponse(
80 resources: request.resources,
81 action:
82 permissionGranted ? PermissionResponseAction.GRANT : PermissionResponseAction.DENY,
83 );
84 },
85 );
86 }
87 }