step 9 : clock in & clock out selfie sudah bisa, need fix at clear camera controller after take photo
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user