App Lock
App Lock
yaml
name: secure_app_lock
description: A secure app locker application
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: ">=2.17.0 <4.0.0"
dependencies:
flutter:
sdk: flutter
provider: ^6.0.5
shared_preferences: ^2.2.0
device_apps: ^2.2.0
cupertino_icons: ^1.0.5
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
uses-material-design: true
// File: lib/models/locked_app_model.dart
class LockedAppModel {
final String packageName;
final String appName;
bool isLocked;
LockedAppModel({
required this.packageName,
required this.appName,
this.isLocked = false,
});
// File: lib/models/application_model.dart
import 'dart:typed_data';
class Application {
final String packageName;
final String appName;
Application({
required this.packageName,
required this.appName,
});
}
ApplicationWithIcon({
required String packageName,
required String appName,
required this.icon,
}) : super(packageName: packageName, appName: appName);
}
// File: lib/providers/app_lock_provider.dart
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:device_apps/device_apps.dart';
import 'dart:convert';
import '../models/application_model.dart';
import '../models/locked_app_model.dart';
AppLockProvider() {
_loadLockedApps();
}
_installedApps = apps.map((app) {
if (app is ApplicationWithIcon) {
return ApplicationWithIcon(
packageName: app.packageName,
appName: app.appName,
icon: app.icon,
);
}
return Application(
packageName: app.packageName,
appName: app.appName,
);
}).toList();
notifyListeners();
}
_lockedApps = lockedAppsJson
.map((json) => LockedAppModel.fromJson(jsonDecode(json)))
.toList();
notifyListeners();
}
if (existingIndex >= 0) {
_lockedApps[existingIndex].isLocked = app.isLocked;
} else {
_lockedApps.add(app);
}
await _saveLockedApps();
}
// File: lib/screens/app_lock_screen.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../providers/app_lock_provider.dart';
import '../models/locked_app_model.dart';
import '../models/application_model.dart';
import 'dart:typed_data';
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_loadInstalledApps();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('App Lock'),
),
body: Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: _searchController,
decoration: InputDecoration(
hintText: 'Search apps...',
prefixIcon: Icon(Icons.search),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
),
),
onChanged: _filterApps,
),
),
Expanded(
child: Consumer<AppLockProvider>(
builder: (context, appLockProvider, child) {
return _filteredApps.isEmpty
? Center(child: Text('No apps found'))
: ListView.builder(
itemCount: _filteredApps.length,
itemBuilder: (context, index) {
final app = _filteredApps[index];
return _AppLockListTile(app: app);
},
);
},
),
),
],
),
);
}
}
@override
__AppLockListTileState createState() => __AppLockListTileState();
}
@override
void initState() {
super.initState();
_checkLockStatus();
}
setState(() {
_isLocked = isLocked;
});
}
void _toggleAppLock() {
final appLockProvider = Provider.of<AppLockProvider>(
context,
listen: false
);
appLockProvider.toggleAppLock(lockedApp);
setState(() {
_isLocked = !_isLocked;
});
}
@override
Widget build(BuildContext context) {
return ListTile(
leading: widget.app is ApplicationWithIcon
? Image.memory(
(widget.app as ApplicationWithIcon).icon,
width: 40,
height: 40,
)
: Icon(Icons.app_registration),
title: Text(widget.app.appName),
subtitle: Text(widget.app.packageName),
trailing: Switch(
value: _isLocked,
onChanged: (_) => _toggleAppLock(),
activeColor: Colors.green,
),
);
}
}
// File: lib/screens/home_screen.dart
import 'package:flutter/material.dart';
import 'app_lock_screen.dart';
// File: lib/main.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'providers/app_lock_provider.dart';
import 'screens/home_screen.dart';
import 'screens/pin_setup_screen.dart';
import 'screens/lock_screen.dart';
import 'package:shared_preferences/shared_preferences.dart';
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => AppLockProvider()),
],
child: MyApp(hasPin: hasPin),
),
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Secure App Lock',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: hasPin ? LockScreen() : PinSetupScreen(),
routes: {
'/home': (context) => HomeScreen(),
'/lock': (context) => LockScreen(),
},
);
}
}