Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文件从internet下载并保存到Flatter/dart中的内部存储(android)中?_Android_Dart_Flutter_Storage - Fatal编程技术网

如何将文件从internet下载并保存到Flatter/dart中的内部存储(android)中?

如何将文件从internet下载并保存到Flatter/dart中的内部存储(android)中?,android,dart,flutter,storage,Android,Dart,Flutter,Storage,我需要将文件eg.jpg保存到“internalstorage/appname/files/” 如果文件夹中已存在通知,则显示通知。按下按钮/启动活动时,应将文件下载到带有dart代码的ANDROID设备的本地存储器中。 帮我找到解决办法 **code:** import 'dart:io'; import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_downloade

我需要将文件eg.jpg保存到“internalstorage/appname/files/” 如果文件夹中已存在通知,则显示通知。按下按钮/启动活动时,应将文件下载到带有dart代码的ANDROID设备的本地存储器中。 帮我找到解决办法

**code:**
   import 'dart:io';
  import 'dart:async';
  import 'package:flutter/material.dart';
 import 'package:flutter_downloader/flutter_downloader.dart';
 import './landing_page.dart';
 import 'package:dio/dio.dart';
 import 'package:path_provider/path_provider.dart';
 import 'package:simple_permissions/simple_permissions.dart';
 import 'package:flutter/services.dart';


 class MoviesPage extends StatefulWidget {

  @override
 State createState() => new MoviesPageState();
 }

 class MoviesPageState extends State<MoviesPage> {
  final dUrl ="https://cdn.putlockers.es/download/0BBCA7584749D4E741747E32E6EB588AEA03E40F";
 bool downloading = false;
 var progressString = "";
static const MethodChannel _channel =
     const MethodChannel('flutter_downloader');

 @override
  void initState() {
    super.initState();
   downloadFile();

   }


  Future<void> downloadFile() async {
    Dio dio = Dio();

    try {
     var dir = await getApplicationDocumentsDirectory();

     await dio.download(dUrl, "${dir.path}/file.torrent",
          onProgress: (rec, total) {
          print("Rec: $rec , Total: $total");

       setState(() {
        downloading = true;
        progressString = ((rec / total) * 100).toStringAsFixed(0) + "%";
      });
     });
      } catch (e) {
      print(e);
      }

    setState(() {
     downloading = false;
     progressString = "Completed";
     });
     print("Download completed");
     }
    @override
     Widget build(BuildContext context) {
     return Scaffold(
          appBar: AppBar(
         title: Text("AppBar"),
        ),
     body: Center(
       child: downloading
           ? Container(
               height: 120.0,
              width: 200.0,
               child: Card(
                 color: Colors.black,
                 child: Column(
                     mainAxisAlignment: MainAxisAlignment.center,
                     children: <Widget>[
                       CircularProgressIndicator(),
                      SizedBox(
                    height: 20.0,
                  ),
                  Text(
                    "Downloading File: $progressString",
                    style: TextStyle(
                      color: Colors.white,
                    ),
                  )
                ],
              ),
            ),
          )
        : Text("No Data"),
  ),
);
 }
}
**代码:**
导入“dart:io”;
导入“dart:async”;
进口“包装:颤振/材料.省道”;
进口“包装:颤振_下载器/颤振_下载器.dart”;
导入“./landing_page.dart”;
进口“包装:dio/dio.dart”;
导入“package:path_provider/path_provider.dart”;
导入“package:simple_permissions/simple_permissions.dart”;
导入“包:flifter/services.dart”;
类MoviesPage扩展StatefulWidget{
@凌驾
State createState()=>新电影页面状态();
}
类MoviesPageState扩展了状态{
最终dUrl=”https://cdn.putlockers.es/download/0BBCA7584749D4E741747E32E6EB588AEA03E40F";
bool=false;
var progressString=“”;
静态常量方法通道u通道=
const MethodChannel(“颤振下载器”);
@凌驾
void initState(){
super.initState();
下载文件();
}
Future downloadFile()异步{
Dio Dio=Dio();
试一试{
var dir=等待getApplicationDocumentsDirectory();
等待dio.download(dUrl,“${dir.path}/file.torrent”,
onProgress:(记录,总计){
打印(“记录:$Rec,总计:$Total”);
设置状态(){
下载=真;
progressString=(记录/总计)*100.ToStringsFixed(0)+“%”;
});
});
}捕获(e){
印刷品(e);
}
设置状态(){
下载=假;
progressString=“已完成”;
});
打印(“下载完成”);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“AppBar”),
),
正文:中(
儿童:下载
?容器(
身高:120.0,
宽度:200.0,
孩子:卡片(
颜色:颜色,黑色,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
CircularProgressIndicator(),
大小盒子(
身高:20.0,
),
正文(
“正在下载文件:$progressString”,
样式:TextStyle(
颜色:颜色,白色,
),
)
],
),
),
)
:文本(“无数据”),
),
);
}
}

提前感谢。请以一种完全笨拙的方式发布您的解决方案。

我已经检查了您发布的最小复制,您似乎正在使用flift插件下载该文件。我重新使用了代码中的
Future downloadFile()
,并对其进行了一些修改,以检查插件是否按预期工作。从dio插件的3.0.10版开始,
dio.download()
上的
onProgress
现在是
onReceiveProgress
,但它基本上仍然具有相同的功能

下面是从代码中下载图像文件的方法,只需稍加修改

Future downloadFile()异步{
Dio Dio=Dio();
var dir=等待getApplicationDocumentsDirectory();
var imageDownloadPath='${dir.path}/image.jpg';
等待dio.下载(imageSrc,imageDownloadPath,
收到进度:(已收到,总计){
风险值进度=(收到/总计)*100;
debugPrint('Rec:$received,Total:$Total,$progress%”);
设置状态(){
downloadProgress=received.toDouble()/total.toDouble();
});
});
//downloadFile函数返回下载图像的路径
返回图像下载路径;
}
插件按预期工作,并成功下载图像文件。虽然我无法验证您如何确定您尝试下载的图像在复制时失败。在我的示例应用程序中,
Future downloadFile()
返回存储图像路径的字符串。然后我用它来更新图像小部件以显示下载的图像-这决定了下载已经成功

下面是完整的示例应用程序

导入'dart:io';
进口“包装:dio/dio.dart”;
进口“包装:颤振/材料.省道”;
导入“package:path_provider/path_provider.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
最终图像src=https://picsum.photos/250?image=9';
var downloadPath='';
var downloadProgress=0.0;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
扩展(flex:5,子项:Image.network(imageSrc)),
扩大(
弹性:2,
孩子:排(
儿童:[
升降按钮(
//从imageSrc下载显示的图像
已按下:(){
downloadFile().catchError((OneError){
debugPrint('Error downloading:$onError');
}).然后((图像路径){
debugPrint('下载成功