Commit af6dfec2 authored by Dio Maulana's avatar Dio Maulana

fixed error camera permission and slicing done

parent 588665f2
...@@ -7,10 +7,11 @@ bool debug = true; ...@@ -7,10 +7,11 @@ bool debug = true;
late SharedPreferences prefs; late SharedPreferences prefs;
String titleApp = 'Excelso Attendances'; String titleApp = 'Excelso Attendances';
void main() { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
setPathUrlStrategy(); setPathUrlStrategy();
runApp(const MyApp()); runApp(const MyApp());
} }
......
...@@ -41,6 +41,9 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -41,6 +41,9 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
bool pictureIsTaken = false; bool pictureIsTaken = false;
bool isPhone = false; bool isPhone = false;
// bool isPermissionAccept = true;
// String? errorCamera;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
...@@ -62,10 +65,10 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -62,10 +65,10 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
getCameraDescrption().then((value) { getCameraDescrption().then((value) {
cameras = value; cameras = value;
if (cameras!.length > 1) { if (cameras!.length > 1) {
_cameraDescription = cameras![1]; _cameraDescription = cameras!.last;
} else { } else {
if (cameras!.isNotEmpty) { if (cameras!.isNotEmpty) {
_cameraDescription = cameras![0]; _cameraDescription = cameras!.first;
} else { } else {
_cameraDescription = null; _cameraDescription = null;
} }
...@@ -83,6 +86,25 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -83,6 +86,25 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
_initializeControllerFuture = _controller!.initialize(); _initializeControllerFuture = _controller!.initialize();
}); });
} }
}).catchError((e) {
if (e is CameraException) {
switch (e.code) {
case 'CameraAccessDenied':
// setState(() {
// isPermissionAccept = false;
// });
Navigator.pushNamedAndRemoveUntil(
context, Routes.errorCamera, (route) => false);
default:
// setState(() {
// errorCamera = "$e";
// });
if (debug) {
// ignore: avoid_print
print("CAMERA PERMISSION PROB ERROR: $e");
}
}
}
}); });
} }
...@@ -106,6 +128,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -106,6 +128,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
return Column( return Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
// (isPermissionAccept) ?
(_initializeControllerFuture != null) (_initializeControllerFuture != null)
? FutureBuilder( ? FutureBuilder(
future: _initializeControllerFuture, future: _initializeControllerFuture,
...@@ -321,12 +344,12 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -321,12 +344,12 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
if (cameras!.length > 1) { if (cameras!.length > 1) {
setState(() { setState(() {
if (_cameraDescription == if (_cameraDescription ==
cameras![0]) { cameras!.first) {
_cameraDescription = _cameraDescription =
cameras![1]; cameras!.last;
} else { } else {
_cameraDescription = _cameraDescription =
cameras![0]; cameras!.first;
} }
_controller = CameraController( _controller = CameraController(
...@@ -362,6 +385,57 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -362,6 +385,57 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
}), }),
) )
: const Center(child: CircularProgressIndicator()) : const Center(child: CircularProgressIndicator())
// : Center(
// child: Padding(
// padding: EdgeInsets.symmetric(
// horizontal: AppPadding.p20,
// ),
// child: Column(
// children: [
// Text(
// "Silakan aktifkan permission kamera pada pengaturan browser anda",
// style: getBoldStyle(
// color: Colors.black,
// fontSize: 16,
// ),
// textAlign: TextAlign.center,
// ),
// (errorCamera != null)
// ? Container(
// margin: const EdgeInsets.only(
// top: 10,
// ),
// child: Text(
// "Error; $errorCamera",
// style: getBoldStyle(
// color: Colors.black,
// fontSize: 16,
// ),
// ),
// )
// : const SizedBox(),
// // const SizedBox(
// // height: 10,
// // ),
// // CustomButton(
// // text: "Aktifkan kamera",
// // onTap: () async {
// // final perm = await html.window.navigator.permissions!
// // .query({"name": "camera"});
// // if (perm.state == "denied") {
// // print("DENIED");
// // await html.window.navigator
// // .getUserMedia(audio: true, video: true);
// // return;
// // }
// // final stream = await html.window.navigator
// // .getUserMedia(video: true);
// // },
// // )
// ],
// ),
// ),
// )
], ],
); );
} }
......
// ignore_for_file: sized_box_for_whitespace
import 'package:excelso_attendance/helper/widget_responsive.dart';
import 'package:excelso_attendance/resource/colors.dart';
import 'package:excelso_attendance/resource/style.dart';
import 'package:flutter/material.dart';
class ErrorCameraView extends StatelessWidget {
const ErrorCameraView({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: ColorManager.backgroundColor,
body: ScreenResponsive(
widget: Container(
width: double.infinity,
height: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"Silakan aktifkan permission kamera pada pengaturan browser anda",
style: getBoldStyle(
color: Colors.black,
fontSize: 16,
),
textAlign: TextAlign.center,
),
],
),
),
widthScreen: MediaQuery.of(context).size.width,
),
);
}
}
...@@ -6,10 +6,35 @@ import 'package:excelso_attendance/resource/routes.dart'; ...@@ -6,10 +6,35 @@ import 'package:excelso_attendance/resource/routes.dart';
import 'package:excelso_attendance/resource/size.dart'; import 'package:excelso_attendance/resource/size.dart';
import 'package:excelso_attendance/resource/style.dart'; import 'package:excelso_attendance/resource/style.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
// ignore: avoid_web_libraries_in_flutter
import 'dart:html' as html;
class OnBoardingView extends StatelessWidget { class OnBoardingView extends StatefulWidget {
const OnBoardingView({super.key}); const OnBoardingView({super.key});
@override
State<OnBoardingView> createState() => _OnBoardingViewState();
}
class _OnBoardingViewState extends State<OnBoardingView> {
@override
void initState() {
super.initState();
getUserPermission();
// final perm =
// await html.window.navigator.permissions!.query({"name": "camera"});
// if (perm.state == "denied") {
// // ignore: use_build_context_synchronously
// Navigator.pushNamedAndRemoveUntil(
// context, Routes.errorCamera, (route) => false);
// return;
// }
}
void getUserPermission() async {
await html.window.navigator.getUserMedia(audio: true, video: true);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
......
...@@ -2,6 +2,7 @@ import 'package:excelso_attendance/helper/arguments/route_args.dart'; ...@@ -2,6 +2,7 @@ import 'package:excelso_attendance/helper/arguments/route_args.dart';
import 'package:excelso_attendance/main.dart'; import 'package:excelso_attendance/main.dart';
import 'package:excelso_attendance/page/absent_camera/absent_camera.dart'; import 'package:excelso_attendance/page/absent_camera/absent_camera.dart';
import 'package:excelso_attendance/page/absent_success/absent_success.dart'; import 'package:excelso_attendance/page/absent_success/absent_success.dart';
import 'package:excelso_attendance/page/error/error_camera.dart';
import 'package:excelso_attendance/page/home/home.dart'; import 'package:excelso_attendance/page/home/home.dart';
import 'package:excelso_attendance/page/onboarding/onboarding.dart'; import 'package:excelso_attendance/page/onboarding/onboarding.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
...@@ -12,6 +13,7 @@ class Routes { ...@@ -12,6 +13,7 @@ class Routes {
static const String home = "/home"; static const String home = "/home";
static const String absentCamera = "/absent-camera"; static const String absentCamera = "/absent-camera";
static const String absentSuccess = "/absent-success"; static const String absentSuccess = "/absent-success";
static const String errorCamera = "/error-camera";
} }
class RouteGenerator { class RouteGenerator {
...@@ -36,6 +38,9 @@ class RouteGenerator { ...@@ -36,6 +38,9 @@ class RouteGenerator {
case Routes.absentSuccess: case Routes.absentSuccess:
return pageRouteCustom(const AbsentSuccessView(), return pageRouteCustom(const AbsentSuccessView(),
nameRoute: Routes.absentSuccess); nameRoute: Routes.absentSuccess);
case Routes.errorCamera:
return pageRouteCustom(const ErrorCameraView(),
nameRoute: Routes.errorCamera);
default: default:
return unDefinedRoute(); return unDefinedRoute();
} }
...@@ -64,15 +69,15 @@ class RouteGenerator { ...@@ -64,15 +69,15 @@ class RouteGenerator {
), ),
transitionDuration: Duration.zero, transitionDuration: Duration.zero,
reverseTransitionDuration: Duration.zero, reverseTransitionDuration: Duration.zero,
settings: RouteSettings( // settings: RouteSettings(
name: nameRoute.replaceFirst("/", ""), arguments: args), // name: nameRoute.replaceFirst("/", ""), arguments: args),
); );
} else { } else {
return PageRouteBuilder( return PageRouteBuilder(
pageBuilder: (context, a, b) => target, pageBuilder: (context, a, b) => target,
transitionDuration: Duration.zero, transitionDuration: Duration.zero,
reverseTransitionDuration: Duration.zero, reverseTransitionDuration: Duration.zero,
settings: RouteSettings(name: nameRoute.replaceFirst("/", "")), // settings: RouteSettings(name: nameRoute.replaceFirst("/", "")),
); );
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment