环境
Flutter 3.29
macOS Sequoia 15.4.1
Xcode 16.3
集成
- 创建一个带有 State 类的 StatefulWidget 组件
- 添加一个变量到 State 类来存放 CameraController
- 添加另外一个变量到 State 类中来存放 CameraController.initialize() 返回的 Future
- 在 initState() 方法中创建并初始化控制器
- 在 dispose() 方法中销毁控制器
创建并初始化 CameraController
新建take_photo.dart文件,输入stf快捷创建一个有状态的Widget,命名为TakePictureScreen
class TakePictureScreen extends StatefulWidget {
const TakePictureScreen({
super.key, required this.cameras});
/// 1.接收调用时传入的摄像头列表
final List<CameraDescription> cameras;
TakePictureScreenState createState() => TakePictureScreenState();
}
class TakePictureScreenState extends State<TakePictureScreen> {
/// 2. 相机控制器
late CameraController _controller;
/// 3. Future类型存放CameraController初始化返回的Future
late Future<void> _initializeControllerFuture;
}
在 initState 方法中创建并初始化控制器
class TakePictureScreenState extends State<TakePictureScreen> {
/// 根据camera的原生代码,从availableCameras获取可用摄像头列表时,后置索引为0
/**
switch device.position {
case .back:
lensFacing = .back
case .front:
lensFacing = .front
case .unspecified:
lensFacing = .external
...
reply.append(cameraDescription)
*/
int frontCamera = 0;
...
void initState() {
super.initState();
/// 设置初始化后置摄像头
_controller = CameraController(
widget.cameras[frontCamera],
/// 清晰度
ResolutionPreset.medium,
);
_initializeControllerFuture = _controller.initialize();
}
...
预览
使用CameraPreview类实现相机的预览
FutureBuilder<void>(
future: _initializeControllerFuture,

最低0.47元/天 解锁文章
1327

被折叠的 条评论
为什么被折叠?



