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)), ); } }
来源:https://www.cnblogs.com/ajanuw/p/11029637.html