flutter - 为 future 的可用相机列表初始化相机

标签 flutter dart flutter-dependencies

我正在使用直接从 pub.dev 获得的这段代码来初始化相机并创建可用相机列表

该列表是在 Future main() 函数中创建的,但当我导航到 CameraApp 页面时它不会被自动调用。有人遇到过这个问题吗?当使用此代码导航到页面时,如何初始化相机并创建可用相机列表?请帮忙,谢谢。

/// CameraApp is the Main Application.
class CameraApp extends StatelessWidget {
  /// Default Constructor
  const CameraApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: CameraExampleHome(),
    );
  }
}

List<CameraDescription> _cameras = <CameraDescription>[];

Future<void> main() async {
  // Fetch the available cameras before initializing the app.
  try {
    WidgetsFlutterBinding.ensureInitialized();
    _cameras = await availableCameras();
  } on CameraException catch (e) {
    _logError(e.code, e.description);
  }
  runApp(const CameraApp());
}

这是我从按钮内部调用 CameraApp 函数的代码:

ElevatedButton(
              onPressed: () 
              {Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => CameraApp()));},
              child: const Text('Camera'),
              style: ElevatedButton.styleFrom(
                  minimumSize: const Size(160.0, 35.0)),

            ),

最佳答案

您可以创建一种单例来管理相机操作。

class CameraManager {
  // Declare your camera list here
  List<CameraDescription> _cameras = <CameraDescription>[];

  // Constructor
  CameraManager._privateConstructor() {}

  // initialise instance
  static final CameraManager instance =
      CameraManager._privateConstructor();

  // Add a getter to access camera list
  List<CameraDescription> get cameras => _cameras;

  // Init method
  init() async {
    try {
      _cameras = await availableCameras();
    } on CameraException catch (e) {
      _logError(e.code, e.description);
    }
  }

  // other needed methods to manage camera
  ...
}

然后在你的main函数中

Future<void> main() async {
  // Fetch the available cameras before initializing the app.
  try {
    WidgetsFlutterBinding.ensureInitialized();
    await CameraManager.instance.init();
  }
  runApp(const CameraApp());
}

然后在应用程序的其他部分,您可以使用 CameraManager.instance.* 导入单例和访问方法和属性,例如 CameraManager.instance.cameras 访问_cameras 通过 getter。

关于flutter - 为 future 的可用相机列表初始化相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72860060/

相关文章:

Flutter FittedBox/Expand/Flex 基于列中的小部件

指定位置找不到Flutter SDK

flutter - 从外部小部件更新提供程序类

google-maps - 未处理的异常:PlatformException(错误,java.lang.IllegalStateException:试图创建一个已经创建的平台 View , View ID:0

flutter - 使用 File Picker 将 PlatformFile 转换为 Flutter 中的文件

flutter - 如何使用DIO设置 flutter POST方法?

flutter - BottomNavigationBar无法应用背景图像-Flutter

firebase - Dart中的Google Firebase和API:生成访问 token 和自定义访问 token

firebase - 如何从子集合文档中获取数据,firestore(Flutter)

firebase - Flutter:关于数据更改的 Firebase 推送通知