我的代码运行正常,但在 Android-12 之后它开始冻结。它使用“相机:^0.10.5”依赖项。它没有错误也没有结果,只是冻结了。
这是代码。它在 takePicture() 异步调用上冻结。
class TakePictureScreen extends StatefulWidget {
TakePictureScreen({
Key? key,
}) : super(key: key);
final CameraDescription camera = getIt<CameraDescription>();
@override
TakePictureScreenState createState() => TakePictureScreenState();
}
class TakePictureScreenState extends State<TakePictureScreen> with WidgetsBindingObserver {
late CameraController _controller;
late Future<void> _initializeControllerFuture;
void _initializeCameraController() {
_controller = CameraController(
widget.camera,
ResolutionPreset.high,
);
initializeControllerFuture = _controller.initialize();
}
void initializeCameraController() {
_controller = CameraController(
widget.camera,
ResolutionPreset.high,
);
_initializeControllerFuture = _controller.initialize();
}
@override
void initState() {
super.initState();
_initializeCameraController();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (!_controller.value.isInitialized) {
return;
}
if (state == AppLifecycleState.inactive) {
_controller.dispose();
} else if (state == AppLifecycleState.resumed) {
_initializeCameraController();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Images')),
body: FutureBuilder<void>(
future: _initializeControllerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
// If the Future is complete, display the preview.
return CameraPreview(_controller);
} else {
// Otherwise, display a loading indicator.
return const Center(child: CircularProgressIndicator());
}
},
),
// when you click floatingActionButton it takes picture
floatingActionButton: FloatingActionButton(
onPressed: () async {
try {
await _initializeControllerFuture;
//final image = await _controller.takePicture();
final XFile image = await _controller.takePicture();
//image.saveTo("path");
// after taking picture, send it to custom preview screen
context.push(
Routes.checkinPreview,
arguments: ScreenArguments({
"takenPicture": image.path
}),
);
} on CameraException catch (e) {
context.snackbar(e.description ?? "");
context.snackbar(takePictureError);
} on Exception catch (e) {
context.snackbar(takePictureError);
}
},
child: const Icon(Icons.add_a_photo),
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
我尝试升级Flutter版本和整个依赖项。之后,我回顾了相机依赖性剧本并应用了新的示例。还是没有结果。
我也遇到同样的问题,请问你找到解决办法了吗?