Flutter: 使用相机拍照

匿名 (未验证) 提交于 2019-12-02 23:43:01
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)),     );   } }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!