Skip to content

Commit

Permalink
Updated Isolates, Map Style, Disabled Material 3
Browse files Browse the repository at this point in the history
  • Loading branch information
abdulmominsakib committed Sep 15, 2024
1 parent eb5e54e commit 909c6df
Show file tree
Hide file tree
Showing 17 changed files with 177 additions and 154 deletions.
1 change: 1 addition & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ linter:
rules:
avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
library_private_types_in_public_api: false

# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
4 changes: 3 additions & 1 deletion lib/core/app/controllers/map_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,16 @@ class AppMapController extends GetxController {
double currentLat = 0.0;
double currentLon = 0.0;

String style = '';
// If the app is in dark mode we will load dark version of google map
Future<void> _setMapInDarkMode(
GoogleMapController controller, BuildContext context) async {
bool isDark = Get.find<CoreController>().isAppInDarkMode;
if (isDark) {
String darkModeStyle = await DefaultAssetBundle.of(context)
.loadString('assets/mapstyle/dark_mode.json');
_googleMapController.setMapStyle(darkModeStyle);

style = darkModeStyle;
}
}

Expand Down
6 changes: 3 additions & 3 deletions lib/core/app/views/dialogs/limit_reached.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:url_launcher/url_launcher_string.dart';

import '../../../constants/constants.dart';
import '../../../themes/text.dart';
Expand Down Expand Up @@ -51,8 +51,8 @@ class LimitReachedDialog extends StatelessWidget {
path: 'contact@faceonlive.com',
);
String url = params.toString();
if (await canLaunch(url)) {
await launch(url);
if (await canLaunchUrlString(url)) {
await launchUrlString(url);
} else {
print('Could not launch $url');
}
Expand Down
4 changes: 2 additions & 2 deletions lib/core/auth/views/pages/login_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ class LoginPage extends StatefulWidget {
const LoginPage({super.key});

@override
_LoginPageState createState() => _LoginPageState();
LoginPageState createState() => LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
class LoginPageState extends State<LoginPage> {
/* <---- Login Dependecny ----> */
final LoginController _controller = Get.find();

Expand Down
4 changes: 2 additions & 2 deletions lib/core/auth/views/pages/login_page_face.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ class LoginPageFace extends StatefulWidget {
const LoginPageFace({super.key});

@override
_LoginPageFaceState createState() => _LoginPageFaceState();
LoginPageFaceState createState() => LoginPageFaceState();
}

class _LoginPageFaceState extends State<LoginPageFace>
class LoginPageFaceState extends State<LoginPageFace>
with TickerProviderStateMixin {
late final AnimationController _controller;

Expand Down
4 changes: 2 additions & 2 deletions lib/core/auth/views/pages/register_as_admin_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ class RegisterAsAdminPage extends StatefulWidget {
const RegisterAsAdminPage({super.key});

@override
_RegisterAsAdminPageState createState() => _RegisterAsAdminPageState();
RegisterAsAdminPageState createState() => RegisterAsAdminPageState();
}

class _RegisterAsAdminPageState extends State<RegisterAsAdminPage> {
class RegisterAsAdminPageState extends State<RegisterAsAdminPage> {
final SignUpController _controller = Get.put(SignUpController());

/* <---- Text Editing Controllers ----> */
Expand Down
105 changes: 39 additions & 66 deletions lib/core/data/services/app_photo.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,112 +5,85 @@ import 'package:http/http.dart' as http;
import 'package:image_cropper/image_cropper.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';

import 'package:worker_manager/worker_manager.dart';

class AppPhotoService {
static Future<File?> getImageFromGallery() async {
File? image;
final picker = ImagePicker();

final pickedFile = await picker.pickImage(
source: ImageSource.gallery,
imageQuality: 50,
);

if (pickedFile != null) {
image = await _goToImageCropper(File(pickedFile.path));
return image;
return workerManager.execute<File?>(
() => _processAndCropImage(pickedFile.path),
priority: WorkPriority.high,
);
} else {
print('No image selected.');
return null;
}
return image;
}

static Future<File?> getImageFromCamera() async {
File? image;
final picker = ImagePicker();

final pickedFile = await picker.pickImage(
source: ImageSource.camera,
imageQuality: 50,
);

if (pickedFile != null) {
image = await _goToImageCropper(File(pickedFile.path));
return image;
return workerManager.execute<File?>(
() => _processAndCropImage(pickedFile.path),
priority: WorkPriority.high,
);
} else {
print('No image selected.');
return null;
}
return image;
}

/* <---- Image Cropper ----> */
static Future<File> _goToImageCropper(File? imageFile) async {
static Future<File?> _processAndCropImage(String imagePath) async {
final imageFile = File(imagePath);
return _goToImageCropper(imageFile);
}

static Future<File?> _goToImageCropper(File? imageFile) async {
if (imageFile == null) return null;

final croppedFile = await ImageCropper().cropImage(
sourcePath: imageFile!.path,
sourcePath: imageFile.path,
aspectRatio: const CropAspectRatio(ratioX: 1, ratioY: 1),
// androidUiSettings: const AndroidUiSettings(
// toolbarTitle: 'Prefered Size 500x500',
// toolbarColor: AppColors.primaryColor,
// toolbarWidgetColor: Colors.white,
// initAspectRatio: CropAspectRatioPreset.original,
// lockAspectRatio: true,
// ),
// iosUiSettings: const IOSUiSettings(
// title: 'Cropper',
// ),
);
final myFile = await croppedFile?.readAsBytes();

return File.fromRawPath(myFile!);
if (croppedFile == null) return null;

final myFile = await croppedFile.readAsBytes();
return File.fromRawPath(myFile);
}

/// Gives a File From an url
/// If the file is in cache you will get the cached file
static Future<File> fileFromImageUrl(String imageUrl) async {
File? gotImage;

// IF the file is available in cache
File? imageFromCache = await getImageFromCache(imageUrl);

if (imageFromCache != null) {
gotImage = imageFromCache;
} else {
final response = await http.get(Uri.parse(imageUrl));

final documentDirectory = await getApplicationDocumentsDirectory();

final Map<String, dynamic> data = {
'path': documentDirectory.path,
'response': response.bodyBytes,
};
File? cachedImage = await getImageFromCache(imageUrl);
if (cachedImage != null) return cachedImage;

// File file =
// await Executor().execute(fun1: _writeFileToDiskIsolated, arg1: data);
File file = await _writeFileToDiskIsolated(data);

gotImage = file;
}

return gotImage;
return workerManager.execute<File>(
() => downloadAndSaveImage(imageUrl),
priority: WorkPriority.high,
);
}

static Future<File> _writeFileToDiskIsolated(
Map<String, dynamic> data) async {
File theFile = File(data['path'] + 'imagetest');
theFile.writeAsBytes(data['response']);
return theFile;
static Future<File> downloadAndSaveImage(String imageUrl) async {
final response = await http.get(Uri.parse(imageUrl));
final documentDirectory = await getApplicationDocumentsDirectory();
final file = File(
'${documentDirectory.path}/downloaded_image_${DateTime.now().millisecondsSinceEpoch}');
await file.writeAsBytes(response.bodyBytes);
return file;
}

/// Get Image From Cache
static Future<File?> getImageFromCache(String imageUrl) async {
File? dartFile;
FileInfo? file = await DefaultCacheManager().getFileFromCache(imageUrl);
if (file != null) {
dartFile = file.file;
} else {
dartFile = null;
}
return dartFile;
final fileInfo = await DefaultCacheManager().getFileFromCache(imageUrl);
return fileInfo?.file;
}
}
2 changes: 2 additions & 0 deletions lib/core/themes/themes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class AppThemes {
brightness: Brightness.light,
textTheme: GoogleFonts.poppinsTextTheme(),
scaffoldBackgroundColor: Colors.white,
useMaterial3: false,
appBarTheme: AppBarTheme(
actionsIconTheme: const IconThemeData(
color: AppColors.darkColor,
Expand Down Expand Up @@ -70,6 +71,7 @@ class AppThemes {
bodyColor: Colors.white,
displayColor: Colors.white38,
),
useMaterial3: false,
appBarTheme: AppBarTheme(
actionsIconTheme: const IconThemeData(
color: AppColors.primaryColor,
Expand Down
12 changes: 0 additions & 12 deletions lib/core/typedef/type_defs.dart

This file was deleted.

8 changes: 4 additions & 4 deletions lib/core/utils/date_util.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ class DateUtil {

// For comparing
List<String> allDateInString = [];
for (var _date in allDates) {
String formattedDate = dateFormat.format(_date);
for (var date in allDates) {
String formattedDate = dateFormat.format(date);
allDateInString.add(formattedDate);
}

Expand All @@ -62,8 +62,8 @@ class DateUtil {

// For comparing
List<String> allDateInString = [];
for (var _date in allDates) {
String formattedDate = dateFormat.format(_date.toDate());
for (var date in allDates) {
String formattedDate = dateFormat.format(date.toDate());
allDateInString.add(formattedDate);
}

Expand Down
44 changes: 23 additions & 21 deletions lib/core/utils/internet_util.dart
Original file line number Diff line number Diff line change
@@ -1,31 +1,33 @@
import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:data_connection_checker_tv/data_connection_checker.dart';
import 'package:http/http.dart' as http;

/// Internet util is used for checking the internet availablity
/// in the whole app
///
/// connectivity package cannot reliably determine if a data connection
/// is actually available.
///
/// More info on its page here: https://pub.dev/packages/connectivity
class InternetUtil {
/// Is internet currently available
static final Connectivity _connectivity = Connectivity();
static const Duration _timeout = Duration(seconds: 5);
static const String _testUrl = 'https://www.google.com';

/// Checks if internet is currently available
static Future<bool> isAvailable() async {
bool isInternetAvailable = false;
try {
// First, check connectivity
final connectivityResults = await _connectivity.checkConnectivity();
if (connectivityResults.contains(ConnectivityResult.none) &&
connectivityResults.length == 1) {
return false;
}

var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
isInternetAvailable = true;
} else if (connectivityResult == ConnectivityResult.wifi) {
isInternetAvailable = true;
} else if (connectivityResult == ConnectivityResult.none) {
isInternetAvailable = false;
// If connected, perform an actual internet check
final response = await http.get(Uri.parse(_testUrl)).timeout(_timeout);
return response.statusCode == 200;
} catch (e) {
return false;
}
}

bool result = await DataConnectionChecker().hasConnection;
isInternetAvailable = result;

return isInternetAvailable;
/// Stream of connectivity changes
static Stream<bool> get onConnectivityChanged {
return _connectivity.onConnectivityChanged.map((results) =>
!results.contains(ConnectivityResult.none) || results.length > 1);
}
}
6 changes: 3 additions & 3 deletions lib/features/03_attendance/views/components/header_main.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:face_attendance/core/utils/app_toast.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:url_launcher/url_launcher.dart' as url;
import 'package:url_launcher/url_launcher_string.dart';

import '../../../../config/config.dart';
import '../../../../core/constants/constants.dart';
Expand Down Expand Up @@ -56,9 +56,9 @@ class TitleAndSubtitle extends StatelessWidget {
return InkWell(
onTap: () async {
String websiteURL = "http://www.faceonlive.com";
bool canLaunch = await url.canLaunch(websiteURL);
bool canLaunch = await canLaunchUrlString(websiteURL);
if (canLaunch) {
await url.launch(websiteURL);
await launchUrlString(websiteURL);
} else {
AppToast.show(
"Oops! Faceonlive is not available",
Expand Down
Loading

0 comments on commit 909c6df

Please sign in to comment.