Flutter_學習記錄_ ImagePicker拍照、錄制視頻、相冊選擇照片和視頻、上傳文件

插件地址:https://pub.dev/packages/image_picker

  1. 添加插件
    在這里插入圖片描述
  2. 添加配置

android無需配置開箱即用,ios還需要配置info.plist

<key>NSPhotoLibraryUsageDescription</key> <string>應用需要訪問相冊讀取文件</string> 
<key>NSCameraUsageDescription</key> <string>應用需要訪問相機拍照</string> 
<key>NSMicrophoneUsageDescription</key> <string>應用需要訪問麥克風錄制視頻</string>
  1. 核心代碼
import 'package:image_picker/image_picker.dart';final ImagePicker picker = ImagePicker();
// 從相冊選擇相機
final XFile? image = await picker.pickImage(source: ImageSource.gallery);
// 拍照
final XFile? photo = await picker.pickImage(source: ImageSource.camera);
// 從相冊選擇視頻
final XFile? galleryVideo =await picker.pickVideo(source: ImageSource.gallery);
// 錄制視頻
final XFile? cameraVideo = await picker.pickVideo(source: ImageSource.camera);
  1. 完整代碼
import 'dart:io';import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
// 本地視頻播放的邏輯
import 'package:video_player/video_player.dart';
import 'package:chewie/chewie.dart';class ImagePickerDemo extends StatefulWidget {const ImagePickerDemo({super.key});State<ImagePickerDemo> createState() => _ImagePickerDemoState();
}class _ImagePickerDemoState extends State<ImagePickerDemo> {final ImagePicker _imagePicker  = ImagePicker();XFile? _pickerImage;XFile? _pickerVideo;// 配置加載本地視頻late VideoPlayerController _videoPlayerController;late ChewieController _chewieController;// 拍照void _imagePickerCamera() async {final XFile? image = await _imagePicker.pickImage(source: ImageSource.camera,// 可以不設置,設置上可以避免數據太大maxHeight: 800,maxWidth: 800);if (image != null) {print(image.path);setState(() {_pickerVideo = null;_pickerImage = image;});}}// 相冊選擇圖片void _imagePickerGallery() async {final XFile? image = await _imagePicker.pickImage(source: ImageSource.gallery,// 可以不設置,設置上可以避免數據太大maxHeight: 800,maxWidth: 800);if (image != null) {print(image.path);setState(() {_pickerVideo = null;_pickerImage = image;});} }// 視頻-選擇相機錄制void _videoPickerCamera() async {final XFile? video = await _imagePicker.pickVideo(source: ImageSource.camera);if (video != null) {print(video.path);await _initVideo(File(video.path));setState(() {_pickerImage = null;_pickerVideo = video;});}}// 視頻-選擇相冊void _videoPickerGallery() async {final XFile? video = await _imagePicker.pickVideo(source: ImageSource.gallery);if (video != null) {print(video.path);await _initVideo(File(video.path));setState(() {_pickerImage = null;_pickerVideo = video;});}}// 顯示圖片或者顯示視頻Widget _showImageOrVideoWidget() {if (_pickerImage != null) {return Image.file(File(_pickerImage!.path));} else if (_pickerVideo != null) {return AspectRatio(aspectRatio: _videoPlayerController.value.aspectRatio,child: Chewie(controller: _chewieController));} else {return Text("請選擇圖片或者視頻");}}// 初始化播放器--用于播放本地視頻Future _initVideo(File fileDir) async {_videoPlayerController = VideoPlayerController.file(fileDir);await _videoPlayerController.initialize();_chewieController = ChewieController(videoPlayerController: _videoPlayerController,aspectRatio: _videoPlayerController.value.aspectRatio,autoPlay: true,looping: false);}void dispose() {try {_videoPlayerController.dispose();_chewieController.dispose();} catch (e) {print(e);}super.dispose();}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("圖片選擇器"),),body: ListView(padding: EdgeInsets.all(10),children: [Center(child: ElevatedButton(onPressed: _imagePickerGallery, child: Text("圖片-選擇相冊"))),Center(child: ElevatedButton(onPressed: _imagePickerCamera, child: Text("圖片-選擇相機"))),Center(child: ElevatedButton(onPressed: _videoPickerGallery, child: Text("視頻-選擇相冊"))),Center(child: ElevatedButton(onPressed: _videoPickerCamera, child: Text("視頻-選擇相機"))),SizedBox(height: 20),// 展示圖片或者視頻_showImageOrVideoWidget()],),);}
}
  1. 效果圖
    在這里插入圖片描述
  2. 上傳文件(未測試,先記錄)
  _uploadFile(String imagePath) async {var formData = FormData.fromMap({'name': 'wendux', 'age': 25, 'file': await MultipartFile.fromFile(imagePath, filename: 'aaa.png')}); var response = await Dio().post('https://xxx/imgupload', data: formData);print(response); }
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73562.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋與力扣刷題(藍橋 星期計算)

題目&#xff1a;已知今天是星期六&#xff0c;請問 20^22 天后是星期幾? 注意用數字 1 到 7 表示星期一到星期日。 本題為填空題&#xff0c;只需要算出結果后&#xff0c;在代碼中使用輸出語句將所填結果輸出即可。 解題思路&#xff0b;代碼&#xff1a; 代碼&#xff1…

向量數據庫原理及選型

向量數據庫 什么是向量什么是向量數據庫原理應用場景 向量數據庫的選型主流向量數據庫介紹向量數據庫對比主流向量數據庫對比表 選型建議 什么是向量 向量是一組有序的數值&#xff0c;表示在多維空間中的位置或方向。向量通常用一個列或行的數字集合來表示&#xff0c;這些數…

以實現生產制造、科技研發、人居生活等一種或多種復合功能的智慧油站開源了

AI視頻監控平臺簡介 AI視頻監控平臺是一款功能強大且簡單易用的實時算法視頻監控系統。它的愿景是最底層打通各大芯片廠商相互間的壁壘&#xff0c;省去繁瑣重復的適配流程&#xff0c;實現芯片、算法、應用的全流程組合&#xff0c;從而大大減少企業級應用約95%的開發成本。用…

小程序網絡大文件緩存方案

分享一個小程序網絡大圖加載慢的解決方案 用到的相關api getSavedFileList 獲取已保存的文件列表&#xff1b;getStorageSync 獲取本地緩存&#xff1b;downloadFile 下載網絡圖片&#xff1b;saveFile 保存文件到本地&#xff1b;setStorage 將數據儲存到小程序本地緩存&…

軟考系統架構師 — 3 操作系統

目錄 3.1 考點分析 3.1 操作系統概述 3.1.1 操作系統的功能 3.1.2 操作系統的分類 3.1.3 嵌入式操作系統主要特點 3.2 進程 3.2.1 進程的組成和狀態 3.2.2 前趨圖與進程資源圖&#xff08;重點&#xff09; 3.2.3 進程同步與互斥 3.2.4 進程調度 3.2.5 死鎖 3.3 線…

PE,ELF,COFF

本文來自 (1)騰訊元寶 (2)程序員的自我修養 PE&#xff08;Portable Executable&#xff09;是一種文件格式&#xff0c;主要用于Windows操作系統中的可執行文件&#xff08;如.exe、.dll、.sys等&#xff09;。PE格式是Windows操作系統中標準的可執行文件格式&#xff0c;由…

MySQL 在 CentOS 7 上安裝的步驟指南

目錄 1. 卸載不需要的環境 2. 獲取 MySQL YUM 倉庫 3. 安裝 MySQL 4. 啟動 MySQL 服務 5. 獲取臨時 Root 密碼 6. 登錄 MySQL 7. 更改 Root 密碼 8. 設置 MySQL 開機自啟動 9. 配置 MySQL 編碼 10. 重啟 MySQL 配置生效 11. 常見問題解決 1. 卸載不需要的環境 如果…

C++初階——類和對象(三) 構造函數、析構函數

C初階——類和對象&#xff08;三&#xff09; 上期內容&#xff0c;我們圍繞類對象模型的大小計算&#xff0c;成員存儲方式&#xff0c;this指針&#xff0c;以及C實現棧和C語言的比較&#xff0c;進一步認識了C的封裝特性。本期內容&#xff0c;我們開始介紹類的默認成員函…

【NLP】 5. Word Analogy Task(詞類比任務)與 Intrinsic Metric(內在度量)

Word Analogy Task&#xff08;詞類比任務&#xff09; 定義&#xff1a;Word Analogy Task 是用于評估詞向量質量的內在指標&#xff08;Intrinsic Metric&#xff09;。該任務基于這樣的假設&#xff1a;如果詞向量能夠捕捉單詞之間的語義關系&#xff0c;那么這些關系應該能…

矩陣冪(矩陣k次冪)

矩陣冪 #include<stdio.h> //矩陣乘法 void cf(int a[20][20],int b[20][20],int result[20][20],int n){for(int i0;i<n;i){for(int j0;j<n;j){result[i][j]0;for(int k0;k<n;k){result[i][j]a[i][k]*b[k][j];}}} }void print(int a[20][20],int n){for(int…

信火一體作戰模式運用特點分析及對一體化防空反導能力建設的啟示

文章目錄 內容摘要1. 引言2. 信火一體作戰模式在現代戰爭中的新內涵和特征2.1 充當火力和信息要素的作戰單元種類更加豐富2.2 信息利用更加凸顯異構平臺間的數據共享和情報融合2.3 作戰環節上更加強調指揮決策的敏捷性和智能化3. 增強防空反導能力的舉措建議3.1 強化各類作戰單…

樣本是怎么估計總體的

樣本是怎么估計總體的 flyfish 1. 什么是樣本估計總體&#xff1f; 樣本估計總體是指通過樣本數據&#xff08;例如100人的身高&#xff09;推斷總體參數&#xff08;例如全國人口的平均身高&#xff09;。核心方法包括&#xff1a; 點估計&#xff1a;用樣本統計量直接估計…

自己動手打造AI Agent:基于DeepSeek-R1+websearch從零構建自己的Manus深度探索智能體AI-Research

第一章&#xff1a;AI Agent基礎與DeepSeek-R1架構解析&#xff08;1/10&#xff09; 1.1 AI Agent技術演進與核心價值 人工智能代理&#xff08;AI Agent&#xff09;經歷了從規則驅動到數據驅動的范式轉移。早期基于專家系統的符號主義方法&#xff08;如MYCIN醫療診斷系統…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14_13可展開行的固定表頭表格

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏+關注哦 ?? 目錄 DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14_13可展開行的固…

Gemini Robotics:將人工智能帶入物理世界

25年3月來自谷歌的技術報告“Gemini Robotics: Bringing AI into the Physical World”。 大型多模態模型的最新進展&#xff0c;已使數字領域出現卓越的通才能力&#xff0c;但將其轉化為機器人等物理智體仍然是一項重大挑戰。一般有用的機器人需要能夠理解周圍的物理世界&am…

關于離子濾波小記

粒子濾波&#xff08;Particle Filter, PF&#xff09; 粒子濾波是一種基于蒙特卡洛方法的貝葉斯濾波算法&#xff0c;主要用于解決非線性、非高斯的狀態估計問題。它廣泛應用于機器人定位、目標跟蹤、金融建模等領域。 1. 粒子濾波的基本概念 粒子濾波的核心思想是用一組加權…

機器語言基礎

機器語言是計算機能夠直接識別和執行的二進制代碼語言&#xff0c;由0和1組成。以下是關于機器語言的基本介紹&#xff1a; 特點 - 執行效率高&#xff1a;是計算機硬件直接支持的語言&#xff0c;無需翻譯&#xff0c;執行速度快&#xff0c;能充分發揮計算機的性能。 - 硬…

生活中的可靠性小案例11:窗戶把手斷裂

窗戶把手又斷了&#xff0c;之前也斷過一次&#xff0c;使用次數并沒有特別多。上方的圖是正常的把手狀態&#xff0c;斷的形狀如下方圖所示。 這種懸臂梁結構&#xff0c;沒有一個良好的圓角過渡&#xff0c;導致應力集中。窗戶的開關&#xff0c;對應的是把手的推拉&#xff…

多元時間序列預測的范式革命:從數據異質性到基準重構

本推文介紹了一篇來自中國科學院計算技術研究所等機構的論文《Exploring Progress in Multivariate Time Series Forecasting: Comprehensive Benchmarking and Heterogeneity Analysis》&#xff0c;發表在《IEEE Transactions on Intelligent Transportation Systems》。論文…