١١١١١
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
<uses-feature android:name="android.hardware.camera" android:required="false" />
|
||||||
|
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
|
||||||
<application
|
<application
|
||||||
android:label="Finger print"
|
android:label="Finger print"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
|
|||||||
@@ -1,19 +1,25 @@
|
|||||||
PODS:
|
PODS:
|
||||||
|
- camera_avfoundation (0.0.1):
|
||||||
|
- Flutter
|
||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- flutter_native_splash (2.4.3):
|
- flutter_native_splash (2.4.3):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
|
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
|
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
|
camera_avfoundation:
|
||||||
|
:path: ".symlinks/plugins/camera_avfoundation/ios"
|
||||||
Flutter:
|
Flutter:
|
||||||
:path: Flutter
|
:path: Flutter
|
||||||
flutter_native_splash:
|
flutter_native_splash:
|
||||||
:path: ".symlinks/plugins/flutter_native_splash/ios"
|
:path: ".symlinks/plugins/flutter_native_splash/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
|
camera_avfoundation: be3be85408cd4126f250386828e9b1dfa40ab436
|
||||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||||
flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
|
flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
|
||||||
|
|
||||||
|
|||||||
@@ -47,5 +47,9 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>UIStatusBarHidden</key>
|
<key>UIStatusBarHidden</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
<key>NSCameraUsageDescription</key>
|
||||||
|
<string>We need access to your camera to capture photos for face recognition.</string>
|
||||||
|
<key>NSPhotoLibraryUsageDescription</key>
|
||||||
|
<string>We need access to your photo library to select photos.</string>
|
||||||
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:coda_project/screens/face_screen.dart';
|
||||||
import 'package:coda_project/screens/notifications_screen.dart';
|
import 'package:coda_project/screens/notifications_screen.dart';
|
||||||
import 'package:coda_project/screens/user_settings_screen.dart';
|
import 'package:coda_project/screens/user_settings_screen.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -143,9 +144,7 @@ class AttendanceScreen extends StatelessWidget {
|
|||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context).push(
|
Navigator.of(context).push(
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
builder: (_) => LoginAnimationScreen(
|
builder: (_) => OvalCameraCapturePage(
|
||||||
isLogin: true,
|
|
||||||
isSuccess: false,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
260
lib/screens/face_screen.dart
Normal file
260
lib/screens/face_screen.dart
Normal file
@@ -0,0 +1,260 @@
|
|||||||
|
import 'package:camera/camera.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class OvalCameraCapturePage extends StatefulWidget {
|
||||||
|
const OvalCameraCapturePage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<OvalCameraCapturePage> createState() => _OvalCameraCapturePageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _OvalCameraCapturePageState extends State<OvalCameraCapturePage> {
|
||||||
|
CameraController? _cameraController;
|
||||||
|
bool _isCameraInitialized = false;
|
||||||
|
String? _errorMessage;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_initializeCamera();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _initializeCamera() async {
|
||||||
|
try {
|
||||||
|
// Dispose existing controller if any
|
||||||
|
await _cameraController?.dispose();
|
||||||
|
_cameraController = null;
|
||||||
|
|
||||||
|
// Get available cameras
|
||||||
|
final cameras = await availableCameras();
|
||||||
|
|
||||||
|
// Check if cameras list is available
|
||||||
|
if (cameras.isEmpty) {
|
||||||
|
setState(() {
|
||||||
|
_errorMessage = "لا توجد كاميرات متاحة";
|
||||||
|
_isCameraInitialized = false;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to find front camera, fallback to first available camera
|
||||||
|
CameraDescription? selectedCamera;
|
||||||
|
try {
|
||||||
|
selectedCamera = cameras.firstWhere(
|
||||||
|
(cam) => cam.lensDirection == CameraLensDirection.front,
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
// If no front camera found, use the first available camera
|
||||||
|
if (cameras.isNotEmpty) {
|
||||||
|
selectedCamera = cameras.first;
|
||||||
|
} else {
|
||||||
|
setState(() {
|
||||||
|
_errorMessage = "لا توجد كاميرات متاحة";
|
||||||
|
_isCameraInitialized = false;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_cameraController = CameraController(
|
||||||
|
selectedCamera,
|
||||||
|
ResolutionPreset.medium,
|
||||||
|
enableAudio: false,
|
||||||
|
imageFormatGroup: ImageFormatGroup.jpeg,
|
||||||
|
);
|
||||||
|
|
||||||
|
await _cameraController!.initialize();
|
||||||
|
|
||||||
|
if (!mounted) return;
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
_isCameraInitialized = true;
|
||||||
|
_errorMessage = null;
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
if (!mounted) return;
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
_errorMessage = "خطأ في تهيئة الكاميرا: $e";
|
||||||
|
_isCameraInitialized = false;
|
||||||
|
});
|
||||||
|
print("Error initializing camera: $e");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_cameraController?.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: Color(0xff000000),
|
||||||
|
|
||||||
|
body: _errorMessage != null
|
||||||
|
? Center(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(20.0),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Icons.camera_alt_outlined,
|
||||||
|
size: 64,
|
||||||
|
color: Colors.white70,
|
||||||
|
),
|
||||||
|
SizedBox(height: 16),
|
||||||
|
Text(
|
||||||
|
_errorMessage!,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 18,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
SizedBox(height: 24),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: _initializeCamera,
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
backgroundColor: Color(0xffE8001A),
|
||||||
|
foregroundColor: Colors.white,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 32, vertical: 12),
|
||||||
|
),
|
||||||
|
child: Text("إعادة المحاولة"),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: _isCameraInitialized && _cameraController != null
|
||||||
|
? Stack(
|
||||||
|
children: [
|
||||||
|
SizedBox(height: MediaQuery.of(context).size.height ),
|
||||||
|
// Camera Preview
|
||||||
|
Positioned(
|
||||||
|
child: Center(child: CameraPreview(_cameraController!)),
|
||||||
|
),
|
||||||
|
// Oval overlay with dimmed background
|
||||||
|
Positioned.fill(
|
||||||
|
child: CustomPaint(
|
||||||
|
painter: _OvalOverlayPainter(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
// // Capture button
|
||||||
|
// Positioned(
|
||||||
|
// bottom: 60,
|
||||||
|
// left: 0,
|
||||||
|
// right: 0,
|
||||||
|
// child: Center(
|
||||||
|
// child: GestureDetector(
|
||||||
|
// onTap: (){},
|
||||||
|
// child: Container(
|
||||||
|
// width: 72,
|
||||||
|
// height: 72,
|
||||||
|
// decoration: BoxDecoration(
|
||||||
|
// shape: BoxShape.circle,
|
||||||
|
// color: Colors.white,
|
||||||
|
// boxShadow: [
|
||||||
|
// BoxShadow(
|
||||||
|
// color: Colors.black26,
|
||||||
|
// blurRadius: 8,
|
||||||
|
// offset: Offset(0, 4),
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// ),
|
||||||
|
// child: Icon(Icons.camera_alt, color: Color(0xffE8001A), size: 36),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: Center(child: CircularProgressIndicator(color: Color(0xffE8001A))),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _OvalOverlayPainter extends CustomPainter {
|
||||||
|
@override
|
||||||
|
void paint(Canvas canvas, Size size) {
|
||||||
|
final width = size.width * 0.75;
|
||||||
|
final height = size.height * 0.4;
|
||||||
|
final center = Offset(size.width / 2, size.height / 2);
|
||||||
|
final ovalRect = Rect.fromCenter(
|
||||||
|
center: center,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Create a path for the whole screen
|
||||||
|
final screenPath = Path()..addRect(Rect.fromLTWH(0, 0, size.width, size.height));
|
||||||
|
// Create a path for the oval
|
||||||
|
final ovalPath = Path()..addOval(ovalRect);
|
||||||
|
// Subtract the oval from the screen path
|
||||||
|
final overlayPath = Path.combine(PathOperation.difference, screenPath, ovalPath);
|
||||||
|
|
||||||
|
// Draw the dimmed area outside the oval with gradient
|
||||||
|
final gradient = LinearGradient(
|
||||||
|
begin: Alignment.topCenter,
|
||||||
|
end: Alignment.bottomCenter,
|
||||||
|
colors: [
|
||||||
|
Color.fromARGB(255, 41, 41, 41), // top dark gray
|
||||||
|
Color.fromARGB(255, 0, 20, 15), // bottom deep green
|
||||||
|
],
|
||||||
|
);
|
||||||
|
final paint = Paint()
|
||||||
|
..shader = gradient.createShader(
|
||||||
|
Rect.fromLTWH(0, 0, size.width, size.height),
|
||||||
|
)
|
||||||
|
..style = PaintingStyle.fill;
|
||||||
|
canvas.drawPath(overlayPath, paint);
|
||||||
|
|
||||||
|
// Draw glowing circles effect (like AppBackground) - drawn after overlay
|
||||||
|
// Top circle - positioned similar to AppBackground (top: -250, left: 100, right: -200)
|
||||||
|
final topCircleCenter = Offset(size.width * 0.3, -250);
|
||||||
|
final topCircleRadius = 150.0;
|
||||||
|
// Draw multiple circles with different opacities for spread effect (spreadRadius: 160)
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
final spreadPaint = Paint()
|
||||||
|
..color = Color.fromARGB(69 ~/ (i + 1), 62, 254, 190)
|
||||||
|
..maskFilter = MaskFilter.blur(BlurStyle.normal, 140 - (i * 20));
|
||||||
|
canvas.drawCircle(
|
||||||
|
topCircleCenter,
|
||||||
|
topCircleRadius + (i * 30),
|
||||||
|
spreadPaint,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bottom circle - positioned similar to AppBackground (bottom: 100, left: -140, right: -120)
|
||||||
|
final bottomCircleCenter = Offset(size.width * 0.2, size.height + 100);
|
||||||
|
final bottomCircleRadius = 160.0;
|
||||||
|
// Draw multiple circles with different opacities for spread effect (spreadRadius: 60)
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
final spreadPaint = Paint()
|
||||||
|
..color = Color.fromARGB(83 ~/ (i + 1), 62, 254, 190)
|
||||||
|
..maskFilter = MaskFilter.blur(BlurStyle.normal, 180 - (i * 25));
|
||||||
|
canvas.drawCircle(
|
||||||
|
bottomCircleCenter,
|
||||||
|
bottomCircleRadius + (i * 40),
|
||||||
|
spreadPaint,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw oval border
|
||||||
|
final borderPaint = Paint()
|
||||||
|
..color = Colors.greenAccent
|
||||||
|
..style = PaintingStyle.stroke
|
||||||
|
..strokeWidth = 4;
|
||||||
|
canvas.drawOval(ovalRect, borderPaint);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
|
||||||
|
}
|
||||||
92
pubspec.lock
92
pubspec.lock
@@ -29,10 +29,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: async
|
name: async
|
||||||
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
|
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.12.0"
|
version: "2.13.0"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -41,6 +41,46 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.2"
|
version: "2.1.2"
|
||||||
|
camera:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: camera
|
||||||
|
sha256: "87a27e0553e3432119c1c2f6e4b9a1bbf7d2c660552b910bfa59185a9facd632"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.11.2+1"
|
||||||
|
camera_android_camerax:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: camera_android_camerax
|
||||||
|
sha256: "58b8fe843a3c83fd1273c00cb35f5a8ae507f6cc9b2029bcf7e2abba499e28d8"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.19+1"
|
||||||
|
camera_avfoundation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: camera_avfoundation
|
||||||
|
sha256: "951ef122d01ebba68b7a54bfe294e8b25585635a90465c311b2f875ae72c412f"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.21+2"
|
||||||
|
camera_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: camera_platform_interface
|
||||||
|
sha256: "98cfc9357e04bad617671b4c1f78a597f25f08003089dd94050709ae54effc63"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.12.0"
|
||||||
|
camera_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: camera_web
|
||||||
|
sha256: "57f49a635c8bf249d07fb95eb693d7e4dda6796dedb3777f9127fb54847beba7"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.5+3"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -81,6 +121,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.19.1"
|
version: "1.19.1"
|
||||||
|
cross_file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cross_file
|
||||||
|
sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.5+1"
|
||||||
crypto:
|
crypto:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -101,10 +149,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: fake_async
|
name: fake_async
|
||||||
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
|
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.2"
|
version: "1.3.3"
|
||||||
ffi:
|
ffi:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -142,6 +190,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.6"
|
version: "2.4.6"
|
||||||
|
flutter_plugin_android_lifecycle:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_plugin_android_lifecycle
|
||||||
|
sha256: c2fe1001710127dfa7da89977a08d591398370d099aacdaa6d44da7eb14b8476
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.31"
|
||||||
flutter_svg:
|
flutter_svg:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -204,10 +260,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker
|
name: leak_tracker
|
||||||
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
|
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.0.8"
|
version: "10.0.9"
|
||||||
leak_tracker_flutter_testing:
|
leak_tracker_flutter_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -280,6 +336,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.0"
|
version: "6.1.0"
|
||||||
|
plugin_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: plugin_platform_interface
|
||||||
|
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.8"
|
||||||
posix:
|
posix:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -317,6 +381,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.4"
|
||||||
|
stream_transform:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: stream_transform
|
||||||
|
sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.1"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -393,10 +465,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
|
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.3.1"
|
version: "15.0.0"
|
||||||
web:
|
web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -422,5 +494,5 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.3"
|
version: "3.1.3"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.7.0 <4.0.0"
|
dart: ">=3.8.0 <4.0.0"
|
||||||
flutter: ">=3.29.0"
|
flutter: ">=3.32.0"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ environment:
|
|||||||
sdk: ^3.7.0
|
sdk: ^3.7.0
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
|
camera: ^0.11.2+1
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
flutter_svg: ^2.0.9
|
flutter_svg: ^2.0.9
|
||||||
|
|||||||
Reference in New Issue
Block a user