Flutter移动应用开发 - 照相机调用和访问相簿
目录
- 0. 项目简介
- 1. 效果展示
- 2. 部分代码
- passager.dart
0. 项目简介
项目想法脱胎于2023年服务外包大赛A18题 随手买(详情)
整个APP思路如下:
这篇博客主要服务于图片识别中心,在点击按钮后访问相簿或者照相机。
1. 效果展示
2. 部分代码
思路就是利用image_picker中的几个函数操作。
依赖如下
dev_dependencies:flutter_test:sdk: flutter# The "flutter_lints" package below contains a set of recommended lints to# encourage good coding practices. The lint set provided by the package is# activated in the `analysis_options.yaml` file located at the root of your# package. See that file for information about deactivating specific lint# rules and activating additional ones.flutter_screenutil: ^3.1.0image_picker: 0.8.6m_loading: ^0.0.1
相关文件如下
passager.dart
passager.dart
import 'dart:async';
import 'package:final_work/pic_loading.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter/cupertino.dart';
import 'package:image_picker/image_picker.dart';class passenger extends StatefulWidget {const passenger({Key? key}) : super(key: key);@overrideState<passenger> createState() => _passengerState();
}class _passengerState extends State<passenger> {@overridevoid initState() {super.initState();}@overridevoid dispose() {super.dispose();}var _imgPath;/*拍照*/_takePhoto() async {final ImagePicker _picker = ImagePicker();var image = await _picker.pickImage(source: ImageSource.camera);// var image = await ImagePicker.pickImage(source: ImageSource.camera);setState(() {_imgPath = image;});if(_imgPath != null)Navigator.of(context).push(MaterialPageRoute<void>(builder: (BuildContext context) {return pic_loading(imgPath: _imgPath);},),);}/*相册*/_openGallery() async {final ImagePicker _picker = ImagePicker();var image = await _picker.pickImage(source: ImageSource.gallery);// var image = await ImagePicker.pickImage(source: ImageSource.gallery);setState(() {_imgPath = image;});}@overrideWidget build(BuildContext context) {ScreenUtil.init(context, allowFontScaling: false);void _showActionSheet(BuildContext context) {showCupertinoModalPopup<void>(context: context,builder: (BuildContext context) => CupertinoActionSheet(title: const Text('请选择'),// message: const Text('Message'),actions: <CupertinoActionSheetAction>[CupertinoActionSheetAction(isDefaultAction: true,onPressed: _takePhoto,child: const Text('打开相机'),),CupertinoActionSheetAction(onPressed: _openGallery,child: const Text('打开本地相簿'),),CupertinoActionSheetAction(isDestructiveAction: true,onPressed: () {Navigator.pop(context);},child: const Text('取消'),),],),);}void showCupertinoAlertDialog() {showDialog(context: context,builder: (BuildContext context) {return CupertinoAlertDialog(title: Text("“Clark NB”想访问您的相机"),content: Column(children: <Widget>[SizedBox(height: 10,),Align(child: Text("使用相机获取照片用于识别商品"),alignment: Alignment(0, 0),),],),actions: <Widget>[CupertinoDialogAction(child: Text("不允许"),onPressed: () {Navigator.pop(context);},),CupertinoDialogAction(child: Text("好"),onPressed: () {Navigator.pop(context);_showActionSheet(context);},),],);});}// 点击出现相机Widget buildPhoto = Center(child: SizedBox(width: double.maxFinite,child: IconButton(padding: EdgeInsets.zero,onPressed: showCupertinoAlertDialog,tooltip: 'Pick Image',icon: Icon(Icons.add_a_photo,size: 200,),),),);return Scaffold(body: Column(children: <Widget>[SizedBox(height: ScreenUtil().setHeight(240),),buildPhoto,SizedBox(height: ScreenUtil().setHeight(70),),Spacer(),],),);}
}
Flutter移动应用开发 - 照相机调用和访问相簿相关推荐
- Flutter面试常见开发问题
本文主要介绍Flutter面试常见开发问题 Flutter 使用了一种全新的方法,您可以使用 widgets代替 Views .Android 中的 View 主要是布局的一个元素,但在 Flutte ...
- 为什么 Flutter 是跨平台开发的终极之选
跨平台开发是当下最受欢迎.应用最广泛的框架之一.能实现跨平台开发的框架也五花八门,让人眼花缭乱.最流行的跨平台框架有 Xamarin.PhoneGap.Ionic.Titanium.Monaca.Se ...
- 为什么Flutter是跨平台开发的终极之选
作者 | Anchal Malik 译者 | 王强 来源 | 前端之巅 跨平台开发是当下最受欢迎.应用最广泛的框架之一.能实现跨平台开发的框架也五花八门,让人眼花缭乱. 最流行的跨平台框架有 Xama ...
- 为什么Flutter是跨平台开发的终极之选,这篇文章可以满足你80%日常工作
本质上来说,跨平台开发就是"一石二鸟"的开发技术.下面简单解释一下.早期没有跨平台框架的时候,开发者必须为同一应用的各个平台(比如 Android.iOS.Windows 等)分别 ...
- 为什么Flutter是跨平台开发的终极之选,android完整项目源码
它完全免费,彻底开源 可以用来更快地创建应用 出色的用户界面(UI) 节省代码量 可接入平台原生功能 最适合 MVP 开发(最小化可行产品) 较老的设备也使用相同 UI 运行应用 减少测试工作量 更丰 ...
- Android开发之调用相机拍照与本地图库选择图片
引用链接 Android开发之调用相机拍照与本地图库选择图片 Android调用相机实现拍照功能 部分截图 引言 小项目有一个访问相册的需求,在网上查找得到两位大神博客指点,但博客发布时间过旧,难免因 ...
- openresty开发系列37--nginx-lua-redis实现访问频率控制
openresty开发系列37--nginx-lua-redis实现访问频率控制 一)需求背景 在高并发场景下为了防止某个访问ip访问的频率过高,有时候会需要控制用户的访问频次 在openresty中 ...
- 如何用 Flutter 实现混合开发?闲鱼公开源代码实例
2019独角兽企业重金招聘Python工程师标准>>> 具有一定规模的 App 通常有一套成熟通用的基础库,尤其是阿里系 App,一般需要依赖很多体系内的基础库.那么使用 Flutt ...
- php开发-如何调用后端服务
php开发-如何调用后端服务 目录 1.自定义Action 2.自定义一个php文件 3.php文件接收参数并返回值 4.UI如何调用testerp.service.m服务 5.查看运行结果 参考文档 ...
最新文章
- WPF纯手工两步打造图片切割工具(一)
- 互联网1分钟 |1212
- 【Qt】undefined reference to `vtable for xxx’
- SAP Fiori :why my filter for category does not work
- 反转链表 IIPython解法
- 【前端面试】字节跳动2019校招面经 - 前端开发岗(二)
- 小程序:自定义组件的实现方法及自定义组件与页面间的数据传递
- harbor安装_Harbor任意管理员注册漏洞(CVE-2019-1609) (附:批量利用poc)
- java 标识变量_Java变量与数据类型之一:Java编程规范,关键字与标识符
- Linux学习笔记(五):less|more的命令使用
- 数据库程序设计复习资料
- Adobe官方清理工具Adobe Creative Cloud Cleaner Tool使用教程
- Code For Better 谷歌开发者之声——Google Play
- Vue3.0中文地址文档
- 51单片机驱动8位数码管(74HC595驱动)滚动显示
- Mysql基本知识1
- 收藏这16个顶级思维模型
- 小程序获取附近IBeacon设备
- R语言Circos图可视化
- portal服务器信息超时,某局点iMC-EIA Portal认证提示“向Portal Server发送请求超时”经典案例...