Flutter WebView 中存储权限被拒绝错误

问题描述 投票:0回答:1

应用程序或 WebView 尚未被授予读取或写入外部存储的必要权限。当尝试在 WebView 中执行文件上传或下载等任务时,这可能会导致复杂化。

这是我的main.dart

import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
  home: Scaffold(
    appBar: AppBar(toolbarHeight: 0.1),
    body: WebViewWidget(),
  ),
 );
}
}



  

这是flutter pubspec.yml

选择按钮应正常工作并上传、下载,

flutter webview permissions storage
1个回答
0
投票

您似乎面临与 Flutter 应用程序中的外部存储相关的权限问题。要解决此问题,您需要在 AndroidManifest.xml 文件中请求必要的权限,并在 Dart 代码中处理运行时权限。

以下是有关如何解决此问题的一般指南:

  1. 向AndroidManifest.xml添加权限: 打开

    android/app/src/main/AndroidManifest.xml
    文件并添加外部存储所需的权限。在
    <manifest>
    元素内添加以下行:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    确保这些行位于

    <manifest>
    标签内,但位于任何其他标签外。

  2. 在 Dart 中处理运行时权限: 在您的 Dart 代码中,您需要在运行时请求这些权限。为此,您可以使用

    permission_handler
    包。将其添加到您的
    pubspec.yaml
    文件中:

    dependencies:
      permission_handler: ^10.2.0
    

    然后,在终端中运行

    flutter pub get
    来安装软件包。

  3. 在 Dart 代码中请求权限: 更新您的

    main.dart
    文件以在访问外部存储之前请求权限。这是一个例子:

    import 'package:flutter/material.dart';
    import 'package:permission_handler/permission_handler.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // Request external storage permissions before runApp
        requestPermissions();
    
        return MaterialApp(
          home: MyHomePage(),
        );
      }
    
      // Function to request permissions
      Future<void> requestPermissions() async {
        Map<Permission, PermissionStatus> statuses = await [
          Permission.storage,
        ].request();
    
        // Check if permissions are granted
        if (statuses[Permission.storage] != PermissionStatus.granted) {
          // Handle the case where permissions are not granted
          print("Permission not granted!");
        }
      }
    }
    
    class MyHomePage extends StatelessWidget {
      // Your main UI code here
    }
    

    此示例使用

    permission_handler
    包在运行时请求存储权限。

请记住根据您的具体需求和应用程序的结构调整代码。此外,请务必检查

permission_handler
包的最新文档以了解任何更新或更改。

© www.soinside.com 2019 - 2024. All rights reserved.