import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:mini_tias/providers/camera_provider.dart';
import 'package:mini_tias/widgets/camera_preview.dart';
/// 撮影画面.カメラプレビューとシャッターボタンを表示する.
class CaptureScreen extends StatefulWidget {
const CaptureScreen({super.key});
@override
State<CaptureScreen> createState() => _CaptureScreenState();
}
class _CaptureScreenState extends State<CaptureScreen>
with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
WidgetsBinding.instance.addPostFrameCallback((_) {
context.read<CameraProvider>().initialize();
});
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
final cameraProvider = context.read<CameraProvider>();
if (state == AppLifecycleState.paused) {
cameraProvider.disposeCamera();
} else if (state == AppLifecycleState.resumed) {
cameraProvider.initialize();
}
}
@override
Widget build(BuildContext context) {
final cameraProvider = context.watch<CameraProvider>();
if (cameraProvider.permissionDenied) {
return _buildPermissionDenied(cameraProvider);
}
if (cameraProvider.errorMessage != null && !cameraProvider.isInitialized) {
return Center(child: Text(cameraProvider.errorMessage!));
}
if (!cameraProvider.isInitialized) {
return const Center(child: CircularProgressIndicator());
}
return CameraPreviewWidget(controller: cameraProvider.controller!);
}
Widget _buildPermissionDenied(CameraProvider cameraProvider) {
return Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(cameraProvider.errorMessage ?? 'カメラの権限が必要です'),
const SizedBox(height: 16),
if (cameraProvider.permissionPermanentlyDenied)
ElevatedButton(
onPressed: () => cameraProvider.openSettings(),
child: const Text('設定画面を開く'),
)
else
ElevatedButton(
onPressed: () => cameraProvider.initialize(),
child: const Text('権限を許可する'),
),
],
),
);
}
}