• Flutter: 使用相机拍照


    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)),
        );
      }
    }
    
  • 相关阅读:
    待重写
    待重写
    待重写
    ReflectionUtils使用
    kafka消费组、消费者
    待重写
    Map接口常用实现类学习
    利用httpClient发起https请求
    sql常用格式化函数及字符串函数
    method reference
  • 原文地址:https://www.cnblogs.com/ajanuw/p/11029637.html
Copyright © 2020-2023  润新知