FreekakeApp/lib/screen/camera_screen.dart
2025-05-07 13:56:17 +07:00

102 lines
2.7 KiB
Dart

import 'dart:io';
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
class CameraScreen extends StatefulWidget {
const CameraScreen({super.key});
@override
_CameraScreenState createState() => _CameraScreenState();
}
class _CameraScreenState extends State<CameraScreen> {
CameraController? controller;
List<CameraDescription>? cameras;
XFile? capturedImage;
@override
void initState() {
super.initState();
initCamera();
}
Future<void> initCamera() async {
await Permission.camera.request();
if (await Permission.camera.isGranted) {
cameras = await availableCameras();
controller = CameraController(cameras![0], ResolutionPreset.high);
await controller!.initialize();
setState(() {}); // update UI setelah kamera siap
}
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (controller == null || !controller!.value.isInitialized) {
return Center(child: CircularProgressIndicator());
}
return Scaffold(
appBar: AppBar(
title: Text('Camera'),
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.pop(context);
},
),
),
body: Stack(
children: [
CameraPreview(controller!),
if (capturedImage != null)
Positioned.fill(
child: Image.file(File(capturedImage!.path), fit: BoxFit.cover),
),
Align(
alignment: Alignment.bottomCenter,
child: Padding(
padding: const EdgeInsets.only(bottom: 30),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FloatingActionButton(
backgroundColor: Colors.white,
onPressed: () async {
final image = await controller!.takePicture();
setState(() {
capturedImage = image;
});
Navigator.pop(context, capturedImage?.path);
},
child: Icon(Icons.camera_alt, color: Colors.black),
),
],
),
),
),
],
),
// floatingActionButton: FloatingActionButton(
// onPressed: () async {
// final image = await controller!.takePicture();
// print('Gambar disimpan di: ${image.path}');
// // Bisa dilanjutkan untuk upload, crop, dll
// },
// child: Icon(Icons.camera_alt),
// ),
);
}
}