国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flutter:文件上傳與下載(下載后預(yù)覽)

這篇具有很好參考價(jià)值的文章主要介紹了Flutter:文件上傳與下載(下載后預(yù)覽)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Dio

dio是一個(gè)強(qiáng)大的Dart Http請(qǐng)求庫,提供了豐富的功能和易于使用的API,支持文件上傳和下載。
這個(gè)就不介紹了,網(wǎng)上有很多的封裝案例。

background_downloader

簡(jiǎn)介
適用于iOS,Android,MacOS,Windows和Linux的后臺(tái)文件下載器和上傳器。

官方文檔
https://pub-web.flutter-io.cn/packages/background_downloader

安裝

flutter pub add background_downloader

示例1:下載

class _MyHomePageState extends State<MyHomePage> {
  // 文件信息
  String fileInfo = '';
  // 下載進(jìn)度
  double progress = 0.0;
  // 任務(wù)狀態(tài)
  String taskStatus = '';
  // 任務(wù)
  late DownloadTask task;

  // 下載單個(gè)文件
  _downloadFile() async {
    task = DownloadTask(
        url:
            'https://vd3.bdstatic.com/mda-ma6igm4b0znfbqve/sc/cae_h264_nowatermark/1609998111/mda-ma6igm4b0znfbqve.mp4', // 下載地址
        // urlQueryParameters: {'q': 'pizza'},  // 請(qǐng)求參數(shù)
        filename: 'mov_bbb.mp4', // 文件名
        //headers: {'myHeader': 'value'},  請(qǐng)求頭
        directory: 'my_sub_directory', // 文件存儲(chǔ)目錄
        updates: Updates.statusAndProgress, // 更新任務(wù)狀態(tài)和下載進(jìn)度
        requiresWiFi: true, // 使用wifi
        retries: 5, // 下載的重試次數(shù)
        allowPause: true, // 運(yùn)行暫停
        metaData: 'data for me' // 元數(shù)據(jù),可以存儲(chǔ)一些對(duì)于下載任務(wù)有用的信息,方便后續(xù)相關(guān)操作
        );
    // 監(jiān)聽下載
    final result =
        await FileDownloader().download(task, onProgress: (progress) {
      setState(() {
        this.progress = progress;
      });
    }, onStatus: (states) {
      String msg = '';
      if (states == TaskStatus.complete) {
        msg = '下載完成';
        //  下載完成后,將文件移動(dòng)到共享目錄后,其他應(yīng)用也可以訪問。否則只能在本應(yīng)用內(nèi)訪問
        FileDownloader().moveToSharedStorage(task, SharedStorage.downloads);
      } else if (states == TaskStatus.canceled) {
        msg = '已取消';
        setState(() {
          progress = 0;
        });
      } else if (states == TaskStatus.paused) {
        msg = '已暫停';
      } else if (states == TaskStatus.running) {
        msg = '下載中...';
      } else {
        msg = '下載失敗';
      }
      setState(() {
        taskStatus = msg;
      });
    });
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          backgroundColor: Theme.of(context).colorScheme.inversePrimary,
          title: Text(widget.title),
        ),
        body: Column(
          children: [
            const SizedBox(
              height: 20,
            ),
            Text("文件信息:$fileInfo"),
            const SizedBox(
              height: 20,
            ),
            Row(
              children: [
                const Text("下載進(jìn)度:"),
                Expanded(
                    child: LinearProgressIndicator(
                  value: progress,
                  backgroundColor: Colors.greenAccent,
                  valueColor: const AlwaysStoppedAnimation<Color>(Colors.red),
                )),
                Text("${(progress * 100).toStringAsFixed(1)}%")
              ],
            ),
            Text("任務(wù)狀態(tài):$taskStatus"),
            const SizedBox(
              height: 20,
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              mainAxisSize: MainAxisSize.max,
              children: [
                ElevatedButton(
                    onPressed: _downloadFile, child: const Text("下載")),
                ElevatedButton(
                    onPressed: () async {
                      // 暫停任務(wù)
                      await FileDownloader().pause(task);
                    },
                    child: const Text("暫停")),
                ElevatedButton(
                    onPressed: () async {
                      //  根據(jù)固定的任務(wù)id取消
                      await FileDownloader().cancelTaskWithId(task.taskId);
                      // 取消所有
                      //FileDownloader().cancelTasksWithIds(taskIds)
                    },
                    child: const Text("取消")),
                ElevatedButton(
                    onPressed: () async {
                      await FileDownloader().resume(task);
                    },
                    child: const Text("恢復(fù)"))
              ],
            )
          ],
        ));
  }
}

注意:

  • 默認(rèn)下載的文件是在本應(yīng)用內(nèi),其他應(yīng)用無訪問權(quán)限。要想要被訪問到需要在下載完成后執(zhí)行 FileDownloader().moveToSharedStorage(task, SharedStorage.downloads);
  • 點(diǎn)擊暫停后,再點(diǎn)擊恢復(fù)可以繼續(xù)下載。點(diǎn)擊取消后,再點(diǎn)擊恢復(fù)無法繼續(xù)下載。

Flutter:文件上傳與下載(下載后預(yù)覽),dart 和 Flutter,flutter

Flutter:文件上傳與下載(下載后預(yù)覽),dart 和 Flutter,flutter

示例2:上傳

/// define the multi-part upload task (subset of parameters shown)
final task = UploadTask(
        url: 'https://myserver.com/uploads',
        filename: 'myData.txt',
        fields: {'datafield': 'value'},
        fileField: 'myFile', 
        updates: Updates.statusAndProgress // request status and progress updates
);

// Start upload, and wait for result. Show progress and status changes
// while uploading
final result = await FileDownloader().upload(task,
  onProgress: (progress) => print('Progress: ${progress * 100}%'),
  onStatus: (status) => print('Status: $status')
);

// Act on result, similar to download

這個(gè)沒有服務(wù)器,沒有嘗試,上面的是官方例子。

示例3:批量下載

final tasks = [task1, task2, task3]; // a list of Download tasks

// download the batch
final result = await FileDownloader().downloadBatch(tasks,
  batchProgressCallback: (succeeded, failed) =>
    print('Completed ${succeeded + failed} out of ${tasks.length}, $failed failed')
);

使用DownloadTask會(huì)返回一個(gè)任務(wù),多個(gè)任務(wù)可以使用downloadBatch來進(jìn)行批量下載。

示例4:發(fā)起通知

按照官方例子試了一下,一直沒有發(fā)起通知。
我這里的問題是app沒有通知權(quán)限,在設(shè)置里也無法開啟通知。
如果你也沒有成功的話,可以使用flutter_local_notifications來實(shí)現(xiàn)通知功能
Flutter:flutter_local_notifications——消息推送的學(xué)習(xí)
Flutter:文件上傳與下載(下載后預(yù)覽),dart 和 Flutter,flutter

示例5:打開下載文件

  _downloadFile() async {
    task = DownloadTask(
        url:
        'https://ppt.1ppt.com/uploads/soft/2307/1-230H1092638.zip', // 下載地址
        // urlQueryParameters: {'q': 'pizza'},  // 請(qǐng)求參數(shù)
        filename: '1-230H1092638.zip', // 文件名
        //headers: {'myHeader': 'value'},  請(qǐng)求頭
        directory: 'my_sub_directory', // 文件存儲(chǔ)目錄
        baseDirectory: BaseDirectory.applicationSupport,
        updates: Updates.statusAndProgress, // 更新任務(wù)狀態(tài)和下載進(jìn)度
        requiresWiFi: true, // 使用wifi
        retries: 5, // 下載的重試次數(shù)
        allowPause: true, // 運(yùn)行暫停
        metaData: 'data for me' // 元數(shù)據(jù),可以存儲(chǔ)一些對(duì)于下載任務(wù)有用的信息,方便后續(xù)相關(guān)操作
    );
    // 監(jiān)聽下載
    final result =
    await FileDownloader().download(task, onProgress: (progress) {
      setState(() {
        this.progress = progress;
      });
    }, onStatus: (states) async{
      String msg = '';
      if (states == TaskStatus.complete) {
        msg = '下載完成';
        await FileDownloader().openFile(task: task);
        print("路徑:${await task.filePath()}");
      } else if (states == TaskStatus.canceled) {
        msg = '已取消';
        setState(() {
          progress = 0;
        });
      } else if (states == TaskStatus.paused) {
        msg = '已暫停';
      } else if (states == TaskStatus.running) {
        msg = '下載中...';
      } else {
        msg = '下載失敗';
      }
      setState(() {
        taskStatus = msg;
      });
    });

  }

注意:

  • 必須要添加 baseDirectory: BaseDirectory.applicationSupport,,否則是無法打開文件的
  • 如果要打開文件,那么就不能使用FileDownloader().moveToSharedStorage(task, SharedStorage.downloads);移動(dòng)文件,會(huì)導(dǎo)致找不到文件進(jìn)而打不開。另外打開文件時(shí)會(huì)調(diào)用你手機(jī)里有的應(yīng)用程序打開,我試了一下圖片、mp4下載完成后是可以直接打開的,但是zip這樣的文件是無法直接打開的,這時(shí)會(huì)讓你選擇你手機(jī)里的應(yīng)用來打開。

遇到的問題

Flutter:文件上傳與下載(下載后預(yù)覽),dart 和 Flutter,flutter
這是因?yàn)?code>background_downloader要求最小的sdk版本是24,而Flutter會(huì)自動(dòng)設(shè)置minSdkVersion為16(Android 4.1),在你的Flutter項(xiàng)目的android/app/build.gradle文件中,將minSdkVersion更改為24或更高的版本。然后運(yùn)行flutter clean清理項(xiàng)目,并重新構(gòu)建你的應(yīng)用程序。
Flutter:文件上傳與下載(下載后預(yù)覽),dart 和 Flutter,flutter
從flutter倉庫找到了該問題的解決方案:https://github.com/flutter/flutter/issues/119247

android / app/build.gradle文件中添加文章來源地址http://www.zghlxwxcb.cn/news/detail-641019.html

configurations.all {
    resolutionStrategy {
        eachDependency {
            if ((requested.group == "org.jetbrains.kotlin") && (requested.name.startsWith("kotlin-stdlib"))) {
                useVersion("1.8.0")
            }
        }
    }
}

到了這里,關(guān)于Flutter:文件上傳與下載(下載后預(yù)覽)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Flutter系列文章-Flutter環(huán)境搭建和Dart基礎(chǔ)

    Flutter系列文章-Flutter環(huán)境搭建和Dart基礎(chǔ)

    Flutter是Google推出的一個(gè)開源的、高性能的移動(dòng)應(yīng)用開發(fā)框架,可以用一套代碼庫開發(fā)Android和iOS應(yīng)用。Dart則是Flutter所使用的編程語言。讓我們來看看如何搭建Flutter開發(fā)環(huán)境,并了解Dart語言的基礎(chǔ)知識(shí)。 1. 安裝Flutter SDK 首先,訪問Flutter官網(wǎng)下載Flutter SDK。選擇適合你操作系統(tǒng)

    2024年02月15日
    瀏覽(17)
  • Flutter筆記:關(guān)于Flutter中的大文件上傳(上)

    Flutter筆記:關(guān)于Flutter中的大文件上傳(上)

    Flutter筆記 關(guān)于Flutter中的大文件上傳(上) 大文件上傳背景與 Flutter 端實(shí)現(xiàn)文件分片傳輸 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 郵箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/134302751 本系列上下兩篇文章,包括 Flutter 端和 Django 端(后

    2024年02月03日
    瀏覽(28)
  • flutter開發(fā)實(shí)戰(zhàn)-文件上傳及上傳隊(duì)列

    flutter開發(fā)實(shí)戰(zhàn)-文件上傳及上傳隊(duì)列 之前開發(fā)中遇到了發(fā)帖子圖片上傳,上傳到七牛。 上傳使用到Dio上傳功能,具體代碼 上傳七牛需要獲取上傳七牛的token 調(diào)用doUploadFile實(shí)現(xiàn)上傳 簡(jiǎn)單實(shí)現(xiàn)上傳隊(duì)列,這里上傳采用一個(gè)接著一個(gè)上傳, 代碼如下 flutter開發(fā)實(shí)戰(zhàn)-文件上傳及上傳

    2024年02月10日
    瀏覽(18)
  • Flutter學(xué)習(xí)2 - Dart

    Dart語言特點(diǎn): Dart 2.0 開始便是強(qiáng)類型語言,而且是靜態(tài)類型的(可以類比Java,C#等) 強(qiáng)類型語言的優(yōu)點(diǎn):所有類型的檢查必須在編譯的時(shí)候完成 前端開發(fā)的 js 語言是弱類型的語言 強(qiáng)類型的語言需要在定義的時(shí)候指定類型,如果不指定,編譯器也可以在賦值的時(shí)候推斷出變

    2024年02月21日
    瀏覽(24)
  • 【Flutter】Dio 強(qiáng)大的Dart/Flutter HTTP客戶端

    Dio是一個(gè)強(qiáng)大的Dart/Flutter HTTP客戶端,支持全局配置、攔截器、FormData、請(qǐng)求取消、文件上傳/下載、超時(shí)等功能。 首先,

    2024年02月11日
    瀏覽(24)
  • Flutter Dart語言(05)異步

    該系列教程主要是為有一定語言基礎(chǔ) C/C++的程序員,快速學(xué)習(xí)一門新語言所采用的方法,屬于在C/C++基礎(chǔ)上擴(kuò)展新語言的模式。 在Dart語言中,雖然沒有像其他語言(如Java、C++、Python)中的傳統(tǒng)多線程概念,但它采用了異步(asynchronous)編程模型來處理并發(fā)任務(wù)。Dart使用asy

    2024年02月14日
    瀏覽(22)
  • 無涯教程-Flutter - Dart簡(jiǎn)介

    Dart是一種開源通用編程語言,它最初是由Google開發(fā)的, Dart是一種具有C樣式語法的面向?qū)ο蟮恼Z言,它支持諸如接口,類之類的編程概念,與其他編程語言不同,Dart不支持?jǐn)?shù)組, Dart集合可用于復(fù)制數(shù)據(jù)結(jié)構(gòu),例如數(shù)組,泛型和可選類型。 以下代碼顯示了一個(gè)簡(jiǎn)單的Dart程序

    2024年02月10日
    瀏覽(24)
  • 【Flutter】Dart/Flutter SDK如何降低版本、回退到指定版本

    【Flutter】Dart/Flutter SDK如何降低版本、回退到指定版本

    因?yàn)閐art3.0以后不再支持 no-sound-null-safety;但是有些項(xiàng)目不得以切換到dart3.0以前繼續(xù)使用運(yùn)行項(xiàng)目 方法1: 通過 命令,將flutter降級(jí)為當(dāng)前通道的上一個(gè)活動(dòng)版本; 如果沒有存在老版本則會(huì)提示 flutter downgrade There is no previously recorded version for channel “stable”. 這樣的話則可以通

    2024年02月16日
    瀏覽(22)
  • flutter的引擎,Dart語言概括

    flutter的引擎,Dart語言概括

    Dart是谷歌開發(fā)的, 類型安全的 , 面向?qū)ο?的編程語言,被應(yīng)用于 Web、服務(wù)器、移動(dòng)應(yīng)用和物聯(lián)網(wǎng) 等領(lǐng)域。 dart是谷歌在2011年推出的編程語言。谷歌希望使用dart來取代JavaScript。谷歌是一個(gè)顛覆式創(chuàng)新公司,谷歌退出golang是為了取代java,c++。谷歌退出flutter就是為了取代R

    2023年04月22日
    瀏覽(30)
  • Flutter Dart語言(04)庫操作

    該系列教程主要是為有一定語言基礎(chǔ) C/C++的程序員,快速學(xué)習(xí)一門新語言所采用的方法,屬于在C/C++基礎(chǔ)上擴(kuò)展新語言的模式。 引入代碼如下所示: 一般從官方網(wǎng)站:Page 1 | Top packages中 搜索需要的第三方庫,打開項(xiàng)目中的配置文件,名為:pubspec.yaml,找到dependencies選項(xiàng),這

    2024年02月14日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包