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 createState() => _CaptureScreenState(); } class _CaptureScreenState extends State with WidgetsBindingObserver { @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addPostFrameCallback((_) { context.read().initialize(); }); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void didChangeAppLifecycleState(AppLifecycleState state) { final cameraProvider = context.read(); if (state == AppLifecycleState.paused) { cameraProvider.disposeCamera(); } else if (state == AppLifecycleState.resumed) { cameraProvider.initialize(); } } @override Widget build(BuildContext context) { final cameraProvider = context.watch(); 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('権限を許可する'), ), ], ), ); } }