@@ -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: | ||||