|
import 'dart:io'; import 'dart:isolate'; import 'dart:ui'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:url_launcher/url_launcher.dart'; //import 'package:simple_permissions/simple_permissions.dart'; //import 'tools/ToolsClass.dart'; //import 'tools/ToolsWidget.dart'; void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } }
class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState(); }
class _MyHomePageState extends State<MyHomePage> { ReceivePort _port = ReceivePort(); String downloadId; String _link = "http://apk.gfan.net.cn/index.php?c=api&m=down&src=wap&apk=84260"; // String _link = "https://i.loli.net/2019/10/18/gE3PTycd9SF5VqY.jpg"; String _localPath;
@override
void initState() {
// TODO: implement initState super.initState(); _init(); } Future<void> _init() async {
await FlutterDownloader.initialize(); IsolateNameServer.registerPortWithName(
_port.sendPort, 'downloader_send_port');
_port.listen((dynamic data) { print('UI Isolate Callback: $data'); String id = data[0]; DownloadTaskStatus status = data[1]; int progress = data[2]; print("状态: $status"); print("进度: $progress"); print("id == downloadId: ${id == downloadId}"); });
//下载回调 FlutterDownloader.registerCallback(downloadCallback);
//定义 保存目录路径 (这里设置为 当前app目录下的Download) _localPath = (await _findLocalPath()) + '/Download';
//保存目录 final savedDir = Directory(_localPath); bool hasExisted = await savedDir.exists();
//判断目录是否存在 不存在则创建 if (!hasExisted) { savedDir.create(); } }
static void downloadCallback( String id, DownloadTaskStatus status, int progress) { print(
'背景分离回调: 任务id ($id) \n状态 ($status) \n进度 ($progress)');
final SendPort send = IsolateNameServer.lookupPortByName('downloader_send_port'); send.send([id, status, progress]); }
// //是否有权限 // Future<bool> checkPermission() async { // print("检查权限"); // bool res = await SimplePermissions.checkPermission( // Permission.WriteExternalStorage); // return res; // } // // //打开权限 // Future<PermissionStatus> requestPermission() async { // print("打开权限"); // return SimplePermissions.requestPermission(Permission.WriteExternalStorage); // }
// 检查权限 Future<bool> _checkPermission() async {
if (Theme.of(context).platform == TargetPlatform.android) { PermissionStatus permission = await PermissionHandler() .checkPermissionStatus(PermissionGroup.storage);
if (permission != PermissionStatus.granted) { Map<PermissionGroup, PermissionStatus> permissions =
await PermissionHandler() .requestPermissions([PermissionGroup.storage]);
if (permissions[PermissionGroup.storage] == PermissionStatus.granted) {
return true; } } else {
return true; } } else {
return true; }
return false; }
//获取路径 Future<String> _findLocalPath() async {
// 因为Apple没有外置存储,所以第一步我们需要先对所在平台进行判断 // 如果是android,使用getExternalStorageDirectory // 如果是iOS,使用getApplicationSupportDirectory final directory = Theme.of(context).platform == TargetPlatform.android ? await getExternalStorageDirectory() : await getApplicationSupportDirectory();
return directory.path; }
int count = 0;
@override
Widget build(BuildContext context) { List list = ["123","222","qeqw"];
return Scaffold( appBar: AppBar( title: Text(widget.title), ), body:Column( children: <Widget>[ // Text("集合转字符串"+ToolsClass.listToString(list,",")), // Text("原集合:"+list.toString()), // Text("字符串转集合:"+ToolsClass.stringToList("123,555,999,888", ",").toString()), // Text("字符串判空:"+ToolsClass.textIsNot(null).toString()), FlatButton( child:Text('点击我下载'), onPressed: () async {
if (await _checkPermission()) {
await FlutterDownloader.initialize();
final taskId = await FlutterDownloader.enqueue( url: _link, savedDir: _localPath, showNotification:
true, // show download progress in status bar (for Android) openFileFromNotification:
true, // click on notification to open downloaded file (for Android) );
downloadId = taskId; } }, ), // numRunturn( // count: count, // leftRightBtnWidth: 30, // inputWidth: 30, // changed:(v){ // setState(() { // count = v; // print("num page:"+v.toString()); // },); // }, // ), ], ), ); } }
|