import 'dart:io';

import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart'; List<CameraDescription> cameras; void main() async {
/// 获取设备上可用摄像头的列表。
cameras = await availableCameras();
runApp(MyApp());
} class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
} class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
} class _HomePageState extends State<HomePage> {
CameraController _controller;
Future<void> _initializeControllerFuture;
@override
void initState() {
init();
super.initState();
} init() async {
/// 从可用摄像头列表中获取特定摄像头。
final firstCamera = cameras.first; // 要显示摄像机的当前输出
// 创建一个CameraController
_controller = CameraController(
// 从可用摄像头列表中获取特定摄像头
firstCamera,
// 定义要使用的分辨率。
ResolutionPreset.medium,
); // 接下来,初始化控制器。 这将返回一个Future
_initializeControllerFuture = _controller.initialize();
} @override
void dispose() {
_controller?.dispose();
super.dispose();
} @override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
child: Icon(Icons.camera_alt),
onPressed: () async {
try {
// 确保已初始化摄像机。
await _initializeControllerFuture; final path = join(
(await getTemporaryDirectory()).path, '${DateTime.now()}.png');
await _controller.takePicture(path);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DisplayPictureScreen(imagePath: path),
),
);
} catch (e) {
print(e);
}
},
),
body: FutureBuilder<void>(
future: _initializeControllerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
// If the Future is complete, display the preview.
return AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: CameraPreview(_controller),
);
} else {
return Center(child: CircularProgressIndicator());
}
},
),
);
}
} class DisplayPictureScreen extends StatelessWidget {
final String imagePath; const DisplayPictureScreen({Key key, this.imagePath}) : super(key: key); @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Display the Picture')),
body: Image.file(File(imagePath)),
);
}
}

最新文章

  1. UIView上的控件使用push方法跳转
  2. 使用Xmanager访问CentOS远程桌面
  3. FK JavaScript之:ArcGIS JavaScript API之地图动画
  4. Azure ARM (7) ARM Template - 使用Visual Studio编辑
  5. 【BZOJ 3150】新Nim游戏
  6. HTML Table导出为Excel的方法
  7. Jquery操作select,radio,input,p之类
  8. == Rickard Oberg &amp; TheServerSide
  9. ERROR 1005 (HY000): Can&#39;t create table&#39;matrix.system_log&#39; (errno: 150)
  10. thinkphp表单上传文件并将文件路径保存到数据库中
  11. Yii url createUrl redirect相关
  12. 使用windows-SQLyog连接linux-mysql
  13. .NET 4 并行(多核)编程系列之二 从Task开始
  14. 杭电20题 Human Gene Functions
  15. Core Animation 文档翻译 (第七篇)——改变Layer的默认动画
  16. AOF持久化
  17. poi导出Excel直接在浏览器下载
  18. Laravel框架中的event事件操作
  19. Beta阶段冲刺三
  20. Libevent例子(一)

热门文章

  1. P95、P99.9百分位数值——服务响应时间的重要衡量指标
  2. Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署
  3. 玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定
  4. 最短路-Bellmm-ford算法
  5. SparkStreaming算子操作,Output操作
  6. 函数式编程(__slots__)
  7. Spring cloud-Bus (消息总线)
  8. (29)Vim 5
  9. linux(1)Mac上传文件到Linux服务器
  10. P1541 乌龟棋(DP)