login , logout,auth #8

Merged
snehalathad merged 1 commits from snehalatha_dev into dev 2024-12-18 04:40:15 +00:00
13 changed files with 254 additions and 199 deletions

2
.gitignore vendored
View File

@ -5,9 +5,11 @@
*.swp *.swp
.DS_Store .DS_Store
.atom/ .atom/
.build/
.buildlog/ .buildlog/
.history .history
.svn/ .svn/
.swiftpm/
migrate_working_dir/ migrate_working_dir/
# IntelliJ related # IntelliJ related

View File

@ -1,14 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:konectar_events/contacts_module/constants.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/interactionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/model/interaction_data.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/util.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/viewinteractionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/custombutton.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/customrangeslider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/responsive_ext.dart';
import 'package:dropdownfield2/dropdownfield2.dart'; import 'package:dropdownfield2/dropdownfield2.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -16,6 +8,15 @@ import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:konectar_events/contacts_module/constants.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/interactionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/model/interaction_data.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/viewinteractionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/customrangeslider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/responsive_ext.dart';
import 'package:konectar_events/utils/appcolors.dart';
import 'package:konectar_events/utils/util.dart';
import 'package:konectar_events/widgets/custombutton.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:popover/popover.dart'; import 'package:popover/popover.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -102,7 +103,7 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
setState(() {}); setState(() {});
} }
final CarouselController _controller = CarouselController(); final FlutterCarouselController _controller = FlutterCarouselController();
@override @override
void dispose() { void dispose() {
@ -157,7 +158,7 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
// sectionList = item.sectionList; // sectionList = item.sectionList;
// print("Section_ListttPooja: $sectionList"); // print("Section_ListttPooja: $sectionList");
FlutterCarousel( FlutterCarousel(
options: CarouselOptions( options: FlutterCarouselOptions(
onPageChanged: (index, reason) { onPageChanged: (index, reason) {
setState(() { setState(() {
_currentPage = index; _currentPage = index;

View File

@ -60,7 +60,7 @@ class _EditInteractionScreenState extends State<EditInteractionScreen1> {
String? fileName; String? fileName;
final TextEditingController textEditingController = TextEditingController(); final TextEditingController textEditingController = TextEditingController();
final CarouselController _controller = CarouselController(); final FlutterCarouselController _controller = FlutterCarouselController();
int _currentPage = 0; int _currentPage = 0;
late int _totalPages = late int _totalPages =
@ -156,7 +156,7 @@ class _EditInteractionScreenState extends State<EditInteractionScreen1> {
// var item = provider.interactionReponseList[index]; // var item = provider.interactionReponseList[index];
// sectionList = item.sectionList; // sectionList = item.sectionList;
child: FlutterCarousel( child: FlutterCarousel(
options: CarouselOptions( options: FlutterCarouselOptions(
onPageChanged: (index, reason) { onPageChanged: (index, reason) {
setState(() { setState(() {
_currentPage = index; _currentPage = index;

View File

@ -260,39 +260,41 @@ Future main() async {
create: (_) => HiveDataRepository( create: (_) => HiveDataRepository(
Hive.box<InteractionConfigData>('InteractionConfigDataBox'))), Hive.box<InteractionConfigData>('InteractionConfigDataBox'))),
], ],
child: SafeArea( child:
top: true, // SafeArea(
child: MaterialApp( // top: true,
theme: ThemeData( // child:
//fontFamily: "SourceSerif", MaterialApp(
), theme: ThemeData(
debugShowCheckedModeBanner: false, //fontFamily: "SourceSerif",
title: 'Dynamic Links Example', ),
initialRoute: '/', debugShowCheckedModeBanner: false,
routes: <String, WidgetBuilder>{ title: 'Dynamic Links Example',
'/': (BuildContext context) => FutureBuilder<bool>( initialRoute: '/',
future: SessionManager().isLoggedIn(), routes: <String, WidgetBuilder>{
builder: (context, snapshot) { '/': (BuildContext context) => FutureBuilder<bool>(
print("Data_is : $snapshot"); future: SessionManager().isLoggedIn(),
if (snapshot.connectionState == ConnectionState.waiting) { builder: (context, snapshot) {
return const CircularProgressIndicator(); print("Data_is : $snapshot");
} else if (snapshot.hasError) { if (snapshot.connectionState == ConnectionState.waiting) {
return Text('Error: ${snapshot.error}'); return const CircularProgressIndicator();
} else { } else if (snapshot.hasError) {
final isLoggedIn = snapshot.data ?? false; return Text('Error: ${snapshot.error}');
print("isLoggedIn_is : $isLoggedIn"); } else {
print("secret : $secretkey"); final isLoggedIn = snapshot.data ?? false;
return isLoggedIn print("isLoggedIn_is : $isLoggedIn");
? NavigationHomeScreen() print("secret : $secretkey");
: IntroductionAnimationScreen(); return isLoggedIn
} ? NavigationHomeScreen()
}, : IntroductionAnimationScreen();
), //userInfo != null ? const Home() : OpenidScreen(credential: credential,), }
// '/details': (BuildContext context) => const HomeScreen(), },
}, ), //userInfo != null ? const Home() : OpenidScreen(credential: credential,),
), // '/details': (BuildContext context) => const HomeScreen(),
},
), ),
), ),
// ),
); );
}); });
} }

View File

@ -27,13 +27,15 @@ import 'package:konectar_events/model/verify_user_resp.dart';
import 'package:konectar_events/utils/constants.dart'; import 'package:konectar_events/utils/constants.dart';
import 'package:konectar_events/viewmodel/hive_repository.dart'; import 'package:konectar_events/viewmodel/hive_repository.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;
class ApiCall { class ApiCall {
final dio = Dio(); final dio = Dio();
final Future<SharedPreferences> _prefs = SharedPreferences.getInstance(); final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
late Future<String> _token; late Future<String> _token;
String newtoken =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZWNyZXRlVG9rZW4iOiJiYjNmOTZmYmI5Y2U3ZjA2ZTliOTlkMzRiMGM3YjZkZTBlNjBmYWYzYmM1NDFhZjY0MGQ5ZjAzMGRlNzMxOWM4ZTAwZWNkMCIsImlhdCI6MTczNDM0OTUwNywiZXhwIjoxNzM0MzUxMzA3fQ.nN5XtgmWHVGGdyLEdICY6jTmlg1070rGFwsdyOd4CYY";
//K1 API CALLS //K1 API CALLS
Future<dynamic> parseInfo() async { Future<dynamic> parseInfo() async {
Dio dio = Dio(); Dio dio = Dio();
@ -123,38 +125,44 @@ class ApiCall {
return client; return client;
}; };
Response response; Response response;
var formData = FormData.fromMap({ String date = "2024-12-17";
"start": "2024-12-05", var formData =
"end": "2024-12-31", FormData.fromMap({"start": date, "order_by": 7, 'type': type ?? 1});
"order_by": 8,
'type': type ?? 1
});
// "end": DateTime(2024, 12, 14).toIso8601String(), // "end": DateTime(2024, 12, 14).toIso8601String(),
_token = _prefs.then((SharedPreferences prefs) { _token = _prefs.then((SharedPreferences prefs) {
return prefs.getString('token') ?? ""; return prefs.getString('token') ?? "";
}); });
print("SAVED TOKEN :${await _token}"); print("SAVED TOKEN :${await _token}");
response = try {
await dio.post('${EventsConstants.url}${EventsConstants.eventslistapi}', // dio.options.contentType = Headers.multipartFormDataContentType;
options: Options(headers: { // dio.options.baseUrl = "https://cardio-staging.konectar.io/";
"Authorization": "Bearer ${await _token}",
}),
// queryParameters: {
// "user_email": "vinodh@aissel.com",
// "project_id": "",
// "start": 2024 - 11 - 22,
// "end": "",
// "order_by": 7,
// "type": 1,
// },
data: formData);
print("response user eventssssss here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.data);
EventsData eventresponse = EventsData.fromJson(jsondata); // dio.options.headers["Authorization"] = "Bearer ${newtoken}";
List<EventsList>? eventdata = eventresponse.events;
return eventdata!; response = await dio.post(
'https://cardio-staging.konectar.io/apis/v1/events/loadFutureEvents/',
options: Options(
contentType: "multipart/form-data",
followRedirects: false,
// will not throw errors
validateStatus: (status) => true,
headers: {
'Authorization': 'Bearer ${newtoken}',
}),
data: formData);
print("RESPONSE");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.data);
EventsData eventresponse = EventsData.fromJson(jsondata);
List<EventsList>? eventdata = eventresponse.events;
return eventdata!;
} catch (e) {
print("EXCEPTION:${e.toString()}");
}
print("response user eventssssss here!!!!!!!!!!!!!!!!!!!!! ");
return [];
} }
Future<dynamic> followUnfollowEvent(String flag, String eventid) async { Future<dynamic> followUnfollowEvent(String flag, String eventid) async {
@ -588,7 +596,7 @@ class ApiCall {
//VERIFY EMAIL K1 //VERIFY EMAIL K1
Future<dynamic> verifyEmail( Future<dynamic> verifyEmail(
String email, String deviceid, String platform) async { String url, String email, String deviceid, String platform) async {
Dio dio = Dio(); Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate = (dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) { (HttpClient client) {
@ -601,19 +609,25 @@ class ApiCall {
"email_id": email, "email_id": email,
"device_id": deviceid, "device_id": deviceid,
}); });
response = await dio.post( try {
'${EventsConstants.loginUrl}${EventsConstants.getVerificationCode}', response = await dio.post(
options: Options(), '${url}${EventsConstants.loginmodule}/${EventsConstants.getVerificationCode}',
data: formData); options: Options(),
if (response.statusCode == 200) { data: formData);
print("response user login!!!!!!!!!!!!!!!!!!!!! \n ${response.data} "); if (response.statusCode == 200) {
Map<String, dynamic> jsondata = json.decode(response.data); print("response user login!!!!!!!!!!!!!!!!!!!!! \n ${response.data} ");
//Map<String, dynamic> jsondata = json.decode(response.data);
VerificationResponse verificationResponse =
verificationResponseFromJson(response.data);
return verificationResponse;
} else {
print("isEmpty");
return null;
}
} catch (e) {
VerificationResponse verificationResponse = VerificationResponse verificationResponse =
verificationResponseFromJson(response.data); VerificationResponse(status: 1401, message: "Invalid Domain");
return verificationResponse; return verificationResponse;
} else {
print("isEmpty");
return null;
} }
} }
@ -656,14 +670,24 @@ class ApiCall {
(X509Certificate cert, String host, int port) => true; (X509Certificate cert, String host, int port) => true;
return client; return client;
}; };
print("email : $email,device : $deviceid");
_token = _prefs.then((SharedPreferences prefs) {
return prefs.getString('token') ?? "";
});
Response response; Response response;
print("url :${EventsConstants.loginUrl}${EventsConstants.logout}"); print("url :${EventsConstants.loginUrl}${EventsConstants.logout}/");
var formData = FormData.fromMap({ var formData = FormData.fromMap({
"email_id": email, "email_id": email,
"device_id": deviceid, "device_id": deviceid,
}); });
response = await dio.post( response = await dio.post(
'${EventsConstants.loginUrl}${EventsConstants.logout}', '${EventsConstants.loginUrl}${EventsConstants.logout}',
options: Options(
contentType: "application/x-www-form-urlencoded",
followRedirects: false,
// will not throw errors
validateStatus: (status) => true,
headers: {"Authorization": "Bearer $_token"}),
data: formData, data: formData,
// queryParameters: { // queryParameters: {
// "token": token, // "token": token,

View File

@ -19,16 +19,6 @@ class AppTheme {
static const Color spacer = Color(0xFFF2F2F2); static const Color spacer = Color(0xFFF2F2F2);
static const String fontName = 'WorkSans'; static const String fontName = 'WorkSans';
static const TextTheme textTheme = TextTheme(
headline4: display1,
headline5: headline,
headline6: title,
subtitle2: subtitle,
bodyText2: body2,
bodyText1: body1,
caption: caption,
);
static const TextStyle display1 = TextStyle( static const TextStyle display1 = TextStyle(
// h4 -> display1 // h4 -> display1
fontFamily: fontName, fontFamily: fontName,

View File

@ -37,13 +37,13 @@ class FieldValidation {
static String validateUrl(String url) { static String validateUrl(String url) {
if (url.isEmpty) { if (url.isEmpty) {
return 'Please enter application url'; return 'Please enter domain url';
} else { } else {
bool isURLValid = Uri.parse(url).host.isNotEmpty; bool isURLValid = Uri.parse(url).host.isNotEmpty;
if (isURLValid) { if (isURLValid) {
return ''; return '';
} else { } else {
return 'Please enter valid application url'; return 'Please enter valid domain url';
} }
} }
} }

View File

@ -19,6 +19,7 @@ import 'package:konectar_events/viewmodel/loginprovider.dart';
import 'package:konectar_events/widgets/customappbar.dart'; import 'package:konectar_events/widgets/customappbar.dart';
import 'package:konectar_events/widgets/custombutton.dart'; import 'package:konectar_events/widgets/custombutton.dart';
import 'package:konectar_events/widgets/customtextfield.dart'; import 'package:konectar_events/widgets/customtextfield.dart';
import 'package:konectar_events/widgets/snackbar.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:mobile_device_identifier/mobile_device_identifier.dart'; import 'package:mobile_device_identifier/mobile_device_identifier.dart';
@ -52,7 +53,6 @@ class _LoginScreenState extends State<LoginScreen> {
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
init();
provider = Provider.of<LoginProvider>(context, listen: false); provider = Provider.of<LoginProvider>(context, listen: false);
initDeviceId(); initDeviceId();
if (Platform.isAndroid) { if (Platform.isAndroid) {
@ -98,10 +98,6 @@ class _LoginScreenState extends State<LoginScreen> {
print("DEVICE ID########################## :$deviceId"); print("DEVICE ID########################## :$deviceId");
} }
init() async {
await ApiCall().parseInfo();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<LoginProvider>( return Consumer<LoginProvider>(
@ -281,6 +277,28 @@ class _LoginScreenState extends State<LoginScreen> {
const SizedBox( const SizedBox(
height: 20, height: 20,
), ),
SizedBox(
height: 50,
child: TextField(
controller: domainTextConrtroller,
style: TextStyle(fontSize: isTablet ? 18.0 : 16),
decoration: InputDecoration(
border: const OutlineInputBorder(),
labelStyle: TextStyle(fontSize: isTablet ? 18.0 : 16),
labelText: "Domain",
hintStyle: TextStyle(fontSize: isTablet ? 18.0 : 16),
prefix: Text("https://"),
suffix: Text(".io/"),
hintText: "Enter your Domain"),
),
),
// CustomTextField(
// labelText: "Domain Url",
// controller: domainTextConrtroller,
// ),
const SizedBox(
height: 10,
),
CustomTextField( CustomTextField(
labelText: "Email", controller: emailTextController), labelText: "Email", controller: emailTextController),
// const SizedBox(), // const SizedBox(),
@ -307,12 +325,11 @@ class _LoginScreenState extends State<LoginScreen> {
child: CustomButton( child: CustomButton(
backgroundColor: EventsConstants.onboardButtonColor, backgroundColor: EventsConstants.onboardButtonColor,
onPressed: () async { onPressed: () async {
setState(() {
print("loading");
provider.loading = true;
});
if (textFieldsValidation(provider).isEmpty) { if (textFieldsValidation(provider).isEmpty) {
setState(() {
print("loading");
provider.loading = true;
});
print("email:${emailTextController.text}"); print("email:${emailTextController.text}");
// if (await _logout) { // if (await _logout) {
// print("LOGOUT"); // print("LOGOUT");
@ -341,44 +358,57 @@ class _LoginScreenState extends State<LoginScreen> {
provider.email = emailTextController.text; provider.email = emailTextController.text;
// String encoded = // String encoded =
// base64.encode(utf8.encode(deviceId)); // base64.encode(utf8.encode(deviceId));
String domain =
VerificationResponse resp = await provider.verifyEmail( "https://${domainTextConrtroller.text}.io/";
var resp = await provider.verifyEmail(domain,
emailTextController.text, deviceId!, platform); emailTextController.text, deviceId!, platform);
print("resp:${resp.status}"); if (resp != null) {
print("resp:${resp.status}");
if (resp.status == 1200 && if (resp.status == 1200 &&
resp.verification_code != null) { resp.verification_code != null) {
provider.loading = false; provider.loading = false;
provider.showCodeField = true; provider.showCodeField = true;
provider.showMessage = true; provider.showMessage = true;
} else if (resp.status == 1200 && // secretKeyTextConrtroller.text =
resp.accessToken != "") { // resp.verification_code!;
provider.loading = false; } else if (resp.status == 1200 &&
provider.showCodeField = false; resp.accessToken != "") {
provider.showMessage = true; provider.loading = false;
_displaySnackBar("You have logged in successfully"); provider.showCodeField = false;
_saveprefs(
resp.accessToken!, provider.showMessage = true;
resp.user?.email ?? emailTextController.text, SnackBarWidget.displaySnackBar(
secretKeyTextConrtroller.text, "You have logged in successfully", context);
deviceId!, _saveprefs(
true) resp.accessToken!,
.then((value) { resp.user?.email ??
Navigator.of(context).pushReplacement( emailTextController.text,
MaterialPageRoute( secretKeyTextConrtroller.text,
builder: (context) => NavigationHomeScreen()), deviceId!,
); true)
.then((value) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) =>
NavigationHomeScreen()),
);
});
} else {
provider.loading = false;
provider.showCodeField = false;
// provider.showMessage = true;
SnackBarWidget.displaySnackBar(
resp.message, context,
error: true);
();
}
provider.message = resp.message;
setState(() {
emailTextController.text = provider.email!;
}); });
} else {
provider.loading = false;
provider.showCodeField = false;
provider.showMessage = true;
} }
provider.message = resp.message;
setState(() {
emailTextController.text = provider.email!;
});
} else { } else {
provider.code = secretKeyTextConrtroller.text; provider.code = secretKeyTextConrtroller.text;
VerificationResponse resp = await provider.verifyCode( VerificationResponse resp = await provider.verifyCode(
@ -409,6 +439,7 @@ class _LoginScreenState extends State<LoginScreen> {
secretKeyTextConrtroller.text = provider.code!; secretKeyTextConrtroller.text = provider.code!;
}); });
} }
// } // }
//_joinMeeting(roomText.text, "demo meet2"); //_joinMeeting(roomText.text, "demo meet2");
@ -479,7 +510,7 @@ class _LoginScreenState extends State<LoginScreen> {
return secretkey; return secretkey;
}); });
_verification_code = _verification_code =
prefs.setString('verfication_code', key).then((bool success) { prefs.setString('deviceid', vcode).then((bool success) {
return verification_code; return verification_code;
}); });
_login = prefs.setBool('isloggedin', login).then((bool success) { _login = prefs.setBool('isloggedin', login).then((bool success) {
@ -505,12 +536,15 @@ class _LoginScreenState extends State<LoginScreen> {
// if (FieldValidation.validateName(nameTextController.text).isNotEmpty) { // if (FieldValidation.validateName(nameTextController.text).isNotEmpty) {
// return FieldValidation.validateName(nameTextController.text); // return FieldValidation.validateName(nameTextController.text);
// } // }
String domain = "https://${domainTextConrtroller.text}.io/";
if (FieldValidation.validateUrl(domain).isNotEmpty) {
return FieldValidation.validateUrl(domain);
}
if (FieldValidation.validateEmail(emailTextController.text).isNotEmpty) { if (FieldValidation.validateEmail(emailTextController.text).isNotEmpty) {
return FieldValidation.validateEmail(emailTextController.text); return FieldValidation.validateEmail(emailTextController.text);
} }
// if (FieldValidation.validateUrl(domainTextConrtroller.text).isNotEmpty) {
// return FieldValidation.validateUrl(domainTextConrtroller.text);
// }
if (provider.showCodeField) { if (provider.showCodeField) {
if (FieldValidation.validateSecretKey(secretKeyTextConrtroller.text) if (FieldValidation.validateSecretKey(secretKeyTextConrtroller.text)
.isNotEmpty) { .isNotEmpty) {

View File

@ -36,12 +36,12 @@ class _NavigationHomeScreenState extends State<NavigationHomeScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
color: AppTheme.white, color: Colors.white,
child: SafeArea( child: SafeArea(
top: false, top: false,
bottom: false, bottom: false,
child: Scaffold( child: Scaffold(
backgroundColor: AppTheme.nearlyWhite, backgroundColor: Colors.white,
body: DrawerUserController( body: DrawerUserController(
screenIndex: drawerIndex, screenIndex: drawerIndex,
drawerWidth: MediaQuery.of(context).size.width * 0.75, drawerWidth: MediaQuery.of(context).size.width * 0.75,

View File

@ -19,8 +19,9 @@ class LoginProvider extends ChangeNotifier {
String deviceId = 'Unknown'; String deviceId = 'Unknown';
init() {} init() {}
Future<dynamic> verifyEmail(String email, String deviceid, String platform) { Future<dynamic> verifyEmail(
final response = ApiCall().verifyEmail(email, deviceid, platform); String url, String email, String deviceid, String platform) {
dynamic response = ApiCall().verifyEmail(url, email, deviceid, platform);
loading = true; loading = true;
return response; return response;
} }

View File

@ -36,7 +36,7 @@ class _HomeDrawerState extends State<HomeDrawer> {
}); });
_deviceid = _prefs.then((SharedPreferences prefs) { _deviceid = _prefs.then((SharedPreferences prefs) {
return prefs.getString('verfication_code') ?? ""; return prefs.getString('deviceid') ?? "";
}); });
super.initState(); super.initState();
} }

View File

@ -189,10 +189,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: carousel_slider name: carousel_slider
sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" sha256: "7b006ec356205054af5beaef62e2221160ea36b90fb70a35e4deacd49d0349ae"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.2.1" version: "5.0.0"
characters: characters:
dependency: transitive dependency: transitive
description: description:
@ -253,10 +253,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.18.0" version: "1.19.0"
connectivity_plus: connectivity_plus:
dependency: "direct main" dependency: "direct main"
description: description:
@ -285,10 +285,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: cross_file name: cross_file
sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.4+1" version: "0.3.4+2"
crypto: crypto:
dependency: transitive dependency: transitive
description: description:
@ -429,10 +429,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: file_picker name: file_picker
sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" sha256: c2376a6aae82358a9f9ccdd7d1f4006d08faa39a2767cce01031d9f593a8bd3b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.0.5" version: "8.1.6"
file_selector_linux: file_selector_linux:
dependency: transitive dependency: transitive
description: description:
@ -477,18 +477,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: firebase_core_platform_interface name: firebase_core_platform_interface
sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.0" version: "5.3.1"
firebase_core_web: firebase_core_web:
dependency: transitive dependency: transitive
description: description:
name: firebase_core_web name: firebase_core_web
sha256: "43d9e951ac52b87ae9cc38ecdcca1e8fa7b52a1dd26a96085ba41ce5108db8e9" sha256: "9e69806bb3d905aeec3c1242e0e1475de6ea6d48f456af29d598fb229a2b4e5e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.17.0" version: "2.18.2"
firebase_remote_config: firebase_remote_config:
dependency: "direct main" dependency: "direct main"
description: description:
@ -546,10 +546,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_carousel_widget name: flutter_carousel_widget
sha256: "9476c39f1fcff57fb387a1a3c379a01f7c73eca4179ac1b41c07b7181fadec14" sha256: "6473e6df04bfafea70efd58251fe5945d5aa8d19461575c1b9d83643f08e0c77"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.0" version: "3.1.0"
flutter_heatmap_calendar: flutter_heatmap_calendar:
dependency: "direct main" dependency: "direct main"
description: description:
@ -689,7 +689,7 @@ packages:
source: hosted source: hosted
version: "0.15.4" version: "0.15.4"
http: http:
dependency: transitive dependency: "direct main"
description: description:
name: http name: http
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
@ -748,10 +748,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: image_picker_for_web name: image_picker_for_web
sha256: "6a1704fdd75022272e7e7a897a9068e9c2ff3cd6a66820bf3ded810633eac954" sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "3.0.6"
image_picker_ios: image_picker_ios:
dependency: transitive dependency: transitive
description: description:
@ -860,26 +860,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.0" version: "10.0.7"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "3.0.8"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_testing name: leak_tracker_testing
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "3.0.1"
logger: logger:
dependency: transitive dependency: transitive
description: description:
@ -908,18 +908,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.0" version: "0.11.1"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.11.0" version: "1.15.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -1276,10 +1276,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_web name: shared_preferences_web
sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.0" version: "2.2.1"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
@ -1308,7 +1308,7 @@ packages:
dependency: transitive dependency: transitive
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.99" version: "0.0.0"
sliver_tools: sliver_tools:
dependency: transitive dependency: transitive
description: description:
@ -1369,10 +1369,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.11.1" version: "1.12.0"
state_notifier: state_notifier:
dependency: transitive dependency: transitive
description: description:
@ -1401,10 +1401,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.3.0"
syncfusion_flutter_charts: syncfusion_flutter_charts:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1457,10 +1457,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.1" version: "0.7.3"
textfield_tags: textfield_tags:
dependency: "direct dev" dependency: "direct dev"
description: description:
@ -1553,10 +1553,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_web name: url_launcher_web
sha256: "3692a459204a33e04bc94f5fb91158faf4f2c8903281ddd82915adecdb1a901d" sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.0" version: "2.3.3"
url_launcher_windows: url_launcher_windows:
dependency: transitive dependency: transitive
description: description:
@ -1609,10 +1609,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "13.0.0" version: "14.3.0"
watcher: watcher:
dependency: transitive dependency: transitive
description: description:
@ -1625,26 +1625,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: web name: web
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.1" version: "1.1.0"
web_socket_channel: web_socket_channel:
dependency: transitive dependency: transitive
description: description:
name: web_socket_channel name: web_socket_channel
sha256: "1d8e795e2a8b3730c41b8a98a2dff2e0fb57ae6f0764a1c46ec5915387d257b2" sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.4" version: "2.4.0"
win32: win32:
dependency: transitive dependency: transitive
description: description:
name: win32 name: win32
sha256: "0a989dc7ca2bb51eac91e8fd00851297cfffd641aa7538b165c62637ca0eaa4a" sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.4.0" version: "5.5.4"
word_cloud: word_cloud:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1694,5 +1694,5 @@ packages:
source: hosted source: hosted
version: "2.0.1" version: "2.0.1"
sdks: sdks:
dart: ">=3.3.0 <4.0.0" dart: ">=3.4.0 <4.0.0"
flutter: ">=3.19.0" flutter: ">=3.22.0"

View File

@ -66,7 +66,7 @@ dependencies:
path_provider: ^2.1.3 path_provider: ^2.1.3
provider: ^6.1.2 provider: ^6.1.2
dropdown_button2: ^2.3.9 dropdown_button2: ^2.3.9
file_picker: ^8.0.2 file_picker: ^8.1.4
permission_handler: ^11.3.1 permission_handler: ^11.3.1
connectivity_plus: ^6.0.3 connectivity_plus: ^6.0.3
@ -82,8 +82,8 @@ dependencies:
popover: ^0.3.0+1 popover: ^0.3.0+1
data_table_2: ^2.5.15 data_table_2: ^2.5.15
expandable: ^5.0.1 expandable: ^5.0.1
flutter_carousel_widget: ^2.2.0 carousel_slider: ^5.0.0
carousel_slider: ^4.2.1 flutter_carousel_widget: ^3.1.0
popup_menu: ^2.0.0 popup_menu: ^2.0.0
adoptive_calendar: ^0.1.8 adoptive_calendar: ^0.1.8
multi_dropdown: ^2.1.4 multi_dropdown: ^2.1.4
@ -95,6 +95,7 @@ dependencies:
overlay_support: ^2.1.0 overlay_support: ^2.1.0
flutter_svg_provider: ^1.0.7 flutter_svg_provider: ^1.0.7
zoom_widget: ^2.0.1 zoom_widget: ^2.0.1
http: ^1.2.2
dev_dependencies: dev_dependencies: