如何在flutter中使用设备的手电筒?

问题描述 投票:0回答:2

我想在我的 flutter 应用程序中使用设备的手电筒,以一定的时间间隔打开和关闭它,并且我正在寻找一种使用它的方法。

我在 pub.dev 上找到的所有软件包目前都不兼容 dart 3,所以我想知道您知道是否有其他软件包可以帮助我解决这个问题,或者我是否可以在没有软件包的情况下以某种方式做到这一点?

谢谢

flutter dart flashlight
2个回答
0
投票

有几个包(兼容 Dart 3)用于使用设备的手电筒,如下:

  • torch_controller 用于切换手电筒、检查手电筒状态等

  • torch_light 用于管理设备火炬

  • 您还可以使用类

    android.hardware.camera2.CameraManager
    来访问
    Android
    的火炬。


0
投票

使用相机依赖项:

import 'package:camera/camera.dart';
import 'package:flutter/material.dart';

class CameraFlashLightScreen extends StatefulWidget {
  const CameraFlashLightScreen({super.key});

  @override
  State<CameraFlashLightScreen> createState() => _CameraFlashLightScreenState();
}

class _CameraFlashLightScreenState extends State<CameraFlashLightScreen> {
  late CameraController cameraController;
  late Future<void> cameraInitializeFuture;
  late bool _isFlashOn = false;

  @override
  void initState() {
    super.initState();
    cameraInitializeFuture = initializeCamera();
  }

  Future<void> initializeCamera() async {
    final cameras = await availableCameras();
    final backCamera = cameras.firstWhere(
      (camera) => camera.lensDirection == CameraLensDirection.back,
      orElse: () => cameras.first,
    );

    cameraController = CameraController(
      backCamera,
      ResolutionPreset.low,
    );

    await cameraController.initialize();
  }

  Future<void> toggleFlashLight() async {
    try {
      if (_isFlashOn) {
        await cameraController.setFlashMode(FlashMode.off);
      } else {
        await cameraController.setFlashMode(FlashMode.torch);
      }
      setState(() {
        _isFlashOn = !_isFlashOn;
      });
    } catch (e) {}
  }

  @override
  void dispose() {
    cameraController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flashlight App'),
      ),
      body: FutureBuilder<void>(
        future: cameraInitializeFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return Center(
              child: ElevatedButton(
                onPressed: toggleFlashLight,
                child: Text(
                    _isFlashOn ? 'Turn Off Flashlight' : 'Turn On Flashlight'),
              ),
            );
          } else {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
        },
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.