Android studio 颤振显示下载失败,下载100%后出现java.lang.IllegalArgumentException

Android studio 颤振显示下载失败,下载100%后出现java.lang.IllegalArgumentException,android-studio,flutter,Android Studio,Flutter,我正在尝试制作一个墙纸应用程序来下载图像,但当它完成下载时显示下载失败,错误是找不到具有权限的提供商的元数据。我下载与颤振下载包。 谢谢 java.lang.IllegalArgumentException:找不到具有权限的提供程序的元数据 sagarrawatuk.fotoApp.flatter_downloader.provider class _ImagePathState extends State<ImagePath> { String localPath; Future

我正在尝试制作一个墙纸应用程序来下载图像,但当它完成下载时显示下载失败,错误是找不到具有权限的提供商的元数据。我下载与颤振下载包。 谢谢

java.lang.IllegalArgumentException:找不到具有权限的提供程序的元数据 sagarrawatuk.fotoApp.flatter_downloader.provider

class _ImagePathState extends State<ImagePath> {
String localPath;

Future<String> get localpath async {
final result = await Permission.storage.request();
if (result == PermissionStatus.granted) {
  final localPath =
      (await findLocalPath()) + Platform.pathSeparator + 'Download';
  final savedDir = Directory(localPath);
  bool hasExisted = await savedDir.exists();
  if (!hasExisted) {
    savedDir.create();
  }
  return localPath;
  } else
  return null;
  }

  Future<String> findLocalPath() async {
  final directory = Platform.isAndroid
    ? await getExternalStorageDirectory()
    : await getApplicationDocumentsDirectory();
   return directory.path;
  }

  @override
  Widget build(BuildContext context) {
  return Scaffold(
  appBar: AppBar(
    backgroundColor: myColor,
    leading: IconButton(
      icon: Icon(Icons.close),
      onPressed: () => Navigator.of(context).pop(),
      color: Colors.black,
    ),
    actions: [
      IconButton(
          color: Colors.black,
          icon: Icon(Icons.file_download),
          onPressed: () async => DownloadTask(
              taskId: await FlutterDownloader.enqueue(
                  url: widget.imgPath,
                  savedDir: await localpath,
                  showNotification: true)))
      ],
      ),
      body: SizedBox.expand(
       child: Container(
      child: Stack(
        children: [
          Align(
            alignment: Alignment.center,
            child: Hero(
                tag: widget.imgPath, child: Image.network(widget.imgPath)),
          ),
         ],
        ),
       ),
     ),
    );
    }
class\u ImagePathState扩展状态{
字符串本地路径;
未来获取本地路径异步{
最终结果=wait Permission.storage.request();
如果(结果==PermissionStatus.grated){
最终本地路径=
(等待findLocalPath())+Platform.pathSeparator+“下载”;
final savedDir=目录(localPath);
bool hasExisted=wait savedDir.exists();
如果(!已存在){
savedDir.create();
}
返回localPath;
}否则
返回null;
}
Future findLocalPath()异步{
最终目录=Platform.isAndroid
?等待getExternalStorageDirectory()
:等待getApplicationDocumentsDirectory();
返回directory.path;
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
背景颜色:myColor,
领先:IconButton(
图标:图标(Icons.close),
onPressed:()=>Navigator.of(context.pop(),
颜色:颜色,黑色,
),
行动:[
图标按钮(
颜色:颜色,黑色,
图标:图标(Icons.file_下载),
onPressed:()异步=>下载任务(
taskId:wait downloader.enqueue(
url:widget.imgPath,
savedDir:等待localpath,
showNotification:true)))
],
),
正文:SizedBox.expand(
子:容器(
子:堆栈(
儿童:[
对齐(
对齐:对齐.center,
孩子:英雄(
标记:widget.imgPath,子项:Image.network(widget.imgPath)),
),
],
),
),
),
);
}

在您的AndroidManifest.xml中添加提供者

<provider
    android:name="vn.hunghd.flutterdownloader.DownloadedFileProvider"
    android:authorities="${applicationId}.flutter_downloader.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>

见文件