Commit ed162f90 authored by Sai Srinivas's avatar Sai Srinivas
Browse files

permissions and info.plist

parent 416a5204
......@@ -497,8 +497,8 @@
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 72BV93K9AR;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 1.0.1;
FLUTTER_BUILD_NUMBER = 2;
FLUTTER_BUILD_NAME = 1.0.2;
FLUTTER_BUILD_NUMBER = 3;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
......@@ -683,8 +683,8 @@
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 72BV93K9AR;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 1.0.1;
FLUTTER_BUILD_NUMBER = 2;
FLUTTER_BUILD_NAME = 1.0.2;
FLUTTER_BUILD_NUMBER = 3;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
......@@ -709,8 +709,8 @@
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 72BV93K9AR;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 1.0.1;
FLUTTER_BUILD_NUMBER = 2;
FLUTTER_BUILD_NAME = 1.0.2;
FLUTTER_BUILD_NUMBER = 3;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
......
......@@ -37,6 +37,7 @@
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
......
......@@ -4,6 +4,7 @@ import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:pulse/Notifier/ProfileProvider.dart';
......@@ -65,7 +66,7 @@ class _HomeScreenState extends State<HomeScreen> {
_initializePullToRefresh();
final sessionId = _prefs.getString("sessionId");
final staffId = _prefs.getString("staffId");
requestPermissions();
WidgetsBinding.instance.addPostFrameCallback((_) {
final provider = Provider.of<ProfileProvider>(context, listen: false);
if (provider.sessionExists != 0) {
......@@ -82,7 +83,6 @@ class _HomeScreenState extends State<HomeScreen> {
);
}
});
}
void _initializePullToRefresh() {
......@@ -332,6 +332,44 @@ class _HomeScreenState extends State<HomeScreen> {
}
}
void requestPermissions() async {
var cam = requestCameraPermissions();
if (!cam) {
requestCameraPermissions();
}
var photos = requestPhotosPermission();
if (!photos) {
requestPhotosPermission();
}
var npt = getNotificationsPermissions();
if (!npt) {
getNotificationsPermissions();
}
}
requestCameraPermissions() async {
var glypermission = await Permission.camera.request();
return glypermission.isGranted;
}
requestPhotosPermission() async {
var glypermission = await Permission.photos.request();
return glypermission.isGranted;
}
getNotificationsPermissions() async {
try {
if (await Permission.notification.request().isGranted) {
return true;
} else if (await Permission.notification.request().isPermanentlyDenied) {
await openAppSettings();
return false;
} else if (await Permission.notification.request().isDenied) {
return false;
}
} catch (e, s) {}
}
@override
void dispose() {
_connectivityTimer?.cancel();
......
......@@ -4,6 +4,7 @@ import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:pulse/Notifier/auth_provider.dart';
import 'package:pulse/Screens/authScreen/LoginScreen.dart';
......@@ -19,7 +20,8 @@ class SplashScreen extends StatefulWidget {
State<SplashScreen> createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderStateMixin {
class _SplashScreenState extends State<SplashScreen>
with SingleTickerProviderStateMixin {
final _prefs = SharedPreferencesService.instance;
String _appVersion = "";
double _opacity = 0.0;
......@@ -35,6 +37,7 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
void initState() {
super.initState();
_loadAppVersion();
requestPermissions();
// Initialize connectivity check
_initConnectivity();
......@@ -44,9 +47,10 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
vsync: this,
)..repeat(reverse: true);
_animation = Tween<double>(begin: 0.95, end: 1.05).animate(
CurvedAnimation(parent: _controller, curve: Curves.easeInOut),
);
_animation = Tween<double>(
begin: 0.95,
end: 1.05,
).animate(CurvedAnimation(parent: _controller, curve: Curves.easeInOut));
// Start fade-in and scale animation
Future.delayed(const Duration(milliseconds: 200), () {
......@@ -87,13 +91,16 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
// Method 1: Using connectivity_plus
final connectivity = Connectivity();
final results = await connectivity.checkConnectivity();
final hasInternet = results.any((result) => result != ConnectivityResult.none);
final hasInternet = results.any(
(result) => result != ConnectivityResult.none,
);
// Method 2: Fallback with socket test
if (hasInternet) {
try {
final result = await InternetAddress.lookup('google.com');
final socketCheck = result.isNotEmpty && result[0].rawAddress.isNotEmpty;
final socketCheck =
result.isNotEmpty && result[0].rawAddress.isNotEmpty;
_updateConnectionStatus(socketCheck);
} catch (e) {
_updateConnectionStatus(false);
......@@ -107,6 +114,49 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
}
}
void requestPermissions() async {
requestCameraPermissions();
requestPhotosPermission();
getNotificationsPermissions();
}
void requestCameraPermissions() async {
Map<Permission, PermissionStatus> statuses =
await [
Permission.camera,
// Add more permissions as needed
].request();
statuses.forEach((permission, status) {
if (!status.isGranted) {
// Handle denied permissions
}
});
}
void requestPhotosPermission() async {
try {
var glypermission = await Permission.photos.request();
if (!glypermission.isGranted) {
await Permission.photos.request();
} else {
// print("granted");
}
} catch (e, s) {}
}
Future<void> getNotificationsPermissions() async {
try {
var notif = await Permission.notification.request();
if (notif.isGranted) {
} else if (notif.isPermanentlyDenied) {
await Permission.notification.request();
} else if (notif.isDenied) {
await Permission.notification.request();
}
} catch (e, s) {}
}
void _updateConnectionStatus(bool hasInternet) {
if (mounted) {
setState(() {
......@@ -132,7 +182,6 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
// Hide any existing snackbar
ScaffoldMessenger.of(context).hideCurrentSnackBar();
// Show custom snackbar with all required params
CustomSnackBar.show(
context: context,
......@@ -145,10 +194,6 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
}
}
void _simulateProgress() {
Timer.periodic(const Duration(milliseconds: 30), (timer) {
if (_progressValue < 1.0) {
......@@ -171,7 +216,6 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
_checkLoginStatus();
}
Future<void> _checkLoginStatus() async {
await Future.delayed(const Duration(seconds: 3));
......@@ -185,10 +229,7 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (_) => HomeScreen(
sessionId: sessionId,
staffId: staffId,
),
builder: (_) => HomeScreen(sessionId: sessionId, staffId: staffId),
),
);
return;
......@@ -211,7 +252,8 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (_) => HomeScreen(
builder:
(_) => HomeScreen(
sessionId: loginProvider.sessionId!,
staffId: loginProvider.staffId.toString(),
),
......@@ -334,10 +376,7 @@ class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderSt
ShaderMask(
shaderCallback: (bounds) {
return LinearGradient(
colors: [
Colors.white,
Colors.white.withOpacity(0.8),
],
colors: [Colors.white, Colors.white.withOpacity(0.8)],
).createShader(bounds);
},
child: Text(
......
......@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 1.0.1+2
version: 1.0.2+3
environment:
sdk: ^3.7.2
......@@ -37,7 +37,7 @@ dependencies:
provider: ^6.1.5
http: ^1.3.0
package_info_plus: ^8.3.0
permission_handler: ^12.0.0+1
permission_handler: ^12.0.1
shared_preferences: ^2.5.3
webview_flutter: ^4.7.0
flutter_svg: ^2.1.0
......
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