目录

  • 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移动应用开发 - 照相机调用和访问相簿相关推荐

  1. Flutter面试常见开发问题

    本文主要介绍Flutter面试常见开发问题 Flutter 使用了一种全新的方法,您可以使用 widgets代替 Views .Android 中的 View 主要是布局的一个元素,但在 Flutte ...

  2. 为什么 Flutter 是跨平台开发的终极之选

    跨平台开发是当下最受欢迎.应用最广泛的框架之一.能实现跨平台开发的框架也五花八门,让人眼花缭乱.最流行的跨平台框架有 Xamarin.PhoneGap.Ionic.Titanium.Monaca.Se ...

  3. 为什么Flutter是跨平台开发的终极之选

    作者 | Anchal Malik 译者 | 王强 来源 | 前端之巅 跨平台开发是当下最受欢迎.应用最广泛的框架之一.能实现跨平台开发的框架也五花八门,让人眼花缭乱. 最流行的跨平台框架有 Xama ...

  4. 为什么Flutter是跨平台开发的终极之选,这篇文章可以满足你80%日常工作

    本质上来说,跨平台开发就是"一石二鸟"的开发技术.下面简单解释一下.早期没有跨平台框架的时候,开发者必须为同一应用的各个平台(比如 Android.iOS.Windows 等)分别 ...

  5. 为什么Flutter是跨平台开发的终极之选,android完整项目源码

    它完全免费,彻底开源 可以用来更快地创建应用 出色的用户界面(UI) 节省代码量 可接入平台原生功能 最适合 MVP 开发(最小化可行产品) 较老的设备也使用相同 UI 运行应用 减少测试工作量 更丰 ...

  6. Android开发之调用相机拍照与本地图库选择图片

    引用链接 Android开发之调用相机拍照与本地图库选择图片 Android调用相机实现拍照功能 部分截图 引言 小项目有一个访问相册的需求,在网上查找得到两位大神博客指点,但博客发布时间过旧,难免因 ...

  7. openresty开发系列37--nginx-lua-redis实现访问频率控制

    openresty开发系列37--nginx-lua-redis实现访问频率控制 一)需求背景 在高并发场景下为了防止某个访问ip访问的频率过高,有时候会需要控制用户的访问频次 在openresty中 ...

  8. 如何用 Flutter 实现混合开发?闲鱼公开源代码实例

    2019独角兽企业重金招聘Python工程师标准>>> 具有一定规模的 App 通常有一套成熟通用的基础库,尤其是阿里系 App,一般需要依赖很多体系内的基础库.那么使用 Flutt ...

  9. php开发-如何调用后端服务

    php开发-如何调用后端服务 目录 1.自定义Action 2.自定义一个php文件 3.php文件接收参数并返回值 4.UI如何调用testerp.service.m服务 5.查看运行结果 参考文档 ...

最新文章

  1. WPF纯手工两步打造图片切割工具(一)
  2. 互联网1分钟 |1212
  3. 【Qt】undefined reference to `vtable for xxx’
  4. SAP Fiori :why my filter for category does not work
  5. 反转链表 IIPython解法
  6. 【前端面试】字节跳动2019校招面经 - 前端开发岗(二)
  7. 小程序:自定义组件的实现方法及自定义组件与页面间的数据传递
  8. harbor安装_Harbor任意管理员注册漏洞(CVE-2019-1609) (附:批量利用poc)
  9. java 标识变量_Java变量与数据类型之一:Java编程规范,关键字与标识符
  10. Linux学习笔记(五):less|more的命令使用
  11. 数据库程序设计复习资料
  12. Adobe官方清理工具Adobe Creative Cloud Cleaner Tool使用教程
  13. Code For Better 谷歌开发者之声——Google Play
  14. Vue3.0中文地址文档
  15. 51单片机驱动8位数码管(74HC595驱动)滚动显示
  16. Mysql基本知识1
  17. 收藏这16个顶级思维模型
  18. 小程序获取附近IBeacon设备
  19. R语言Circos图可视化
  20. portal服务器信息超时,某局点iMC-EIA Portal认证提示“向Portal Server发送请求超时”经典案例...

热门文章

  1. Ps 与 3D LUT Creator 联动方法
  2. CSS行间距line-height和字间距、字体间距、字符间距详解
  3. ProjectDay19
  4. 信号各种变换 python实现 DFT,STFT,CWT,DWT
  5. How to fix corrupt HDFS FIles
  6. ❀精度优化❀优化策略1:网络+SAM优化器
  7. 带重叠的图像分割、子图合并
  8. 原码,反码,补码,阶码,移码
  9. 导弹防御系统[导弹拦截系统]
  10. 主程序调用动态库的两种方式,动态库调用主程序的函数