| @@ -1,18 +1,18 @@ | |||||
| # This is a generated file; do not edit or check into version control. | # This is a generated file; do not edit or check into version control. | ||||
| connectivity_plus=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus-2.3.9/ | |||||
| connectivity_plus_linux=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_linux-1.3.1/ | |||||
| connectivity_plus_macos=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_macos-1.2.6/ | |||||
| connectivity_plus_web=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_web-1.2.5/ | |||||
| connectivity_plus_windows=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_windows-1.2.2/ | |||||
| path_provider=/home/micbook/.pub-cache/hosted/pub.dev/path_provider-2.0.13/ | |||||
| path_provider_android=/home/micbook/.pub-cache/hosted/pub.dev/path_provider_android-2.0.23/ | |||||
| path_provider_foundation=/home/micbook/.pub-cache/hosted/pub.dev/path_provider_foundation-2.1.2/ | |||||
| path_provider_linux=/home/micbook/.pub-cache/hosted/pub.dev/path_provider_linux-2.1.9/ | |||||
| path_provider_windows=/home/micbook/.pub-cache/hosted/pub.dev/path_provider_windows-2.1.4/ | |||||
| shared_preferences=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences-2.0.18/ | |||||
| shared_preferences_android=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_android-2.0.16/ | |||||
| shared_preferences_foundation=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.1.4/ | |||||
| shared_preferences_linux=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.1.4/ | |||||
| shared_preferences_web=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_web-2.0.5/ | |||||
| shared_preferences_windows=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.1.4/ | |||||
| sqflite=/home/micbook/.pub-cache/hosted/pub.dev/sqflite-2.2.5/ | |||||
| connectivity_plus=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\connectivity_plus-2.3.9\\ | |||||
| connectivity_plus_linux=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\connectivity_plus_linux-1.3.1\\ | |||||
| connectivity_plus_macos=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\connectivity_plus_macos-1.2.6\\ | |||||
| connectivity_plus_web=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\connectivity_plus_web-1.2.5\\ | |||||
| connectivity_plus_windows=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\connectivity_plus_windows-1.2.2\\ | |||||
| path_provider=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider-2.1.3\\ | |||||
| path_provider_android=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_android-2.2.4\\ | |||||
| path_provider_foundation=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_foundation-2.4.0\\ | |||||
| path_provider_linux=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_linux-2.2.1\\ | |||||
| path_provider_windows=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_windows-2.2.1\\ | |||||
| shared_preferences=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences-2.2.3\\ | |||||
| shared_preferences_android=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_android-2.2.2\\ | |||||
| shared_preferences_foundation=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_foundation-2.4.0\\ | |||||
| shared_preferences_linux=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_linux-2.3.2\\ | |||||
| shared_preferences_web=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_web-2.3.0\\ | |||||
| shared_preferences_windows=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_windows-2.3.2\\ | |||||
| sqflite=C:\\Users\\HP\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\sqflite-2.3.3+1\\ | |||||
| @@ -6,3 +6,4 @@ | |||||
| !/.packages | !/.packages | ||||
| !/.flutter-plugins-dependencies | !/.flutter-plugins-dependencies | ||||
| !/.flutter-plugins | !/.flutter-plugins | ||||
| .env | |||||
| @@ -28,7 +28,7 @@ if (flutterVersionName == null) { | |||||
| apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" | ||||
| android { | android { | ||||
| compileSdkVersion 33 | |||||
| compileSdkVersion 34 | |||||
| sourceSets { | sourceSets { | ||||
| main.java.srcDirs += 'src/main/kotlin' | main.java.srcDirs += 'src/main/kotlin' | ||||
| @@ -26,6 +26,6 @@ subprojects { | |||||
| project.evaluationDependsOn(':app') | project.evaluationDependsOn(':app') | ||||
| } | } | ||||
| task clean(type: Delete) { | |||||
| tasks.register("clean", Delete) { | |||||
| delete rootProject.buildDir | delete rootProject.buildDir | ||||
| } | } | ||||
| @@ -5,5 +5,7 @@ class ImageConstant { | |||||
| static String imgEye = 'assets/images/img_eye.svg'; | static String imgEye = 'assets/images/img_eye.svg'; | ||||
| static String img1 = 'assets/images/img1.png'; | |||||
| static String imageNotFound = 'assets/images/image_not_found.png'; | static String imageNotFound = 'assets/images/image_not_found.png'; | ||||
| } | } | ||||
| @@ -21,8 +21,8 @@ get width { | |||||
| ///This method is used to get device viewport height. | ///This method is used to get device viewport height. | ||||
| get height { | get height { | ||||
| num statusBar = | num statusBar = | ||||
| MediaQueryData.fromWindow(WidgetsBinding.instance.window).viewPadding.top; | |||||
| num bottomBar = MediaQueryData.fromWindow(WidgetsBinding.instance.window) | |||||
| MediaQueryData.fromView(WidgetsBinding.instance.window).viewPadding.top; | |||||
| num bottomBar = MediaQueryData.fromView(WidgetsBinding.instance.window) | |||||
| .viewPadding | .viewPadding | ||||
| .bottom; | .bottom; | ||||
| num screenHeight = size.height - statusBar - bottomBar; | num screenHeight = size.height - statusBar - bottomBar; | ||||
| @@ -4,13 +4,15 @@ import 'package:flutter/services.dart'; | |||||
| import 'core/app_export.dart'; | import 'core/app_export.dart'; | ||||
| import 'package:flutter_dotenv/flutter_dotenv.dart'; | |||||
| void main() { | void main() { | ||||
| WidgetsFlutterBinding.ensureInitialized(); | WidgetsFlutterBinding.ensureInitialized(); | ||||
| SystemChrome.setPreferredOrientations([ | SystemChrome.setPreferredOrientations([ | ||||
| DeviceOrientation.portraitUp, | DeviceOrientation.portraitUp, | ||||
| ]).then((value) { | |||||
| Logger.init(kReleaseMode ? LogMode.live : LogMode.debug); | |||||
| runApp(MyApp()); | |||||
| ]).then((value){ | |||||
| Logger.init(kReleaseMode ? LogMode.live : LogMode.debug); | |||||
| runApp(MyApp()); | |||||
| }); | }); | ||||
| } | } | ||||
| @@ -0,0 +1,253 @@ | |||||
| import 'package:flutter/material.dart'; | |||||
| import 'package:http/http.dart' as http; | |||||
| import 'dart:convert'; | |||||
| import 'dart:io'; | |||||
| import 'package:http/io_client.dart'; | |||||
| class CameraPage extends StatelessWidget { | |||||
| final String loginUrl = 'https://192.168.60.230:5050/auth/login'; | |||||
| final String moveCameraUrl = 'https://192.168.60.230:5050/move-camera'; | |||||
| Future<http.Client> createHttpClient() async { | |||||
| final ioc = HttpClient() | |||||
| ..badCertificateCallback = | |||||
| (X509Certificate cert, String host, int port) => true; | |||||
| return IOClient(ioc); | |||||
| } | |||||
| Future<String> loginAndGetToken(http.Client client) async { | |||||
| var url = Uri.parse(loginUrl); | |||||
| var data = {'username': 'admin', 'password': 'Pwdadmin1!'}; | |||||
| var body = data.keys | |||||
| .map((key) => | |||||
| "${Uri.encodeComponent(key)}=${Uri.encodeComponent(data[key] ?? '')}") | |||||
| .join("&"); | |||||
| var response = await client.post( | |||||
| url, | |||||
| headers: { | |||||
| "Content-Type": "application/x-www-form-urlencoded", | |||||
| }, | |||||
| body: body, | |||||
| ); | |||||
| var responseBody = response.body; | |||||
| var parsedJson = jsonDecode(responseBody); | |||||
| if (parsedJson['access_token'] != null) { | |||||
| return parsedJson['access_token']; | |||||
| } else { | |||||
| throw Exception('Token not found in response'); | |||||
| } | |||||
| } | |||||
| Future<void> sendPostRequestMoveCamera( | |||||
| BuildContext context, String token, Map<String, dynamic> data) async { | |||||
| var url = Uri.parse(moveCameraUrl); | |||||
| var jsonData = jsonEncode(data); | |||||
| HttpClient httpClient = HttpClient() | |||||
| ..badCertificateCallback = | |||||
| ((X509Certificate cert, String host, int port) => true); | |||||
| var request = await httpClient.postUrl(url) | |||||
| ..headers.contentType = ContentType.json | |||||
| ..headers.add('Authorization', 'Bearer $token') | |||||
| ..write(jsonData); | |||||
| var response = await request.close(); | |||||
| var responseBody = await utf8.decodeStream(response); | |||||
| var responseJson = jsonDecode(responseBody); | |||||
| var message = responseJson['message'] ?? 'Unknown response'; | |||||
| bool isError = message.startsWith('Error:') || message.startsWith('Errore:'); | |||||
| ScaffoldMessenger.of(context).showSnackBar( | |||||
| SnackBar( | |||||
| content: Text(message), | |||||
| backgroundColor: isError ? Colors.red : Colors.green, | |||||
| ), | |||||
| ); | |||||
| } | |||||
| @override | |||||
| Widget build(BuildContext context) { | |||||
| double screenWidth = MediaQuery.of(context).size.width; | |||||
| return Scaffold( | |||||
| body: OrientationBuilder( | |||||
| builder: (context, orientation) => Stack( | |||||
| children: [ | |||||
| Column( | |||||
| children: [ | |||||
| Expanded( | |||||
| child: Builder( | |||||
| builder: (context) => GestureDetector( | |||||
| onTap: () async { | |||||
| final client = await createHttpClient(); | |||||
| String token = await loginAndGetToken(client); | |||||
| await sendPostRequestMoveCamera(context, token, { | |||||
| "baseUrl": "HTTP://10.1.1.66:2000", | |||||
| "username": "admin", | |||||
| "password": "Adminadmin1", | |||||
| "preset": 1 | |||||
| }); | |||||
| }, | |||||
| child: Stack( | |||||
| children: [ | |||||
| Container( | |||||
| color: Colors.transparent, | |||||
| child: Transform.rotate( | |||||
| angle: 3.14 / 2, | |||||
| child: Image.asset( | |||||
| 'assets/images/img1.png', | |||||
| fit: BoxFit.cover, | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| Expanded( | |||||
| child: Builder( | |||||
| builder: (context) => GestureDetector( | |||||
| onTap: () async { | |||||
| final client = await createHttpClient(); | |||||
| String token = await loginAndGetToken(client); | |||||
| await sendPostRequestMoveCamera(context, token, { | |||||
| "baseUrl": "HTTP://10.1.1.66:2000", | |||||
| "username": "admin", | |||||
| "password": "Adminadmin1", | |||||
| "preset": 3 | |||||
| }); | |||||
| }, | |||||
| child: Stack( | |||||
| children: [ | |||||
| Container( | |||||
| color: Colors.transparent, | |||||
| child: Transform.rotate( | |||||
| angle: 3.14 / 2, | |||||
| child: Image.asset( | |||||
| 'assets/images/img2.png', | |||||
| fit: BoxFit.cover, | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| Expanded( | |||||
| child: Builder( | |||||
| builder: (context) => GestureDetector( | |||||
| onTap: () async { | |||||
| final client = await createHttpClient(); | |||||
| String token = await loginAndGetToken(client); | |||||
| await sendPostRequestMoveCamera(context, token, { | |||||
| "baseUrl": "HTTP://10.1.1.66:2000", | |||||
| "username": "admin", | |||||
| "password": "Adminadmin1", | |||||
| "preset": 2 | |||||
| }); | |||||
| }, | |||||
| child: Stack( | |||||
| children: [ | |||||
| Container( | |||||
| color: Colors.transparent, | |||||
| child: Transform.rotate( | |||||
| angle: 3.14 / 2, | |||||
| child: Image.asset( | |||||
| 'assets/images/img3.png', | |||||
| fit: BoxFit.cover, | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| Positioned( | |||||
| top: 110.0, | |||||
| right: 350.0, | |||||
| child: GestureDetector( | |||||
| onTap: () async { | |||||
| final client = await createHttpClient(); | |||||
| String token = await loginAndGetToken(client); | |||||
| await sendPostRequestMoveCamera(context, token, { | |||||
| "baseUrl": "HTTP://10.1.1.66:2000", | |||||
| "username": "admin", | |||||
| "password": "Adminadmin1", | |||||
| "preset": 5 | |||||
| }); | |||||
| }, | |||||
| child: Transform.rotate( | |||||
| angle: 3.14 / 2, // Rotating 90 degrees (PI / 2 radians) | |||||
| child: FaceSymbol(), | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| Positioned( | |||||
| top: 350.0, | |||||
| right: 350.0, | |||||
| child: GestureDetector( | |||||
| onTap: () async { | |||||
| final client = await createHttpClient(); | |||||
| String token = await loginAndGetToken(client); | |||||
| await sendPostRequestMoveCamera(context, token, { | |||||
| "baseUrl": "HTTP://10.1.1.66:2000", | |||||
| "username": "admin", | |||||
| "password": "Adminadmin1", | |||||
| "preset": 4 | |||||
| }); | |||||
| }, | |||||
| child: Transform.rotate( | |||||
| angle: 3.14 / 2, // Rotating 90 degrees (PI / 2 radians) | |||||
| child: FaceSymbol(), | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| Positioned( | |||||
| top: 700.0, | |||||
| right: 350.0, | |||||
| child: GestureDetector( | |||||
| onTap: () async { | |||||
| final client = await createHttpClient(); | |||||
| String token = await loginAndGetToken(client); | |||||
| await sendPostRequestMoveCamera(context, token, { | |||||
| "baseUrl": "HTTP://10.1.1.66:2000", | |||||
| "username": "admin", | |||||
| "password": "Adminadmin1", | |||||
| "preset": 6 | |||||
| }); | |||||
| }, | |||||
| child: Transform.rotate( | |||||
| angle: 3.14 / 2, // Rotating 90 degrees (PI / 2 radians) | |||||
| child: FaceSymbol(), | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| ); | |||||
| } | |||||
| } | |||||
| class FaceSymbol extends StatelessWidget { | |||||
| @override | |||||
| Widget build(BuildContext context) { | |||||
| return Icon( | |||||
| Icons.face, // Using a built-in face icon | |||||
| size: 50.0, | |||||
| color: Colors.blue, | |||||
| ); | |||||
| } | |||||
| } | |||||
| @@ -1,166 +1,449 @@ | |||||
| import 'controller/login_controller.dart'; | |||||
| import 'dart:async'; | |||||
| import 'dart:convert'; | |||||
| import 'dart:io'; | |||||
| import 'dart:ui' as ui; | |||||
| import 'package:flutter/cupertino.dart'; | |||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
| import 'package:michele_s_application8/core/app_export.dart'; | |||||
| import 'package:michele_s_application8/core/utils/validation_functions.dart'; | |||||
| import 'package:get/get.dart'; | |||||
| import 'package:michele_s_application8/widgets/custom_button.dart'; | import 'package:michele_s_application8/widgets/custom_button.dart'; | ||||
| import 'package:michele_s_application8/widgets/custom_text_form_field.dart'; | import 'package:michele_s_application8/widgets/custom_text_form_field.dart'; | ||||
| import 'package:http/http.dart' as http; | |||||
| import 'package:michele_s_application8/presentation/camera_page/camera_page.dart'; | |||||
| // ignore_for_file: must_be_immutable | |||||
| class LoginScreen extends GetWidget<LoginController> { | |||||
| import 'package:flutter_dotenv/flutter_dotenv.dart'; | |||||
| class LoginScreen extends StatefulWidget { | |||||
| @override | |||||
| _LoginScreenState createState() => _LoginScreenState(); | |||||
| } | |||||
| class _LoginScreenState extends State<LoginScreen> { | |||||
| GlobalKey<FormState> _formKey = GlobalKey<FormState>(); | GlobalKey<FormState> _formKey = GlobalKey<FormState>(); | ||||
| final TextEditingController _timeController1 = TextEditingController(); | |||||
| final TextEditingController _titleController = TextEditingController(); | |||||
| final TextEditingController _presenterNameController = TextEditingController(); | |||||
| final TextEditingController _camNumberController = TextEditingController(text: '1'); | |||||
| late TextEditingController _languageController; | |||||
| bool isRecording = false; | |||||
| bool isLoading = false; | |||||
| bool isError = false; | |||||
| bool showStartRecordingButton = true; | |||||
| Timer? _recordingTimer; | |||||
| @override | |||||
| void initState() { | |||||
| super.initState(); | |||||
| String deviceLanguage = ui.window.locale.languageCode; | |||||
| String language = (deviceLanguage == 'en') ? 'EN' : (deviceLanguage == 'it') ? 'IT' : 'IT'; | |||||
| _languageController = TextEditingController(text: language); | |||||
| } | |||||
| @override | |||||
| void dispose() { | |||||
| _recordingTimer?.cancel(); | |||||
| super.dispose(); | |||||
| } | |||||
| @override | @override | ||||
| Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
| return SafeArea( | return SafeArea( | ||||
| child: Scaffold( | |||||
| resizeToAvoidBottomInset: false, | |||||
| backgroundColor: ColorConstant.whiteA700, | |||||
| body: Form( | |||||
| key: _formKey, | |||||
| child: Container( | |||||
| width: double.maxFinite, | |||||
| padding: | |||||
| getPadding(left: 23, top: 11, right: 23, bottom: 11), | |||||
| child: Column( | |||||
| crossAxisAlignment: CrossAxisAlignment.start, | |||||
| mainAxisAlignment: MainAxisAlignment.start, | |||||
| children: [ | |||||
| Align( | |||||
| alignment: Alignment.centerRight, | |||||
| child: Padding( | |||||
| padding: getPadding(right: 1), | |||||
| child: Text("lbl_powered_by".tr, | |||||
| overflow: TextOverflow.ellipsis, | |||||
| textAlign: TextAlign.left, | |||||
| style: AppStyle.txtRobotoRomanMedium10))), | |||||
| CustomImageView( | |||||
| imagePath: ImageConstant.imgImage1, | |||||
| height: getVerticalSize(21), | |||||
| width: getHorizontalSize(103), | |||||
| alignment: Alignment.centerRight), | |||||
| Padding( | |||||
| padding: getPadding(left: 32, top: 25, right: 30), | |||||
| child: Row(children: [ | |||||
| CustomImageView( | |||||
| imagePath: ImageConstant.imgRectangle286, | |||||
| height: getVerticalSize(133), | |||||
| width: getHorizontalSize(134)), | |||||
| Padding( | |||||
| padding: getPadding( | |||||
| left: 10, top: 32, bottom: 20), | |||||
| child: Column( | |||||
| crossAxisAlignment: | |||||
| CrossAxisAlignment.end, | |||||
| mainAxisAlignment: | |||||
| MainAxisAlignment.start, | |||||
| children: [ | |||||
| Container( | |||||
| width: getHorizontalSize(113), | |||||
| child: Text( | |||||
| "msg_istituto_comprensivo".tr, | |||||
| maxLines: null, | |||||
| textAlign: TextAlign.right, | |||||
| style: AppStyle | |||||
| .txtRobotoRomanSemiBold19)), | |||||
| Padding( | |||||
| padding: getPadding(top: 6), | |||||
| child: Text( | |||||
| "lbl_dante_alighieri".tr, | |||||
| overflow: | |||||
| TextOverflow.ellipsis, | |||||
| textAlign: TextAlign.left, | |||||
| style: AppStyle | |||||
| .txtRobotoRomanSemiBold19Lime600)) | |||||
| ])) | |||||
| ])), | |||||
| Padding( | |||||
| padding: getPadding(top: 17), | |||||
| child: Divider(color: ColorConstant.whiteA700)), | |||||
| Spacer(), | |||||
| Padding( | |||||
| padding: getPadding(left: 5), | |||||
| child: Text("lbl_login".tr, | |||||
| overflow: TextOverflow.ellipsis, | |||||
| textAlign: TextAlign.left, | |||||
| style: AppStyle | |||||
| .txtRobotoRomanSemiBold19Black900)), | |||||
| Padding( | |||||
| padding: getPadding(left: 6, top: 43), | |||||
| child: Text("lbl_username".tr, | |||||
| overflow: TextOverflow.ellipsis, | |||||
| textAlign: TextAlign.left, | |||||
| style: AppStyle.txtRobotoRomanMedium1324)), | |||||
| CustomTextFormField( | |||||
| focusNode: FocusNode(), | |||||
| controller: controller.masterfieldController, | |||||
| hintText: "msg_inserisci_il_tuo".tr, | |||||
| margin: getMargin(left: 5, top: 12, right: 10), | |||||
| child: Scaffold( | |||||
| resizeToAvoidBottomInset: false, | |||||
| body: Container( | |||||
| decoration: BoxDecoration( | |||||
| gradient: LinearGradient( | |||||
| begin: Alignment.topLeft, | |||||
| end: Alignment.bottomRight, | |||||
| colors: [Colors.white, Colors.purple], | |||||
| ), | |||||
| ), | |||||
| child: Stack( | |||||
| children: [ | |||||
| Center( // Use Center to vertically and horizontally center the form | |||||
| child: Column( | |||||
| mainAxisSize: MainAxisSize.min, // Minimize the column size to its content | |||||
| children: [ | |||||
| if (!isRecording || showStartRecordingButton) | |||||
| Text( | |||||
| 'CookingLab', | |||||
| style: TextStyle(fontSize: 32, fontWeight: FontWeight.bold), | |||||
| ), | |||||
| if (!isRecording || showStartRecordingButton) | |||||
| Form( | |||||
| key: _formKey, | |||||
| child: Container( | |||||
| width: double.maxFinite, | |||||
| padding: EdgeInsets.symmetric(horizontal: 23), | |||||
| child: Column( | |||||
| crossAxisAlignment: CrossAxisAlignment.start, | |||||
| children: [ | |||||
| GestureDetector( | |||||
| onTap: () async { | |||||
| await showDialog( | |||||
| context: context, | |||||
| builder: (BuildContext context) { | |||||
| return Dialog( | |||||
| child: Container( | |||||
| height: MediaQuery.of(context).copyWith().size.height / 3, | |||||
| child: CupertinoTimerPicker( | |||||
| mode: CupertinoTimerPickerMode.hms, | |||||
| onTimerDurationChanged: (Duration duration) { | |||||
| _timeController1.text = "${duration.inHours.toString().padLeft(2, '0')}:${duration.inMinutes.remainder(60).toString().padLeft(2, '0')}:${duration.inSeconds.remainder(60).toString().padLeft(2, '0')}"; | |||||
| }, | |||||
| initialTimerDuration: Duration(hours: DateTime.now().hour, minutes: DateTime.now().minute, seconds: DateTime.now().second), | |||||
| ), | |||||
| ), | |||||
| ); | |||||
| }, | |||||
| ); | |||||
| }, | |||||
| child: AbsorbPointer( | |||||
| child: CustomTextFormField( | |||||
| controller: _timeController1, | |||||
| prefixIcon: Icon(Icons.timer), | |||||
| hintText: "Inserisci la durata", | |||||
| decoration: InputDecoration( | |||||
| border: OutlineInputBorder(), | |||||
| ), | |||||
| margin: EdgeInsets.fromLTRB(5, 12, 10, 0), | |||||
| validator: (value) { | |||||
| if (value != null && !isTime(value)) { | |||||
| return "Inserisci un'ora valida (HH:MM:SS)"; | |||||
| } | |||||
| return null; | |||||
| }, | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| CustomTextFormField( | |||||
| controller: _titleController, | |||||
| prefixIcon: Icon(Icons.title), | |||||
| hintText: "Inserisci il titolo", | |||||
| margin: EdgeInsets.fromLTRB(5, 12, 10, 0), | |||||
| validator: (value) { | validator: (value) { | ||||
| if (!isText(value)) { | |||||
| return "Please enter valid text"; | |||||
| if (value != null && !isText(value)) { | |||||
| return "Inserisci un testo valido"''; | |||||
| } | } | ||||
| return null; | return null; | ||||
| }), | |||||
| Padding( | |||||
| padding: getPadding(left: 6, top: 10), | |||||
| child: Text("lbl_password".tr, | |||||
| overflow: TextOverflow.ellipsis, | |||||
| textAlign: TextAlign.left, | |||||
| style: AppStyle.txtRobotoRomanMedium1324)), | |||||
| Obx(() => CustomTextFormField( | |||||
| focusNode: FocusNode(), | |||||
| controller: controller.masterfieldOneController, | |||||
| hintText: "msg_inserisci_la_password".tr, | |||||
| margin: getMargin(left: 7, top: 12, right: 8), | |||||
| padding: TextFormFieldPadding.PaddingT13, | |||||
| textInputAction: TextInputAction.done, | |||||
| textInputType: TextInputType.visiblePassword, | |||||
| suffix: InkWell( | |||||
| onTap: () { | |||||
| controller.isShowPassword.value = | |||||
| !controller.isShowPassword.value; | |||||
| }, | |||||
| child: Container( | |||||
| margin: getMargin( | |||||
| left: 30, | |||||
| top: 14, | |||||
| right: 12, | |||||
| bottom: 18), | |||||
| child: CustomImageView( | |||||
| svgPath: | |||||
| controller.isShowPassword.value | |||||
| ? ImageConstant.imgEye | |||||
| : ImageConstant.imgEye))), | |||||
| suffixConstraints: BoxConstraints( | |||||
| maxHeight: getVerticalSize(46)), | |||||
| }, | |||||
| ), | |||||
| CustomTextFormField( | |||||
| controller: _presenterNameController, | |||||
| prefixIcon: Icon(Icons.person), | |||||
| hintText: "Inserisci il nome del relatore", | |||||
| margin: EdgeInsets.fromLTRB(5, 12, 10, 0), | |||||
| validator: (value) { | validator: (value) { | ||||
| if (value == null || | |||||
| (!isValidPassword(value, | |||||
| isRequired: true))) { | |||||
| return "Please enter valid password"; | |||||
| if (value != null && !isText(value)) { | |||||
| return "Inserisci un testo valido"; | |||||
| } | } | ||||
| return null; | return null; | ||||
| }, | }, | ||||
| isObscureText: !controller.isShowPassword.value)), | |||||
| Align( | |||||
| alignment: Alignment.centerRight, | |||||
| child: Padding( | |||||
| padding: getPadding(top: 10, right: 10), | |||||
| child: Text("msg_password_dimenticata".tr, | |||||
| overflow: TextOverflow.ellipsis, | |||||
| textAlign: TextAlign.left, | |||||
| style: AppStyle.txtRobotoRomanLight984))), | |||||
| CustomButton( | |||||
| text: "lbl_login".tr, | |||||
| margin: getMargin( | |||||
| left: 6, top: 26, right: 7, bottom: 175), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| if (!isRecording || showStartRecordingButton) | |||||
| CustomButton( | |||||
| text: "inizia a registrare", | |||||
| margin: EdgeInsets.fromLTRB(50, 30, 50, 10), | |||||
| variant: ButtonVariant.OutlineBlack9003f, | |||||
| padding: ButtonPadding.PaddingAll9, | |||||
| onTap: () async { | |||||
| if (_formKey.currentState!.validate()) { | |||||
| setState(() { | |||||
| isLoading = true; | |||||
| }); | |||||
| // Remove focus from any focused text field | |||||
| FocusScope.of(context).unfocus(); | |||||
| String token = await loginAndGetToken(); | |||||
| String time = _timeController1.text; | |||||
| String camNumber = _camNumberController.text; | |||||
| Map<String, dynamic> data = { | |||||
| "title": _titleController.text, | |||||
| "presenter_name": _presenterNameController.text, | |||||
| "language": _languageController.text, | |||||
| }; | |||||
| try { | |||||
| await sendPostRequestStart(token, data, time, camNumber); | |||||
| setState(() { | |||||
| isRecording = true; | |||||
| showStartRecordingButton = false; | |||||
| }); | |||||
| // Start the timer to update the UI after the duration ends | |||||
| List<String> timeParts = time.split(':'); | |||||
| int durationInSeconds = int.parse(timeParts[0]) * 3600 + int.parse(timeParts[1]) * 60 + int.parse(timeParts[2]); | |||||
| _recordingTimer = Timer(Duration(seconds: durationInSeconds), () { | |||||
| setState(() { | |||||
| showStartRecordingButton = true; | |||||
| _resetFormFields(); | |||||
| }); | |||||
| }); | |||||
| } catch (error) { | |||||
| setState(() { | |||||
| isError = true; | |||||
| }); | |||||
| } finally { | |||||
| setState(() { | |||||
| isLoading = false; | |||||
| }); | |||||
| } | |||||
| } else { | |||||
| Get.snackbar( | |||||
| "Errore", | |||||
| "Si prega di compilare tutti i campi richiesti", | |||||
| backgroundColor: Colors.red, | |||||
| colorText: Colors.white, | |||||
| ); | |||||
| } | |||||
| }, | |||||
| ), | |||||
| if (isRecording && !showStartRecordingButton && !isError) | |||||
| Expanded( | |||||
| child: Center( | |||||
| child: Column( | |||||
| mainAxisSize: MainAxisSize.min, // Minimize the column size to its content | |||||
| children: [ | |||||
| Container( | |||||
| padding: EdgeInsets.all(40), // Increase the padding to increase the size of the Container | |||||
| decoration: BoxDecoration( | |||||
| color: Colors.white, // Change this to your preferred color | |||||
| borderRadius: BorderRadius.circular(15), | |||||
| boxShadow: [ | |||||
| BoxShadow( | |||||
| color: Colors.grey.withOpacity(0.5), | |||||
| spreadRadius: 5, | |||||
| blurRadius: 7, | |||||
| offset: Offset(0, 3), // changes position of shadow | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| child: Column( | |||||
| children: [ | |||||
| Text( | |||||
| 'Dettagli di registrazione', | |||||
| style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold, color: Colors.black), | |||||
| ), | |||||
| SizedBox(height: 10), | |||||
| Text( | |||||
| 'Durata: ${_timeController1.text}', | |||||
| style: TextStyle(fontSize: 20, color: Colors.black), | |||||
| ), | |||||
| SizedBox(height: 10), | |||||
| Text( | |||||
| 'Titolo: ${_titleController.text}', | |||||
| style: TextStyle(fontSize: 20, color: Colors.black), | |||||
| ), | |||||
| SizedBox(height: 10), | |||||
| Text( | |||||
| 'Nome del relatore: ${_presenterNameController.text}', | |||||
| style: TextStyle(fontSize: 20, color: Colors.black), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| CustomButton( | |||||
| text: "Interrompi la registrazione", | |||||
| margin: EdgeInsets.fromLTRB(80, 10, 80, 10), | |||||
| variant: ButtonVariant.OutlineBlack9003f, | variant: ButtonVariant.OutlineBlack9003f, | ||||
| padding: ButtonPadding.PaddingAll9, | |||||
| onTap: navigateToHome) | |||||
| ]))))); | |||||
| padding: ButtonPadding.PaddingAll15, | |||||
| onTap: () async { | |||||
| String token = await loginAndGetToken(); | |||||
| String camNumber = _camNumberController.text; | |||||
| await sendPostRequestStop(token, camNumber); | |||||
| setState(() { | |||||
| isRecording = false; | |||||
| showStartRecordingButton = true; | |||||
| _resetFormFields(); | |||||
| }); | |||||
| }, | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| if (isLoading) | |||||
| Positioned.fill( | |||||
| child: Container( | |||||
| color: Colors.black54, | |||||
| child: Center( | |||||
| child: CircularProgressIndicator(), | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| Positioned( | |||||
| bottom: 20, | |||||
| left: 0, | |||||
| right: 0, | |||||
| child: isLoading | |||||
| ? SizedBox() // Hide the button when isLoading is true | |||||
| : CustomButton( | |||||
| text: "Vai a Fotocamera", | |||||
| // prefixIcon: Icon(Icons.camera_alt), | |||||
| margin: EdgeInsets.symmetric(horizontal: 50, vertical: 30), | |||||
| variant: ButtonVariant.OutlineBlack9003f, | |||||
| padding: ButtonPadding.PaddingAll9, | |||||
| onTap: () { | |||||
| Navigator.push( | |||||
| context, | |||||
| MaterialPageRoute(builder: (context) => CameraPage()), | |||||
| ); | |||||
| }, | |||||
| ), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| )); | |||||
| } | |||||
| void _resetFormFields() { | |||||
| _timeController1.clear(); | |||||
| _titleController.clear(); | |||||
| _presenterNameController.clear(); | |||||
| } | |||||
| Future<String> loginAndGetToken() async { | |||||
| var url = Uri.parse('https://192.168.60.230:5050/auth/login'); | |||||
| var data = { | |||||
| 'username': dotenv.env['USERNAME'], | |||||
| 'password': dotenv.env['PASSWORD'], | |||||
| }; | |||||
| var body = data.keys.map((key) => "${Uri.encodeComponent(key)}=${Uri.encodeComponent(data[key] ?? '')}").join("&"); | |||||
| HttpClient httpClient = new HttpClient() | |||||
| ..badCertificateCallback = | |||||
| ((X509Certificate cert, String host, int port) => true); | |||||
| var request = await httpClient.postUrl(url) | |||||
| ..headers.contentType = ContentType("application", "x-www-form-urlencoded") | |||||
| ..write(body); | |||||
| var response = await request.close(); | |||||
| var responseBody = await utf8.decodeStream(response); | |||||
| var parsedJson = jsonDecode(responseBody); | |||||
| if (parsedJson['access_token'] != null) { | |||||
| return parsedJson['access_token']; | |||||
| } else { | |||||
| throw Exception('Token not found in response'); | |||||
| } | |||||
| } | |||||
| Future<void> sendPostRequestStart(String token, Map<String, dynamic> data, String time, String camNumber) async { | |||||
| var url = Uri.parse('https://192.168.60.230:5050/start-recording'); | |||||
| List<String> timeParts = time.split(':'); | |||||
| int durationInSeconds = int.parse(timeParts[0]) * 3600 + int.parse(timeParts[1]) * 60 + int.parse(timeParts[2]); | |||||
| durationInSeconds += 10; | |||||
| var requestData = { | |||||
| "camera_name": int.parse(camNumber), | |||||
| "duration": durationInSeconds, | |||||
| "title": data['title'], | |||||
| "presenter_name": data['presenter_name'], | |||||
| "language": data['language'] | |||||
| }; | |||||
| var jsonData = jsonEncode(requestData); | |||||
| HttpClient httpClient = new HttpClient() | |||||
| ..badCertificateCallback = | |||||
| ((X509Certificate cert, String host, int port) => true); | |||||
| var request = await httpClient.postUrl(url) | |||||
| ..headers.contentType = ContentType.json | |||||
| ..headers.add('Authorization', 'Bearer $token') | |||||
| ..write(jsonData); | |||||
| var response = await request.close(); | |||||
| var responseBody = await utf8.decodeStream(response); | |||||
| var responseJson = jsonDecode(responseBody); | |||||
| var message = responseJson['message']; | |||||
| bool isError = message.startsWith('Error:') || message.startsWith('Errore:'); | |||||
| Get.snackbar( | |||||
| isError ? "Error" : "Message", | |||||
| message, | |||||
| backgroundColor: isError ? Colors.red : Colors.green, | |||||
| colorText: Colors.white, | |||||
| ); | |||||
| setState(() { | |||||
| this.isError = isError; | |||||
| if (isError) { | |||||
| isRecording = false; | |||||
| throw Exception('Failed to start recording'); | |||||
| } | |||||
| }); | |||||
| } | |||||
| Future<void> sendPostRequestStop(String token, String camNumber) async { | |||||
| var url = Uri.parse('https://192.168.60.230:5050/stop-recording'); | |||||
| var requestData = { | |||||
| "camera_name": int.parse(camNumber), | |||||
| }; | |||||
| var jsonData = jsonEncode(requestData); | |||||
| HttpClient httpClient = new HttpClient() | |||||
| ..badCertificateCallback = | |||||
| ((X509Certificate cert, String host, int port) => true); | |||||
| var request = await httpClient.postUrl(url) | |||||
| ..headers.contentType = ContentType.json | |||||
| ..headers.add('Authorization', 'Bearer $token') | |||||
| ..write(jsonData); | |||||
| var response = await request.close(); | |||||
| var responseBody = await utf8.decodeStream(response); | |||||
| var responseJson = jsonDecode(responseBody); | |||||
| var message = responseJson['message']; | |||||
| bool isError = message.startsWith('Error:') || message.startsWith('Errore:'); | |||||
| Get.snackbar( | |||||
| isError ? "Error" : "Message", | |||||
| message, | |||||
| backgroundColor: isError ? Colors.red : Colors.green, | |||||
| colorText: Colors.white, | |||||
| ); | |||||
| setState(() { | |||||
| this.isError = isError; | |||||
| if (!isError) { | |||||
| isRecording = false; | |||||
| _timeController1.clear(); | |||||
| _titleController.clear(); | |||||
| _presenterNameController.clear(); | |||||
| } | |||||
| }); | |||||
| } | |||||
| bool isTime(String time) { | |||||
| var timeParts = time.split(':'); | |||||
| if (timeParts.length != 3) { | |||||
| return false; | |||||
| } | |||||
| var hours = int.tryParse(timeParts[0]); | |||||
| var minutes = int.tryParse(timeParts[1]); | |||||
| var seconds = int.tryParse(timeParts[2]); | |||||
| return hours != null && hours >= 0 && hours < 24 && | |||||
| minutes != null && minutes >= 0 && minutes < 60 && | |||||
| seconds != null && seconds >= 0 && seconds < 60; | |||||
| } | } | ||||
| navigateToHome() { | |||||
| Get.toNamed(AppRoutes.abilitaDisabilitaClasseTwoScreen); | |||||
| bool isText(String? value) { | |||||
| return value != null && value.isNotEmpty; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,90 +1,314 @@ | |||||
| import 'controller/splash_screen_one_controller.dart'; | import 'controller/splash_screen_one_controller.dart'; | ||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
| import 'package:michele_s_application8/core/app_export.dart'; | import 'package:michele_s_application8/core/app_export.dart'; | ||||
| import 'dart:async'; | |||||
| import 'package:dots_indicator/dots_indicator.dart'; | |||||
| // | |||||
| // class SplashScreenOneScreen extends GetWidget<SplashScreenOneController> { | |||||
| // @override | |||||
| // // Widget build(BuildContext context) { | |||||
| // // return SafeArea( | |||||
| // // child: Scaffold( | |||||
| // // backgroundColor: ColorConstant.whiteA700, | |||||
| // // body: Container( | |||||
| // // width: double.maxFinite, | |||||
| // // padding: getPadding(all: 14), | |||||
| // // child: Column( | |||||
| // // crossAxisAlignment: CrossAxisAlignment.end, | |||||
| // // mainAxisAlignment: MainAxisAlignment.start, | |||||
| // // children: [ | |||||
| // // Padding( | |||||
| // // padding: getPadding(right: 6), | |||||
| // // child: Text("lbl_powered_by".tr, | |||||
| // // overflow: TextOverflow.ellipsis, | |||||
| // // textAlign: TextAlign.left, | |||||
| // // style: AppStyle.txtRobotoRomanMedium10)), | |||||
| // // CustomImageView( | |||||
| // // imagePath: ImageConstant.imgImage1, | |||||
| // // height: getVerticalSize(21), | |||||
| // // width: getHorizontalSize(103), | |||||
| // // margin: getMargin(right: 6)), | |||||
| // // Spacer(), | |||||
| // // Container( | |||||
| // // height: getVerticalSize(352), | |||||
| // // width: getHorizontalSize(345), | |||||
| // // margin: getMargin(right: 1, bottom: 215), | |||||
| // // child: Stack(alignment: Alignment.center, children: [ | |||||
| // // Align( | |||||
| // // alignment: Alignment.center, | |||||
| // // child: Container( | |||||
| // // height: getVerticalSize(352), | |||||
| // // width: getHorizontalSize(345), | |||||
| // // decoration: BoxDecoration( | |||||
| // // color: ColorConstant.whiteA7009e, | |||||
| // // borderRadius: BorderRadius.circular( | |||||
| // // getHorizontalSize(176))))), | |||||
| // // Align( | |||||
| // // alignment: Alignment.center, | |||||
| // // child: Row( | |||||
| // // mainAxisAlignment: MainAxisAlignment.center, | |||||
| // // children: [ | |||||
| // // CustomImageView( | |||||
| // // imagePath: | |||||
| // // ImageConstant.imgRectangle286, | |||||
| // // height: getVerticalSize(133), | |||||
| // // width: getHorizontalSize(134)), | |||||
| // // Padding( | |||||
| // // padding: getPadding( | |||||
| // // left: 6, top: 148, bottom: 20), | |||||
| // // child: Column( | |||||
| // // crossAxisAlignment: | |||||
| // // CrossAxisAlignment.end, | |||||
| // // mainAxisAlignment: | |||||
| // // MainAxisAlignment.start, | |||||
| // // children: [ | |||||
| // // Container( | |||||
| // // width: | |||||
| // // getHorizontalSize(113), | |||||
| // // child: Text( | |||||
| // // "msg_istituto_comprensivo" | |||||
| // // .tr, | |||||
| // // maxLines: null, | |||||
| // // textAlign: | |||||
| // // TextAlign.right, | |||||
| // // style: AppStyle | |||||
| // // .txtRobotoRomanSemiBold19)), | |||||
| // // Padding( | |||||
| // // padding: getPadding(top: 6), | |||||
| // // child: Text( | |||||
| // // "lbl_dante_alighieri" | |||||
| // // .tr, | |||||
| // // overflow: TextOverflow | |||||
| // // .ellipsis, | |||||
| // // textAlign: | |||||
| // // TextAlign.left, | |||||
| // // style: AppStyle | |||||
| // // .txtRobotoRomanSemiBold19Lime600)) | |||||
| // // ])) | |||||
| // // ])) | |||||
| // // ])) | |||||
| // // ])))); | |||||
| // // } | |||||
| // } | |||||
| class SplashScreenOneScreen extends StatefulWidget { | |||||
| @override | |||||
| _SplashScreenOneScreenState createState() => _SplashScreenOneScreenState(); | |||||
| } | |||||
| // class _SplashScreenOneScreenState extends State<SplashScreenOneScreen> with AutomaticKeepAliveClientMixin { | |||||
| // final controller = PageController(); | |||||
| // Timer? _timer; | |||||
| // double currentPage = 0; | |||||
| // | |||||
| // @override | |||||
| // void initState() { | |||||
| // super.initState(); | |||||
| // _timer = Timer.periodic(Duration(seconds: 5), (Timer timer) { | |||||
| // if (controller.page?.round() == controller.page) { | |||||
| // if (controller.page == 2) { | |||||
| // controller.jumpToPage(0); | |||||
| // } else { | |||||
| // controller.nextPage( | |||||
| // duration: Duration(milliseconds: 2000), | |||||
| // curve: Curves.ease, | |||||
| // ); | |||||
| // } | |||||
| // } | |||||
| // }); | |||||
| // controller.addListener(() { | |||||
| // setState(() { | |||||
| // currentPage = controller.page!; | |||||
| // }); | |||||
| // }); | |||||
| // } | |||||
| // | |||||
| // @override | |||||
| // void dispose() { | |||||
| // _timer?.cancel(); | |||||
| // super.dispose(); | |||||
| // } | |||||
| // | |||||
| // @override | |||||
| // Widget build(BuildContext context) { | |||||
| // return Scaffold( | |||||
| // body: Stack( | |||||
| // children: [ | |||||
| // PageView.builder( | |||||
| // controller: controller, | |||||
| // itemCount: 3, | |||||
| // itemBuilder: (context, index) { | |||||
| // return GestureDetector( | |||||
| // onTap: () { | |||||
| // Navigator.pushNamed(context, '/login_screen'); | |||||
| // }, | |||||
| // child: Stack( | |||||
| // fit: StackFit.expand, | |||||
| // children: [ | |||||
| // Image.asset( | |||||
| // 'assets/images/img${index + 1}.png', | |||||
| // fit: BoxFit.cover, | |||||
| // ), | |||||
| // Positioned( | |||||
| // bottom: 300, | |||||
| // left: 20, | |||||
| // child: Text( | |||||
| // 'CookingLab', | |||||
| // style: TextStyle( | |||||
| // color: Colors.white, | |||||
| // fontSize: 24, | |||||
| // fontWeight: FontWeight.bold, | |||||
| // shadows: <Shadow>[ | |||||
| // Shadow( | |||||
| // offset: Offset(2.0, 2.0), | |||||
| // blurRadius: 3.0, | |||||
| // color: Color.fromARGB(255, 0, 0, 0), | |||||
| // ), | |||||
| // ], | |||||
| // ), | |||||
| // ), | |||||
| // ), | |||||
| // ], | |||||
| // ), | |||||
| // ); | |||||
| // }, | |||||
| // ), | |||||
| // Positioned( | |||||
| // bottom: 20, | |||||
| // left: 0, | |||||
| // right: 0, | |||||
| // child: Center( | |||||
| // child: DotsIndicator( | |||||
| // dotsCount: 3, | |||||
| // position: currentPage, | |||||
| // decorator: DotsDecorator( | |||||
| // activeColor: Colors.white, | |||||
| // ), | |||||
| // ), | |||||
| // ), | |||||
| // ), | |||||
| // ], | |||||
| // ), | |||||
| // ); | |||||
| // } | |||||
| // | |||||
| // @override | |||||
| // bool get wantKeepAlive => true; | |||||
| // } | |||||
| class _SplashScreenOneScreenState extends State<SplashScreenOneScreen> with AutomaticKeepAliveClientMixin { | |||||
| final controller = PageController(); | |||||
| Timer? _timer; | |||||
| double currentPage = 0; | |||||
| // Add your image paths here | |||||
| final List<String> imagePaths = [ | |||||
| 'assets/images/foto-CookingLab.jpeg', | |||||
| 'assets/images/img2.png', | |||||
| 'assets/images/img3.png', | |||||
| ]; | |||||
| // Add your text here | |||||
| final List<String> imageTexts = [ | |||||
| 'HELLO', | |||||
| 'CookingLab', | |||||
| 'Text 3', | |||||
| ]; | |||||
| @override | |||||
| void initState() { | |||||
| super.initState(); | |||||
| _timer = Timer.periodic(Duration(seconds: 5), (Timer timer) { | |||||
| if (controller.page?.round() == controller.page) { | |||||
| if (controller.page == 2) { | |||||
| controller.jumpToPage(0); | |||||
| } else { | |||||
| controller.nextPage( | |||||
| duration: Duration(milliseconds: 2000), | |||||
| curve: Curves.ease, | |||||
| ); | |||||
| } | |||||
| } | |||||
| }); | |||||
| controller.addListener(() { | |||||
| setState(() { | |||||
| currentPage = controller.page!; | |||||
| }); | |||||
| }); | |||||
| } | |||||
| @override | |||||
| void dispose() { | |||||
| _timer?.cancel(); | |||||
| super.dispose(); | |||||
| } | |||||
| class SplashScreenOneScreen extends GetWidget<SplashScreenOneController> { | |||||
| @override | @override | ||||
| Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
| return SafeArea( | |||||
| child: Scaffold( | |||||
| backgroundColor: ColorConstant.whiteA700, | |||||
| body: Container( | |||||
| width: double.maxFinite, | |||||
| padding: getPadding(all: 14), | |||||
| child: Column( | |||||
| crossAxisAlignment: CrossAxisAlignment.end, | |||||
| mainAxisAlignment: MainAxisAlignment.start, | |||||
| children: [ | |||||
| Padding( | |||||
| padding: getPadding(right: 6), | |||||
| child: Text("lbl_powered_by".tr, | |||||
| overflow: TextOverflow.ellipsis, | |||||
| textAlign: TextAlign.left, | |||||
| style: AppStyle.txtRobotoRomanMedium10)), | |||||
| CustomImageView( | |||||
| imagePath: ImageConstant.imgImage1, | |||||
| height: getVerticalSize(21), | |||||
| width: getHorizontalSize(103), | |||||
| margin: getMargin(right: 6)), | |||||
| Spacer(), | |||||
| Container( | |||||
| height: getVerticalSize(352), | |||||
| width: getHorizontalSize(345), | |||||
| margin: getMargin(right: 1, bottom: 215), | |||||
| child: Stack(alignment: Alignment.center, children: [ | |||||
| Align( | |||||
| alignment: Alignment.center, | |||||
| child: Container( | |||||
| height: getVerticalSize(352), | |||||
| width: getHorizontalSize(345), | |||||
| decoration: BoxDecoration( | |||||
| color: ColorConstant.whiteA7009e, | |||||
| borderRadius: BorderRadius.circular( | |||||
| getHorizontalSize(176))))), | |||||
| Align( | |||||
| alignment: Alignment.center, | |||||
| child: Row( | |||||
| mainAxisAlignment: MainAxisAlignment.center, | |||||
| children: [ | |||||
| CustomImageView( | |||||
| imagePath: | |||||
| ImageConstant.imgRectangle286, | |||||
| height: getVerticalSize(133), | |||||
| width: getHorizontalSize(134)), | |||||
| Padding( | |||||
| padding: getPadding( | |||||
| left: 6, top: 148, bottom: 20), | |||||
| child: Column( | |||||
| crossAxisAlignment: | |||||
| CrossAxisAlignment.end, | |||||
| mainAxisAlignment: | |||||
| MainAxisAlignment.start, | |||||
| children: [ | |||||
| Container( | |||||
| width: | |||||
| getHorizontalSize(113), | |||||
| child: Text( | |||||
| "msg_istituto_comprensivo" | |||||
| .tr, | |||||
| maxLines: null, | |||||
| textAlign: | |||||
| TextAlign.right, | |||||
| style: AppStyle | |||||
| .txtRobotoRomanSemiBold19)), | |||||
| Padding( | |||||
| padding: getPadding(top: 6), | |||||
| child: Text( | |||||
| "lbl_dante_alighieri" | |||||
| .tr, | |||||
| overflow: TextOverflow | |||||
| .ellipsis, | |||||
| textAlign: | |||||
| TextAlign.left, | |||||
| style: AppStyle | |||||
| .txtRobotoRomanSemiBold19Lime600)) | |||||
| ])) | |||||
| ])) | |||||
| ])) | |||||
| ])))); | |||||
| return Scaffold( | |||||
| body: Stack( | |||||
| children: [ | |||||
| PageView.builder( | |||||
| controller: controller, | |||||
| itemCount: 3, | |||||
| itemBuilder: (context, index) { | |||||
| return GestureDetector( | |||||
| onTap: () { | |||||
| Navigator.pushNamed(context, '/login_screen'); | |||||
| }, | |||||
| child: Stack( | |||||
| fit: StackFit.expand, | |||||
| children: [ | |||||
| Image.asset( | |||||
| imagePaths[index], // Use the index to display the corresponding image | |||||
| fit: BoxFit.cover, | |||||
| ), | |||||
| Positioned( | |||||
| bottom: 300, | |||||
| left: 20, | |||||
| child: Text( | |||||
| imageTexts[index], // Use the index to display the corresponding text | |||||
| style: TextStyle( | |||||
| color: Colors.white, | |||||
| fontSize: 24, | |||||
| fontWeight: FontWeight.bold, | |||||
| shadows: <Shadow>[ | |||||
| Shadow( | |||||
| offset: Offset(2.0, 2.0), | |||||
| blurRadius: 3.0, | |||||
| color: Color.fromARGB(255, 0, 0, 0), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ); | |||||
| }, | |||||
| ), | |||||
| Positioned( | |||||
| bottom: 20, | |||||
| left: 0, | |||||
| right: 0, | |||||
| child: Center( | |||||
| child: DotsIndicator( | |||||
| dotsCount: 3, | |||||
| position: currentPage, | |||||
| decorator: DotsDecorator( | |||||
| activeColor: Colors.white, | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ), | |||||
| ], | |||||
| ), | |||||
| ); | |||||
| } | } | ||||
| } | |||||
| @override | |||||
| bool get wantKeepAlive => true; | |||||
| } | |||||
| @@ -73,7 +73,8 @@ class CustomImageView extends StatelessWidget { | |||||
| _buildCircleImage() { | _buildCircleImage() { | ||||
| if (radius != null) { | if (radius != null) { | ||||
| return ClipRRect( | return ClipRRect( | ||||
| borderRadius: radius, | |||||
| // borderRadius: radius, | |||||
| borderRadius: radius ?? BorderRadius.zero, | |||||
| child: _buildImageWithBorder(), | child: _buildImageWithBorder(), | ||||
| ); | ); | ||||
| } else { | } else { | ||||
| @@ -1,87 +1,71 @@ | |||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
| import 'package:michele_s_application8/core/app_export.dart'; | |||||
| class CustomTextFormField extends StatelessWidget { | class CustomTextFormField extends StatelessWidget { | ||||
| CustomTextFormField( | |||||
| {this.shape, | |||||
| this.padding, | |||||
| this.variant, | |||||
| this.fontStyle, | |||||
| this.alignment, | |||||
| this.width, | |||||
| this.margin, | |||||
| this.controller, | |||||
| this.focusNode, | |||||
| this.isObscureText = false, | |||||
| this.textInputAction = TextInputAction.next, | |||||
| this.textInputType = TextInputType.text, | |||||
| this.maxLines, | |||||
| this.hintText, | |||||
| this.prefix, | |||||
| this.prefixConstraints, | |||||
| this.suffix, | |||||
| this.suffixConstraints, | |||||
| this.validator}); | |||||
| TextFormFieldShape? shape; | |||||
| TextFormFieldPadding? padding; | |||||
| TextFormFieldVariant? variant; | |||||
| TextFormFieldFontStyle? fontStyle; | |||||
| Alignment? alignment; | |||||
| double? width; | |||||
| EdgeInsetsGeometry? margin; | |||||
| TextEditingController? controller; | |||||
| FocusNode? focusNode; | |||||
| bool? isObscureText; | |||||
| TextInputAction? textInputAction; | |||||
| TextInputType? textInputType; | |||||
| int? maxLines; | |||||
| String? hintText; | |||||
| Widget? prefix; | |||||
| BoxConstraints? prefixConstraints; | |||||
| Widget? suffix; | |||||
| BoxConstraints? suffixConstraints; | |||||
| FormFieldValidator<String>? validator; | |||||
| final OutlineInputBorder? shape; | |||||
| final EdgeInsetsGeometry? padding; | |||||
| final String? variant; | |||||
| final TextStyle? fontStyle; | |||||
| final Alignment? alignment; | |||||
| final double? width; | |||||
| final EdgeInsetsGeometry? margin; | |||||
| final TextEditingController? controller; | |||||
| final FocusNode? focusNode; | |||||
| final bool? isObscureText; | |||||
| final TextInputAction? textInputAction; | |||||
| final TextInputType? textInputType; | |||||
| final int? maxLines; | |||||
| final String? hintText; | |||||
| final Widget? prefixIcon; | |||||
| final Widget? suffixIcon; | |||||
| final BoxConstraints? prefixIconConstraints; | |||||
| final BoxConstraints? suffixIconConstraints; | |||||
| final FormFieldValidator<String>? validator; | |||||
| final InputDecoration decoration; | |||||
| CustomTextFormField({ | |||||
| this.shape, | |||||
| this.padding, | |||||
| this.variant, | |||||
| this.fontStyle, | |||||
| this.alignment, | |||||
| this.width, | |||||
| this.margin, | |||||
| this.controller, | |||||
| this.focusNode, | |||||
| this.isObscureText = false, | |||||
| this.textInputAction = TextInputAction.next, | |||||
| this.textInputType = TextInputType.text, | |||||
| this.maxLines, | |||||
| this.hintText, | |||||
| this.prefixIcon, | |||||
| this.prefixIconConstraints, | |||||
| this.suffixIcon, | |||||
| this.suffixIconConstraints, | |||||
| this.validator, | |||||
| this.decoration = const InputDecoration(), | |||||
| }); | |||||
| @override | @override | ||||
| Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
| return alignment != null | return alignment != null | ||||
| ? Align( | ? Align( | ||||
| alignment: alignment ?? Alignment.center, | |||||
| child: _buildTextFormFieldWidget(), | |||||
| ) | |||||
| alignment: alignment!, | |||||
| child: _buildTextFormFieldWidget(), | |||||
| ) | |||||
| : _buildTextFormFieldWidget(); | : _buildTextFormFieldWidget(); | ||||
| } | } | ||||
| _buildTextFormFieldWidget() { | |||||
| Widget _buildTextFormFieldWidget() { | |||||
| return Container( | return Container( | ||||
| width: width ?? double.maxFinite, | width: width ?? double.maxFinite, | ||||
| margin: margin, | margin: margin, | ||||
| child: TextFormField( | child: TextFormField( | ||||
| controller: controller, | controller: controller, | ||||
| focusNode: focusNode, | focusNode: focusNode, | ||||
| style: _setFontStyle(), | |||||
| style: fontStyle, | |||||
| obscureText: isObscureText!, | obscureText: isObscureText!, | ||||
| textInputAction: textInputAction, | |||||
| keyboardType: textInputType, | |||||
| textInputAction: textInputAction!, | |||||
| keyboardType: textInputType!, | |||||
| maxLines: maxLines ?? 1, | maxLines: maxLines ?? 1, | ||||
| decoration: _buildDecoration(), | decoration: _buildDecoration(), | ||||
| validator: validator, | validator: validator, | ||||
| @@ -89,117 +73,19 @@ class CustomTextFormField extends StatelessWidget { | |||||
| ); | ); | ||||
| } | } | ||||
| _buildDecoration() { | |||||
| InputDecoration _buildDecoration() { | |||||
| return InputDecoration( | return InputDecoration( | ||||
| hintText: hintText ?? "", | |||||
| hintStyle: _setFontStyle(), | |||||
| border: _setBorderStyle(), | |||||
| enabledBorder: _setBorderStyle(), | |||||
| focusedBorder: _setBorderStyle(), | |||||
| disabledBorder: _setBorderStyle(), | |||||
| prefixIcon: prefix, | |||||
| prefixIconConstraints: prefixConstraints, | |||||
| suffixIcon: suffix, | |||||
| suffixIconConstraints: suffixConstraints, | |||||
| fillColor: _setFillColor(), | |||||
| filled: _setFilled(), | |||||
| isDense: true, | |||||
| contentPadding: _setPadding(), | |||||
| hintText: hintText, | |||||
| hintStyle: fontStyle, | |||||
| border: shape ?? OutlineInputBorder( | |||||
| borderRadius: BorderRadius.circular(10), | |||||
| borderSide: BorderSide(width: 2), | |||||
| ), | |||||
| contentPadding: padding, | |||||
| prefixIcon: prefixIcon, | |||||
| prefixIconConstraints: prefixIconConstraints, | |||||
| suffixIcon: suffixIcon, | |||||
| suffixIconConstraints: suffixIconConstraints, | |||||
| ); | ); | ||||
| } | } | ||||
| _setFontStyle() { | |||||
| switch (fontStyle) { | |||||
| default: | |||||
| return TextStyle( | |||||
| color: ColorConstant.gray500, | |||||
| fontSize: getFontSize( | |||||
| 13.24, | |||||
| ), | |||||
| fontFamily: 'Roboto', | |||||
| fontWeight: FontWeight.w400, | |||||
| height: getVerticalSize( | |||||
| 1.21, | |||||
| ), | |||||
| ); | |||||
| } | |||||
| } | |||||
| _setOutlineBorderRadius() { | |||||
| switch (shape) { | |||||
| default: | |||||
| return BorderRadius.circular( | |||||
| getHorizontalSize( | |||||
| 20.00, | |||||
| ), | |||||
| ); | |||||
| } | |||||
| } | |||||
| _setBorderStyle() { | |||||
| switch (variant) { | |||||
| case TextFormFieldVariant.None: | |||||
| return InputBorder.none; | |||||
| default: | |||||
| return OutlineInputBorder( | |||||
| borderRadius: _setOutlineBorderRadius(), | |||||
| borderSide: BorderSide( | |||||
| color: ColorConstant.gray300, | |||||
| width: 1, | |||||
| ), | |||||
| ); | |||||
| } | |||||
| } | |||||
| _setFillColor() { | |||||
| switch (variant) { | |||||
| default: | |||||
| return ColorConstant.whiteA700; | |||||
| } | |||||
| } | |||||
| _setFilled() { | |||||
| switch (variant) { | |||||
| case TextFormFieldVariant.None: | |||||
| return false; | |||||
| default: | |||||
| return true; | |||||
| } | |||||
| } | |||||
| _setPadding() { | |||||
| switch (padding) { | |||||
| case TextFormFieldPadding.PaddingT13: | |||||
| return getPadding( | |||||
| left: 13, | |||||
| top: 13, | |||||
| bottom: 13, | |||||
| ); | |||||
| default: | |||||
| return getPadding( | |||||
| left: 12, | |||||
| top: 14, | |||||
| right: 12, | |||||
| bottom: 14, | |||||
| ); | |||||
| } | |||||
| } | |||||
| } | |||||
| enum TextFormFieldShape { | |||||
| RoundedBorder20, | |||||
| } | |||||
| enum TextFormFieldPadding { | |||||
| PaddingT14, | |||||
| PaddingT13, | |||||
| } | |||||
| enum TextFormFieldVariant { | |||||
| None, | |||||
| OutlineGray300, | |||||
| } | |||||
| enum TextFormFieldFontStyle { | |||||
| RobotoRomanRegular1324, | |||||
| } | } | ||||
| @@ -5,26 +5,26 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: archive | name: archive | ||||
| sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d | |||||
| sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "3.3.6" | |||||
| version: "3.6.1" | |||||
| args: | args: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: args | name: args | ||||
| sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" | |||||
| sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.4.0" | |||||
| version: "2.5.0" | |||||
| async: | async: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: async | name: async | ||||
| sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 | |||||
| sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.10.0" | |||||
| version: "2.11.0" | |||||
| boolean_selector: | boolean_selector: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -37,42 +37,42 @@ packages: | |||||
| dependency: "direct main" | dependency: "direct main" | ||||
| description: | description: | ||||
| name: cached_network_image | name: cached_network_image | ||||
| sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 | |||||
| sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "3.2.3" | |||||
| version: "3.3.1" | |||||
| cached_network_image_platform_interface: | cached_network_image_platform_interface: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: cached_network_image_platform_interface | name: cached_network_image_platform_interface | ||||
| sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 | |||||
| sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.0.0" | |||||
| version: "4.0.0" | |||||
| cached_network_image_web: | cached_network_image_web: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: cached_network_image_web | name: cached_network_image_web | ||||
| sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 | |||||
| sha256: "205d6a9f1862de34b93184f22b9d2d94586b2f05c581d546695e3d8f6a805cd7" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.0.2" | |||||
| version: "1.2.0" | |||||
| characters: | characters: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: characters | name: characters | ||||
| sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c | |||||
| sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.2.1" | |||||
| version: "1.3.0" | |||||
| checked_yaml: | checked_yaml: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: checked_yaml | name: checked_yaml | ||||
| sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" | |||||
| sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.0.2" | |||||
| version: "2.0.3" | |||||
| cli_util: | cli_util: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -93,10 +93,10 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: collection | name: collection | ||||
| sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 | |||||
| sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.17.0" | |||||
| version: "1.18.0" | |||||
| connectivity_plus: | connectivity_plus: | ||||
| dependency: "direct main" | dependency: "direct main" | ||||
| description: | description: | ||||
| @@ -145,30 +145,30 @@ packages: | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.2.2" | version: "1.2.2" | ||||
| convert: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: convert | |||||
| sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "3.1.1" | |||||
| crypto: | crypto: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: crypto | name: crypto | ||||
| sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 | |||||
| sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "3.0.2" | |||||
| version: "3.0.3" | |||||
| dbus: | dbus: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: dbus | name: dbus | ||||
| sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" | |||||
| sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "0.7.8" | |||||
| version: "0.7.10" | |||||
| dots_indicator: | |||||
| dependency: "direct main" | |||||
| description: | |||||
| name: dots_indicator | |||||
| sha256: f1599baa429936ba87f06ae5f2adc920a367b16d08f74db58c3d0f6e93bcdb5c | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "2.1.2" | |||||
| fake_async: | fake_async: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -181,10 +181,10 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: ffi | name: ffi | ||||
| sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 | |||||
| sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.0.1" | |||||
| version: "2.1.2" | |||||
| file: | file: | ||||
| dependency: "direct main" | dependency: "direct main" | ||||
| description: | description: | ||||
| @@ -193,27 +193,35 @@ packages: | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "6.1.4" | version: "6.1.4" | ||||
| fixnum: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: fixnum | |||||
| sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "1.1.0" | |||||
| flutter: | flutter: | ||||
| dependency: "direct main" | dependency: "direct main" | ||||
| description: flutter | description: flutter | ||||
| source: sdk | source: sdk | ||||
| version: "0.0.0" | version: "0.0.0" | ||||
| flutter_blurhash: | |||||
| flutter_cache_manager: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: flutter_blurhash | |||||
| sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" | |||||
| name: flutter_cache_manager | |||||
| sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "0.7.0" | |||||
| flutter_cache_manager: | |||||
| dependency: transitive | |||||
| version: "3.3.1" | |||||
| flutter_dotenv: | |||||
| dependency: "direct main" | |||||
| description: | description: | ||||
| name: flutter_cache_manager | |||||
| sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3" | |||||
| name: flutter_dotenv | |||||
| sha256: "9357883bdd153ab78cbf9ffa07656e336b8bbb2b5a3ca596b0b27e119f7c7d77" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "3.3.0" | |||||
| version: "5.1.0" | |||||
| flutter_launcher_icons: | flutter_launcher_icons: | ||||
| dependency: "direct dev" | dependency: "direct dev" | ||||
| description: | description: | ||||
| @@ -252,18 +260,18 @@ packages: | |||||
| dependency: "direct main" | dependency: "direct main" | ||||
| description: | description: | ||||
| name: get | name: get | ||||
| sha256: "2ba20a47c8f1f233bed775ba2dd0d3ac97b4cf32fc17731b3dfc672b06b0e92a" | |||||
| sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "4.6.5" | |||||
| version: "4.6.6" | |||||
| http: | http: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: http | name: http | ||||
| sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" | |||||
| sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "0.13.5" | |||||
| version: "1.2.1" | |||||
| http_parser: | http_parser: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -276,10 +284,10 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: image | name: image | ||||
| sha256: "483a389d6ccb292b570c31b3a193779b1b0178e7eb571986d9a49904b6861227" | |||||
| sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "4.0.15" | |||||
| version: "4.2.0" | |||||
| intl: | intl: | ||||
| dependency: "direct main" | dependency: "direct main" | ||||
| description: | description: | ||||
| @@ -292,42 +300,66 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: js | name: js | ||||
| sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" | |||||
| sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "0.6.5" | |||||
| version: "0.6.7" | |||||
| json_annotation: | json_annotation: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: json_annotation | name: json_annotation | ||||
| sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 | |||||
| sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "4.8.0" | |||||
| version: "4.9.0" | |||||
| leak_tracker: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: leak_tracker | |||||
| sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "10.0.0" | |||||
| leak_tracker_flutter_testing: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: leak_tracker_flutter_testing | |||||
| sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "2.0.1" | |||||
| leak_tracker_testing: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: leak_tracker_testing | |||||
| sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "2.0.1" | |||||
| matcher: | matcher: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: matcher | name: matcher | ||||
| sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" | |||||
| sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "0.12.13" | |||||
| version: "0.12.16+1" | |||||
| material_color_utilities: | material_color_utilities: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: material_color_utilities | name: material_color_utilities | ||||
| sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 | |||||
| sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "0.2.0" | |||||
| version: "0.8.0" | |||||
| meta: | meta: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: meta | name: meta | ||||
| sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" | |||||
| sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.8.0" | |||||
| version: "1.11.0" | |||||
| nm: | nm: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -340,18 +372,18 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: octo_image | name: octo_image | ||||
| sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" | |||||
| sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.0.2" | |||||
| version: "2.0.0" | |||||
| path: | path: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: path | name: path | ||||
| sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b | |||||
| sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.8.2" | |||||
| version: "1.9.0" | |||||
| path_drawing: | path_drawing: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -372,98 +404,74 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: path_provider | name: path_provider | ||||
| sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" | |||||
| sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.0.13" | |||||
| version: "2.1.3" | |||||
| path_provider_android: | path_provider_android: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: path_provider_android | name: path_provider_android | ||||
| sha256: "7623b7d4be0f0f7d9a8b5ee6879fc13e4522d4c875ab86801dee4af32b54b83e" | |||||
| sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.0.23" | |||||
| version: "2.2.4" | |||||
| path_provider_foundation: | path_provider_foundation: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: path_provider_foundation | name: path_provider_foundation | ||||
| sha256: eec003594f19fe2456ea965ae36b3fc967bc5005f508890aafe31fa75e41d972 | |||||
| sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.2" | |||||
| version: "2.4.0" | |||||
| path_provider_linux: | path_provider_linux: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: path_provider_linux | name: path_provider_linux | ||||
| sha256: "525ad5e07622d19447ad740b1ed5070031f7a5437f44355ae915ff56e986429a" | |||||
| sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.9" | |||||
| version: "2.2.1" | |||||
| path_provider_platform_interface: | path_provider_platform_interface: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: path_provider_platform_interface | name: path_provider_platform_interface | ||||
| sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" | |||||
| sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.0.6" | |||||
| version: "2.1.2" | |||||
| path_provider_windows: | path_provider_windows: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: path_provider_windows | name: path_provider_windows | ||||
| sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d" | |||||
| sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.4" | |||||
| pedantic: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: pedantic | |||||
| sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "1.11.1" | |||||
| version: "2.2.1" | |||||
| petitparser: | petitparser: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: petitparser | name: petitparser | ||||
| sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" | |||||
| sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "5.1.0" | |||||
| version: "6.0.2" | |||||
| platform: | platform: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: platform | name: platform | ||||
| sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" | |||||
| sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "3.1.0" | |||||
| version: "3.1.5" | |||||
| plugin_platform_interface: | plugin_platform_interface: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: plugin_platform_interface | name: plugin_platform_interface | ||||
| sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" | |||||
| sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.4" | |||||
| pointycastle: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: pointycastle | |||||
| sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "3.6.2" | |||||
| process: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: process | |||||
| sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "4.2.4" | |||||
| version: "2.1.8" | |||||
| rxdart: | rxdart: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -476,58 +484,58 @@ packages: | |||||
| dependency: "direct main" | dependency: "direct main" | ||||
| description: | description: | ||||
| name: shared_preferences | name: shared_preferences | ||||
| sha256: ee6257848f822b8481691f20c3e6d2bfee2e9eccb2a3d249907fcfb198c55b41 | |||||
| sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.0.18" | |||||
| version: "2.2.3" | |||||
| shared_preferences_android: | shared_preferences_android: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: shared_preferences_android | name: shared_preferences_android | ||||
| sha256: a51a4f9375097f94df1c6e0a49c0374440d31ab026b59d58a7e7660675879db4 | |||||
| sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.0.16" | |||||
| version: "2.2.2" | |||||
| shared_preferences_foundation: | shared_preferences_foundation: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: shared_preferences_foundation | name: shared_preferences_foundation | ||||
| sha256: "6b84fdf06b32bb336f972d373cd38b63734f3461ba56ac2ba01b56d052796259" | |||||
| sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.4" | |||||
| version: "2.4.0" | |||||
| shared_preferences_linux: | shared_preferences_linux: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: shared_preferences_linux | name: shared_preferences_linux | ||||
| sha256: d7fb71e6e20cd3dfffcc823a28da3539b392e53ed5fc5c2b90b55fdaa8a7e8fa | |||||
| sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.4" | |||||
| version: "2.3.2" | |||||
| shared_preferences_platform_interface: | shared_preferences_platform_interface: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: shared_preferences_platform_interface | name: shared_preferences_platform_interface | ||||
| sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc" | |||||
| sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.1" | |||||
| version: "2.3.2" | |||||
| shared_preferences_web: | shared_preferences_web: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: shared_preferences_web | name: shared_preferences_web | ||||
| sha256: "6737b757e49ba93de2a233df229d0b6a87728cea1684da828cbc718b65dcf9d7" | |||||
| sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.0.5" | |||||
| version: "2.3.0" | |||||
| shared_preferences_windows: | shared_preferences_windows: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: shared_preferences_windows | name: shared_preferences_windows | ||||
| sha256: bd014168e8484837c39ef21065b78f305810ceabc1d4f90be6e3b392ce81b46d | |||||
| sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.4" | |||||
| version: "2.3.2" | |||||
| sky_engine: | sky_engine: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: flutter | description: flutter | ||||
| @@ -537,42 +545,50 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: source_span | name: source_span | ||||
| sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 | |||||
| sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.9.1" | |||||
| version: "1.10.0" | |||||
| sprintf: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: sprintf | |||||
| sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "7.0.0" | |||||
| sqflite: | sqflite: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: sqflite | name: sqflite | ||||
| sha256: "851d5040552cf911f4cabda08d003eca76b27da3ed0002978272e27c8fbf8ecc" | |||||
| sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.2.5" | |||||
| version: "2.3.3+1" | |||||
| sqflite_common: | sqflite_common: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: sqflite_common | name: sqflite_common | ||||
| sha256: bfd6973aaeeb93475bc0d875ac9aefddf7965ef22ce09790eb963992ffc5183f | |||||
| sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.4.2+2" | |||||
| version: "2.5.4" | |||||
| stack_trace: | stack_trace: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: stack_trace | name: stack_trace | ||||
| sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 | |||||
| sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.11.0" | |||||
| version: "1.11.1" | |||||
| stream_channel: | stream_channel: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: stream_channel | name: stream_channel | ||||
| sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" | |||||
| sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.1" | |||||
| version: "2.1.2" | |||||
| string_scanner: | string_scanner: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -585,10 +601,10 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: synchronized | name: synchronized | ||||
| sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b" | |||||
| sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "3.0.1" | |||||
| version: "3.1.0+1" | |||||
| term_glyph: | term_glyph: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -601,26 +617,26 @@ packages: | |||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: test_api | name: test_api | ||||
| sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 | |||||
| sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "0.4.16" | |||||
| version: "0.6.1" | |||||
| typed_data: | typed_data: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: typed_data | name: typed_data | ||||
| sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" | |||||
| sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.3.1" | |||||
| version: "1.3.2" | |||||
| uuid: | uuid: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: uuid | name: uuid | ||||
| sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" | |||||
| sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "3.0.7" | |||||
| version: "4.4.0" | |||||
| vector_math: | vector_math: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| @@ -629,38 +645,54 @@ packages: | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "2.1.4" | version: "2.1.4" | ||||
| vm_service: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: vm_service | |||||
| sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "13.0.0" | |||||
| web: | |||||
| dependency: transitive | |||||
| description: | |||||
| name: web | |||||
| sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" | |||||
| url: "https://pub.dev" | |||||
| source: hosted | |||||
| version: "0.5.1" | |||||
| win32: | win32: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: win32 | name: win32 | ||||
| sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 | |||||
| sha256: "0eaf06e3446824099858367950a813472af675116bf63f008a4c2a75ae13e9cb" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "3.1.3" | |||||
| version: "5.5.0" | |||||
| xdg_directories: | xdg_directories: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: xdg_directories | name: xdg_directories | ||||
| sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 | |||||
| sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "1.0.0" | |||||
| version: "1.0.4" | |||||
| xml: | xml: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: xml | name: xml | ||||
| sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" | |||||
| sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "6.2.2" | |||||
| version: "6.5.0" | |||||
| yaml: | yaml: | ||||
| dependency: transitive | dependency: transitive | ||||
| description: | description: | ||||
| name: yaml | name: yaml | ||||
| sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" | |||||
| sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" | |||||
| url: "https://pub.dev" | url: "https://pub.dev" | ||||
| source: hosted | source: hosted | ||||
| version: "3.1.1" | |||||
| version: "3.1.2" | |||||
| sdks: | sdks: | ||||
| dart: ">=2.18.0 <3.0.0" | |||||
| flutter: ">=3.3.0" | |||||
| dart: ">=3.3.0 <4.0.0" | |||||
| flutter: ">=3.19.0" | |||||
| @@ -7,6 +7,7 @@ dependencies: | |||||
| flutter: | flutter: | ||||
| sdk: flutter | sdk: flutter | ||||
| get: ^4.6.5 | get: ^4.6.5 | ||||
| flutter_dotenv: ^5.0.2 | |||||
| connectivity_plus: ^2.3.6 | connectivity_plus: ^2.3.6 | ||||
| shared_preferences: ^2.0.15 | shared_preferences: ^2.0.15 | ||||
| cached_network_image: ^3.2.1 | cached_network_image: ^3.2.1 | ||||
| @@ -14,6 +15,7 @@ dependencies: | |||||
| flutter_switch: ^0.3.2 | flutter_switch: ^0.3.2 | ||||
| intl: ^0.17.0 | intl: ^0.17.0 | ||||
| file: ^6.1.4 | file: ^6.1.4 | ||||
| dots_indicator: ^2.0.0 | |||||
| dev_dependencies: | dev_dependencies: | ||||
| flutter_test: | flutter_test: | ||||
| sdk: flutter | sdk: flutter | ||||
| @@ -22,7 +24,14 @@ flutter: | |||||
| uses-material-design: true | uses-material-design: true | ||||
| assets: | assets: | ||||
| - assets/ | - assets/ | ||||
| - assets/images/ | |||||
| - assets/images/CookingLab-Top.jpg | |||||
| - assets/images/logo_a_fa.png | |||||
| - assets/images/img_rectangle286.png | |||||
| - assets/images/img1.png | |||||
| - assets/images/img2.png | |||||
| - assets/images/img3.png | |||||
| - assets/images/img_image1.png | |||||
| - assets/images/foto-CookingLab.jpeg | |||||
| fonts: | fonts: | ||||
| - family: Roboto | - family: Roboto | ||||
| fonts: | fonts: | ||||