当前位置: 首页 > news >正文

我想来做外贸网站来推广成都微信网站设计

我想来做外贸网站来推广,成都微信网站设计,襄阳seo优化服务,全能网站建设Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 目录 Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 一、简单介绍 二、简单介绍 camera 三、安装 camera 四、简单案例实现 五、关键代码 一、简单…Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 目录 Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 一、简单介绍 二、简单介绍 camera 三、安装 camera 四、简单案例实现 五、关键代码 一、简单介绍 Flutter 是一款开源的 UI 软件开发工具包由 Google 开发和维护。它允许开发者使用一套代码同时构建跨平台的应用程序包括移动设备iOS 和 Android、Web 和桌面平台Windows、macOS 和 Linux。 Flutter 使用 Dart 编程语言它可以将代码编译为 ARM 或 Intel 机器代码以及 JavaScript从而实现快速的性能。Flutter 提供了一个丰富的预置小部件库开发者可以根据自己的需求灵活地控制每个像素从而创建自定义的、适应性强的设计这些设计在任何屏幕上都能呈现出色的外观和感觉。 二、简单介绍 camera 网址camera | Flutter package 一个用于iOS、Android和Web的Flutter插件允许访问设备摄像头。 三、安装 camera 1、直接运行命令 使用 Flutterflutter pub add camera 使用 Flutter 安装权限管理插件flutter pub add permission_handler 使用 Flutter 安装图片保存插件flutter pub add permission_handler 2、或者在 pubspec.yaml 添加 dependencies:camera: ^0.11.1permission_handler: ^11.4.0saver_gallery: ^4.0.1 四、简单案例实现 1、这里使用 Android Studio 进行创建 Flutter 项目 2、创建一个 application 的 Flutter 项目 3、工程创建后如下 4、添加权限 uses-permission android:nameandroid.permission.CAMERA/uses-permission android:nameandroid.permission.READ_EXTERNAL_STORAGE/uses-permission android:nameandroid.permission.WRITE_EXTERNAL_STORAGE/ 5、编写代码实现打开相机预览拍照功能 6、连接设备运行项目简单效果如下 五、关键代码 import dart:async; import dart:io; import dart:typed_data; import package:camera/camera.dart; import package:flutter/material.dart; import package:path_provider/path_provider.dart show getExternalStorageDirectory; import package:path/path.dart as path show join; import package:permission_handler/permission_handler.dart;// 应用入口点 Futurevoid main() async {// 确保 Flutter 的 WidgetsBinding 已初始化WidgetsFlutterBinding.ensureInitialized();// 请求存储权限await requestPermissions();// 获取设备上所有可用的摄像头列表final cameras await availableCameras();runApp(MaterialApp(theme: ThemeData.dark(), // 使用暗色主题home: TakePictureScreen(cameras: cameras), // 传入摄像头列表),); }// 请求存储权限的函数 Futurevoid requestPermissions() async {// 检查存储权限的状态var status await Permission.storage.status;if (!status.isGranted) {// 如果权限未开启则请求权限await Permission.storage.request();} }// TakePictureScreen 页面 class TakePictureScreen extends StatefulWidget {// 构造函数传入摄像头列表const TakePictureScreen({super.key, required this.cameras});final ListCameraDescription cameras;overrideTakePictureScreenState createState() TakePictureScreenState(); }// TakePictureScreen 的状态管理 class TakePictureScreenState extends StateTakePictureScreen {late CameraController _controller; // 摄像头控制器late Futurevoid _initializeControllerFuture; // 初始化摄像头的 Futureint _selectedCameraIndex 0; // 当前选中的摄像头索引overridevoid initState() {super.initState();// 初始化当前选中的摄像头_initializeCamera(widget.cameras[_selectedCameraIndex]);}// 初始化摄像头的函数void _initializeCamera(CameraDescription camera) {_controller CameraController(camera, // 摄像头描述ResolutionPreset.medium, // 设置分辨率);_initializeControllerFuture _controller.initialize(); // 初始化摄像头}// 切换摄像头的函数void _switchCamera() {setState(() {// 切换到下一个摄像头_selectedCameraIndex (_selectedCameraIndex 1) % widget.cameras.length;// 释放当前摄像头资源_controller.dispose();// 初始化新的摄像头_initializeCamera(widget.cameras[_selectedCameraIndex]);});}overridevoid dispose() {// 释放摄像头资源_controller.dispose();super.dispose();}overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text(Take a picture)), // 页面标题body: FutureBuildervoid(future: _initializeControllerFuture, // 监听摄像头初始化的 Futurebuilder: (context, snapshot) {if (snapshot.connectionState ConnectionState.done) {// 如果摄像头初始化完成显示摄像头预览return CameraPreview(_controller);} else {// 如果摄像头初始化未完成显示加载动画return const Center(child: CircularProgressIndicator());}},),floatingActionButton: Column(mainAxisAlignment: MainAxisAlignment.end,children: [// 拍照按钮FloatingActionButton(onPressed: () async {try {await _initializeControllerFuture; // 确保摄像头已初始化final image await _controller.takePicture(); // 拍照print(Image path: ${image.path});// 读取图片文件为字节数据final file File(image.path);final imageBytes await file.readAsBytes();print(Image bytes length: ${imageBytes.length});// 手动保存图片到指定路径final saveResult await saveImageManually(imageBytes);ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(saveResult)),);} catch (e) {print(Error taking picture: $e);}},child: const Icon(Icons.camera_alt), // 拍照图标),const SizedBox(height: 16),// 切换摄像头按钮FloatingActionButton(onPressed: _switchCamera, // 切换摄像头child: const Icon(Icons.switch_camera), // 切换摄像头图标),],),);} }// 手动保存图片到指定路径的函数 FutureString saveImageManually(Uint8List imageBytes) async {// 获取外部存储路径final directory await getExternalStorageDirectory();if (directory null) {throw Exception(Failed to get external storage directory.);}// 拼接目标路径final picturesDir path.join(directory.path, Pictures, CameraApp);// 确保目标目录存在await Directory(picturesDir).create(recursive: true);// 生成文件名final fileName camera_image_${DateTime.now().millisecondsSinceEpoch}.jpg;final filePath path.join(picturesDir, fileName);// 写入文件final file File(filePath);await file.writeAsBytes(imageBytes);print(Image saved manually to: $filePath);return Image saved to: $filePath; } 代码说明 代码结构清晰每个函数和逻辑块都有详细的注释解释了其功能和实现方式。 关键点解释 如何初始化摄像头。 如何切换摄像头。 如何保存图片到指定路径。 错误处理在关键操作中添加了错误处理逻辑并打印了错误信息。 用户交互通过 SnackBar 提示用户图片保存成功或失败。
http://www.w-s-a.com/news/770425/

相关文章:

  • 设计网站公司收费西安小程序开发公司有哪些
  • 如何建网站赚取佣金哪个网站可以做免费宣传
  • 万网手机网站seo方法
  • 免费制作网站app百度首页纯净版
  • 支持api网站开发wordpress排版Markdown
  • 赤峰做网站的logo设计软件在线制作
  • iis网站批量导入苏州最新新闻事件今天
  • 甘肃省住房和城乡建设厅注册中心网站首页沈阳专业关键词推广
  • 网站怎么能在百度搜到网站开发费怎么做会计分录
  • 嘉定专业网站制作公司七星彩网站开发
  • 网站建设人员培训企业网站开发模型图
  • 自己开发一个网站应该怎么做国外设计网站 绿色的
  • 南昌外贸网站设计推广任务发布平台app
  • 建立网站成本书店网站建设可行性分析
  • 高端网站设计官网乌海学校网站建设
  • 哪些网站适合新手编程做项目优秀网页设计赏析
  • 永州网站seo德阳网站建设优化
  • 网站建设高端网站本地建设网站软件下载
  • 网站后台账号密码破解杭州酒店网站设计公司推荐
  • 和县网站开发秦皇岛建设工程信息网站
  • 国外网站用什么dns好建一个下载网站要什么cms系统
  • 礼品工艺品网站建设手机做网站哪家好
  • 泉州网站建设方案维护怎样选择网站建设
  • 江苏建站速度忿先进的网站建设
  • 广州天河建站公司com域名注册多少钱
  • 成都网站建设推广好vs2013如何做网站
  • 茶叶网站建设模板企业网站备案要多少钱
  • 怎么查网站找谁做的win主机伪静态规则 wordpress
  • 轻云服务器菁英版 多个网站北京it外包服务商
  • 售后服务 网站建设阳江seo优化