Commit 53de4163 authored by Dio Maulana's avatar Dio Maulana

aktif geo location

parent 67ff122f
class ErrorWidgetArguments {
String errorMessage;
ErrorWidgetArguments({required this.errorMessage});
}
import 'package:excelso_attendance/main.dart';
const String _latitude = 'laU';
const String _longitude = 'loU';
String? getLatitude() {
return prefs.getString(_latitude);
}
Future<void> setLatitude(String value) async {
prefs.setString(_latitude, value);
}
String? getLongitude() {
return prefs.getString(_longitude);
}
Future<void> setLongitude(String value) async {
prefs.setString(_longitude, value);
}
import 'package:excelso_attendance/resource/routes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:url_strategy/url_strategy.dart';
bool debug = true;
late SharedPreferences prefs;
String titleApp = 'Excelso Attendances';
// final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
void main() async {
WidgetsFlutterBinding.ensureInitialized();
setPathUrlStrategy();
configLoading();
SharedPreferences.getInstance().then((value) {
prefs = value;
runApp(const MyApp());
});
}
runApp(const MyApp());
//easy loading
void configLoading() {
EasyLoading.instance
..displayDuration = const Duration(milliseconds: 2000)
..indicatorType = EasyLoadingIndicatorType.fadingCircle
..loadingStyle = EasyLoadingStyle.dark
..indicatorSize = 45.0
..radius = 10.0
..progressColor = Colors.yellow
..backgroundColor = Colors.green
..indicatorColor = Colors.yellow
..textColor = Colors.yellow
..maskColor = Colors.blue.withOpacity(0.5)
..userInteractions = true
..dismissOnTap = false;
}
class MyApp extends StatelessWidget {
......@@ -23,9 +45,11 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
title: titleApp,
// navigatorKey: navigatorKey,
debugShowCheckedModeBanner: false,
onGenerateRoute: RouteGenerator.getRoute,
initialRoute: Routes.onBoarding,
builder: EasyLoading.init(),
);
}
}
......@@ -2,9 +2,11 @@
import 'dart:async';
import 'dart:io';
import 'package:excelso_attendance/helper/arguments/error_args.dart';
import 'package:excelso_attendance/helper/widget_responsive.dart';
import 'package:excelso_attendance/main.dart';
import 'package:excelso_attendance/resource/routes.dart';
import 'package:excelso_attendance/resource/strings.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
import 'dart:typed_data';
......@@ -94,7 +96,13 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
// isPermissionAccept = false;
// });
Navigator.pushNamedAndRemoveUntil(
context, Routes.errorCamera, (route) => false);
context,
Routes.errorWidget,
(route) => false,
arguments: ErrorWidgetArguments(
errorMessage: Strings.cameraNotActive,
),
);
default:
// setState(() {
// errorCamera = "$e";
......
// 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,
),
);
}
}
// ignore_for_file: sized_box_for_whitespace
import 'package:excelso_attendance/helper/component/button.dart';
import 'package:excelso_attendance/helper/widget_responsive.dart';
import 'package:excelso_attendance/main.dart';
import 'package:excelso_attendance/resource/colors.dart';
import 'package:excelso_attendance/resource/size.dart';
import 'package:excelso_attendance/resource/strings.dart';
import 'package:excelso_attendance/resource/style.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:geolocator/geolocator.dart';
class ErrorWidgetView extends StatelessWidget {
const ErrorWidgetView({super.key, required this.messageError});
final String messageError;
@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: [
Container(
margin: EdgeInsets.symmetric(horizontal: AppMargin.m20),
child: const Icon(
Icons.dangerous_outlined,
color: Colors.red,
size: 150,
),
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: AppPadding.p20,
),
child: Text(
messageError,
style: getBoldStyle(
color: Colors.black,
fontSize: 16,
),
textAlign: TextAlign.center,
),
),
(messageError == Strings.locationNotActive)
? GestureDetector(
onTap: () {
Geolocator.requestPermission().then((value) async {
if (value != LocationPermission.denied &&
value != LocationPermission.deniedForever) {
// ignore: use_build_context_synchronously
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (_) => const MyApp(),
),
);
} else {
EasyLoading.showToast(
'Silakan aktifkan lokasi browser anda');
return;
}
});
},
child: Container(
margin: EdgeInsets.only(
top: 15, left: AppMargin.m20, right: AppMargin.m20),
child: const CustomButton(text: "Refresh Halaman"),
),
)
: const SizedBox()
],
),
),
widthScreen: MediaQuery.of(context).size.width,
),
);
}
}
import 'package:excelso_attendance/helper/arguments/error_args.dart';
import 'package:excelso_attendance/helper/pref.dart';
import 'package:excelso_attendance/helper/widget_responsive.dart';
import 'package:excelso_attendance/resource/assets.dart';
import 'package:excelso_attendance/resource/colors.dart';
import 'package:excelso_attendance/resource/font.dart';
import 'package:excelso_attendance/resource/routes.dart';
import 'package:excelso_attendance/resource/size.dart';
import 'package:excelso_attendance/resource/strings.dart';
import 'package:excelso_attendance/resource/style.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
// ignore: avoid_web_libraries_in_flutter
import 'dart:html' as html;
// import 'dart:html' as html;
class OnBoardingView extends StatefulWidget {
const OnBoardingView({super.key});
......@@ -32,7 +36,25 @@ class _OnBoardingViewState extends State<OnBoardingView> {
}
void getUserPermission() async {
await html.window.navigator.getUserMedia(audio: true, video: true);
LocationPermission permission = await Geolocator.requestPermission();
if (permission == LocationPermission.always ||
permission == LocationPermission.whileInUse) {
Geolocator.getCurrentPosition().then((position) {
setLatitude(position.latitude.toString());
setLongitude(position.longitude.toString());
});
} else {
// ignore: use_build_context_synchronously
Navigator.pushNamedAndRemoveUntil(
context,
Routes.errorWidget,
(route) => false,
arguments: ErrorWidgetArguments(
errorMessage: Strings.locationNotActive,
),
);
}
// await html.window.navigator.getUserMedia(audio: true, video: true);
}
@override
......
import 'package:excelso_attendance/helper/arguments/error_args.dart';
import 'package:excelso_attendance/helper/arguments/route_args.dart';
import 'package:excelso_attendance/main.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/error/error_camera.dart';
import 'package:excelso_attendance/page/error/error_widget.dart';
import 'package:excelso_attendance/page/home/home.dart';
import 'package:excelso_attendance/page/onboarding/onboarding.dart';
import 'package:flutter/material.dart';
......@@ -13,7 +14,7 @@ class Routes {
static const String home = "/home";
static const String absentCamera = "/absent-camera";
static const String absentSuccess = "/absent-success";
static const String errorCamera = "/error-camera";
static const String errorWidget = "/error";
}
class RouteGenerator {
......@@ -38,9 +39,16 @@ class RouteGenerator {
case Routes.absentSuccess:
return pageRouteCustom(const AbsentSuccessView(),
nameRoute: Routes.absentSuccess);
case Routes.errorCamera:
return pageRouteCustom(const ErrorCameraView(),
nameRoute: Routes.errorCamera);
case Routes.errorWidget:
ErrorWidgetArguments args =
routeSettings.arguments as ErrorWidgetArguments;
return pageRouteCustom(
ErrorWidgetView(
messageError: args.errorMessage,
),
nameRoute: Routes.errorWidget,
routeSettings: routeSettings,
);
default:
return unDefinedRoute();
}
......@@ -72,7 +80,34 @@ class RouteGenerator {
// settings: RouteSettings(
// name: nameRoute.replaceFirst("/", ""), arguments: args),
);
} else {
}
if (nameRoute == Routes.errorWidget) {
ErrorWidgetArguments args =
routeSettings!.arguments as ErrorWidgetArguments;
return PageRouteBuilder(
pageBuilder: (context, a, b) => ErrorWidgetView(
messageError: args.errorMessage,
),
transitionDuration: Duration.zero,
reverseTransitionDuration: Duration.zero,
// settings: RouteSettings(
// name: nameRoute.replaceFirst("/", ""), arguments: args),
);
}
// else if (nameRoute == Routes.errorWidget) {
// ErrorWidgetArguments args =
// routeSettings!.arguments as ErrorWidgetArguments;
// return PageRouteBuilder(
// pageBuilder: (context, a, b) => ErrorWidgetView(
// messageError: args.errorMessage,
// ),
// transitionDuration: Duration.zero,
// reverseTransitionDuration: Duration.zero,
// // settings: RouteSettings(
// // name: nameRoute.replaceFirst("/", ""), arguments: args),
// );
// }
else {
return PageRouteBuilder(
pageBuilder: (context, a, b) => target,
transitionDuration: Duration.zero,
......
class Strings {
static String cameraNotActive =
"Silakan aktifkan permission kamera pada pengaturan browser anda";
static String locationNotActive =
"Silakan aktifkan permission lokasi pada pengaturan browser anda";
}
......@@ -5,8 +5,10 @@
import FlutterMacOS
import Foundation
import geolocator_apple
import shared_preferences_foundation
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
}
......@@ -166,6 +166,14 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_easyloading:
dependency: "direct main"
description:
name: flutter_easyloading
sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c
url: "https://pub.dev"
source: hosted
version: "3.0.5"
flutter_lints:
dependency: "direct dev"
description:
......@@ -190,6 +198,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.15"
flutter_spinkit:
dependency: transitive
description:
name: flutter_spinkit
sha256: b39c753e909d4796906c5696a14daf33639a76e017136c8d82bf3e620ce5bb8e
url: "https://pub.dev"
source: hosted
version: "5.2.0"
flutter_test:
dependency: "direct dev"
description: flutter
......@@ -200,6 +216,54 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
geolocator:
dependency: "direct main"
description:
name: geolocator
sha256: "5c23f3613f50586c0bbb2b8f970240ae66b3bd992088cf60dd5ee2e6f7dde3a8"
url: "https://pub.dev"
source: hosted
version: "9.0.2"
geolocator_android:
dependency: transitive
description:
name: geolocator_android
sha256: "6cd3c622df085a79fd61f5c14fa024c3ba593aa6b1df2ee809ac59f45e6a9861"
url: "https://pub.dev"
source: hosted
version: "4.1.8"
geolocator_apple:
dependency: transitive
description:
name: geolocator_apple
sha256: "22b60ca3b8c0f58e6a9688ff855ee39ab813ca3f0c0609a48d282f6631266f2e"
url: "https://pub.dev"
source: hosted
version: "2.2.5"
geolocator_platform_interface:
dependency: transitive
description:
name: geolocator_platform_interface
sha256: af4d69231452f9620718588f41acc4cb58312368716bfff2e92e770b46ce6386
url: "https://pub.dev"
source: hosted
version: "4.0.7"
geolocator_web:
dependency: transitive
description:
name: geolocator_web
sha256: f68a122da48fcfff68bbc9846bb0b74ef651afe84a1b1f6ec20939de4d6860e1
url: "https://pub.dev"
source: hosted
version: "2.1.6"
geolocator_windows:
dependency: transitive
description:
name: geolocator_windows
sha256: f5911c88e23f48b598dd506c7c19eff0e001645bdc03bb6fecb9f4549208354d
url: "https://pub.dev"
source: hosted
version: "0.1.1"
html:
dependency: transitive
description:
......
......@@ -33,7 +33,9 @@ dependencies:
cupertino_icons: ^1.0.2
flutter:
sdk: flutter
flutter_easyloading: ^3.0.5
flutter_native_splash: ^2.3.0
geolocator: ^9.0.2
http: ^0.13.5
shared_preferences: ^2.1.1
url_strategy: ^0.2.0
......
......@@ -6,6 +6,9 @@
#include "generated_plugin_registrant.h"
#include <geolocator_windows/geolocator_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) {
GeolocatorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("GeolocatorWindows"));
}
......@@ -3,6 +3,7 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
geolocator_windows
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
......
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