step 9 : clock in & clock out selfie sudah bisa, need fix at clear camera controller after take photo

This commit is contained in:
sindhu
2024-08-27 14:13:00 +07:00
parent 3806462d7b
commit a7d83956ec
5 changed files with 475 additions and 178 deletions

View File

@@ -1,33 +1,63 @@
import 'dart:convert';
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;
import 'package:shared_preferences/shared_preferences.dart';
final imgPhotoWebProvider = StateProvider<String?>((ref) => "");
final cameraControllerProvider =
StateNotifierProvider<CameraControllerNotifier, CameraController?>(
(ref) => CameraControllerNotifier());
StateNotifierProvider<CameraControllerNotifier, CameraController?>((ref) {
return CameraControllerNotifier();
});
// StateNotifier to manage CameraController
class CameraControllerNotifier extends StateNotifier<CameraController?> {
CameraControllerNotifier() : super(null);
Future<void> initializeCamera(CameraDescription camera) async {
final controller = CameraController(camera, ResolutionPreset.medium);
await controller.initialize();
state = controller;
CameraControllerNotifier() : super(null) {
_initializeCamera();
}
Future<String> takePicture() async {
if (state == null || !state!.value.isInitialized) {
throw Exception('Camera is not initialized');
Future<void> _initializeCamera() async {
WidgetsFlutterBinding.ensureInitialized();
try {
final cameras = await availableCameras();
if (cameras.isNotEmpty) {
final controller = CameraController(cameras[0], ResolutionPreset.max);
await controller.initialize();
state = controller;
}
} catch (e) {
print('Error initializing camera: $e');
}
}
final path = p.join(
(await getTemporaryDirectory()).path,
'${DateTime.now()}.png',
);
Future<void> takePicture(
// ValueNotifier<XFile?> imageFile,
ValueNotifier<String> base64ImageString,
ValueNotifier<String> imagePath,
) async {
// final flag = ValueNotifier<bool>(false);
if (state != null) {
try {
final image = await state!.takePicture();
final bytes = await image.readAsBytes();
String base64Image = base64Encode(bytes);
await state!.takePicture();
return path;
// imageFile.value = image;
base64ImageString.value = base64Image;
imagePath.value = image.path;
// final shared = await SharedPreferences.getInstance();
// shared.setString("base64Image", base64Image);
} catch (e) {
print('Error taking picture: $e');
// flag.value = false;
// RespErr(flag: false, message: 'Error taking picture: $e');
}
} else {
print('CameraController is not initialized.');
}
}
@override