login & register -> HomeScreen
This commit is contained in:
parent
3a8ca71319
commit
ae91f8de7d
|
|
@ -4,6 +4,8 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:sapaly_shop/constants/utils.dart';
|
import 'package:sapaly_shop/constants/utils.dart';
|
||||||
|
|
||||||
|
import '../themes/app_theme.dart';
|
||||||
|
|
||||||
void httpErrorHandle({
|
void httpErrorHandle({
|
||||||
required http.Response response,
|
required http.Response response,
|
||||||
required BuildContext context,
|
required BuildContext context,
|
||||||
|
|
@ -14,12 +16,27 @@ void httpErrorHandle({
|
||||||
onSuccess();
|
onSuccess();
|
||||||
break;
|
break;
|
||||||
case 400:
|
case 400:
|
||||||
showSnackBar(context, 'this_user_exists');
|
showSnackBar(
|
||||||
|
context,
|
||||||
|
content: 'this_user_exists',
|
||||||
|
backgroundColor: AppTheme.redColor,
|
||||||
|
textColor: AppTheme.whiteColor,
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case 500:
|
case 500:
|
||||||
showSnackBar(context, 'error_occured');
|
showSnackBar(
|
||||||
|
context,
|
||||||
|
content: 'error_occured',
|
||||||
|
backgroundColor: AppTheme.redColor,
|
||||||
|
textColor: AppTheme.whiteColor,
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
showSnackBar(context, 'error_occured');
|
showSnackBar(
|
||||||
|
context,
|
||||||
|
content: 'error_occured',
|
||||||
|
backgroundColor: AppTheme.redColor,
|
||||||
|
textColor: AppTheme.whiteColor,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,107 @@
|
||||||
|
import 'package:adaptix/adaptix.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:sapaly_shop/constants/global_variables.dart';
|
||||||
|
import 'package:sapaly_shop/themes/app_theme.dart';
|
||||||
|
|
||||||
void showSnackBar(BuildContext context, String text) {
|
void showSnackBar(BuildContext ctx,
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
{SnackBar Function(String? content)? snackBar,
|
||||||
SnackBar(
|
String? content,
|
||||||
content: Text(text),
|
Color? textColor,
|
||||||
),
|
Icon? icon,
|
||||||
);
|
Color? backgroundColor,
|
||||||
|
Duration? duration}) {
|
||||||
|
ScaffoldMessenger.of(ctx).hideCurrentSnackBar();
|
||||||
|
ScaffoldMessenger.of(ctx).showSnackBar(snackBar == null
|
||||||
|
? SnackBar(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.adaptedPx(),
|
||||||
|
horizontal:
|
||||||
|
7.adaptedPx() + GlobalVariables.horizontalPadding(ctx)),
|
||||||
|
duration: duration ?? const Duration(seconds: 2),
|
||||||
|
backgroundColor: backgroundColor ?? AppTheme.lightPrimaryColor,
|
||||||
|
content: Row(
|
||||||
|
children: [
|
||||||
|
if (icon != null) icon,
|
||||||
|
SizedBox(width: 10.adaptedPx()),
|
||||||
|
Text(
|
||||||
|
'$content',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 15.adaptedPx(),
|
||||||
|
color: textColor ?? Theme.of(ctx).backgroundColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: snackBar(content));
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> yesOrNoDialog(BuildContext context,
|
||||||
|
{String? content, Widget? widgetContent}) async {
|
||||||
|
return (await showDialog<bool>(
|
||||||
|
context: context,
|
||||||
|
builder: (ctx) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: Text(MaterialLocalizations.of(context).alertDialogLabel),
|
||||||
|
titleTextStyle: Theme.of(context).textTheme.bodyLarge?.copyWith(
|
||||||
|
fontFamily: 'Gilroy',
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
fontSize: 17.adaptedPx()),
|
||||||
|
titlePadding: EdgeInsets.all(18.adaptedPx()),
|
||||||
|
actions: [
|
||||||
|
Theme(
|
||||||
|
data: Theme.of(context).copyWith(
|
||||||
|
colorScheme: Theme.of(context).colorScheme.copyWith(
|
||||||
|
primary: Theme.of(context).colorScheme.secondary)),
|
||||||
|
child: TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(ctx).pop(true);
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
MaterialLocalizations.of(context).continueButtonLabel,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12.adaptedPx(),
|
||||||
|
fontFamily: 'Gilroy',
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
Theme(
|
||||||
|
data: Theme.of(context).copyWith(
|
||||||
|
colorScheme: Theme.of(context).colorScheme.copyWith(
|
||||||
|
primary: Theme.of(context).colorScheme.secondary)),
|
||||||
|
child: TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(ctx).pop(false);
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
MaterialLocalizations.of(context).cancelButtonLabel,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12.adaptedPx(),
|
||||||
|
fontFamily: 'Gilroy',
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
contentTextStyle:
|
||||||
|
Theme.of(context).textTheme.bodyLarge?.copyWith(height: 1.5),
|
||||||
|
content: Row(
|
||||||
|
children: [
|
||||||
|
if (widgetContent != null)
|
||||||
|
Expanded(child: widgetContent)
|
||||||
|
else
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
content ?? "",
|
||||||
|
style: Theme.of(context)
|
||||||
|
.primaryTextTheme
|
||||||
|
.bodyText2!
|
||||||
|
.copyWith(
|
||||||
|
fontFamily: 'Gilroy',
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}) ??
|
||||||
|
false);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ import '../../../constants/global_variables.dart';
|
||||||
import '../../../themes/app_theme.dart';
|
import '../../../themes/app_theme.dart';
|
||||||
|
|
||||||
class HomeScreen extends StatefulWidget {
|
class HomeScreen extends StatefulWidget {
|
||||||
|
static const String routeName = '/home';
|
||||||
const HomeScreen({super.key});
|
const HomeScreen({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,73 @@
|
||||||
// ignore_for_file: use_build_context_synchronously
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
|
||||||
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sapaly_shop/constants/global_variables.dart';
|
import 'package:sapaly_shop/constants/global_variables.dart';
|
||||||
import 'package:sapaly_shop/constants/utils.dart';
|
import 'package:sapaly_shop/constants/utils.dart';
|
||||||
|
import 'package:sapaly_shop/features/screens/home/home_screen.dart';
|
||||||
import 'package:sapaly_shop/models/auth/login/login_request_model.dart';
|
import 'package:sapaly_shop/models/auth/login/login_request_model.dart';
|
||||||
import 'package:sapaly_shop/models/auth/login/login_response_model.dart';
|
import 'package:sapaly_shop/models/auth/login/login_response_model.dart';
|
||||||
import 'package:sapaly_shop/models/auth/register/register_request_model.dart';
|
import 'package:sapaly_shop/models/auth/register/register_request_model.dart';
|
||||||
import 'package:sapaly_shop/models/auth/register/register_response_model.dart';
|
import 'package:sapaly_shop/models/auth/register/register_response_model.dart';
|
||||||
|
import 'package:sapaly_shop/providers/user_provider.dart';
|
||||||
|
import 'package:sapaly_shop/themes/app_theme.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import '../../constants/error_handling.dart';
|
import '../../constants/error_handling.dart';
|
||||||
|
|
||||||
class AuthService {
|
class AuthService {
|
||||||
|
Future<void> login({
|
||||||
|
required LoginRequestModel loginRequestModel,
|
||||||
|
required BuildContext context,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
var response = await http.post(Uri.parse('$kBaseUrl/jwt/login'),
|
||||||
|
body: loginRequestModel.toMap(),
|
||||||
|
headers: {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.statusCode == HttpStatus.ok) {
|
||||||
|
var data = response.body;
|
||||||
|
var loginResponse = LoginResponseModel.fromJson(data);
|
||||||
|
debugPrint('LOGIN ${loginResponse.user.email}');
|
||||||
|
}
|
||||||
|
|
||||||
|
httpErrorHandle(
|
||||||
|
response: response,
|
||||||
|
context: context,
|
||||||
|
onSuccess: () async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
Provider.of<UserProvider>(context, listen: false)
|
||||||
|
.setUser(response.body);
|
||||||
|
await prefs.setString(
|
||||||
|
'token', jsonDecode(response.body)['data']['token']);
|
||||||
|
Navigator.of(context).pushNamedAndRemoveUntil(
|
||||||
|
HomeScreen.routeName,
|
||||||
|
(route) => false,
|
||||||
|
);
|
||||||
|
showSnackBar(
|
||||||
|
context,
|
||||||
|
content: 'login_success',
|
||||||
|
backgroundColor: AppTheme.lightPrimaryColor,
|
||||||
|
textColor: AppTheme.whiteColor,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
showSnackBar(
|
||||||
|
context,
|
||||||
|
content: e.toString(),
|
||||||
|
backgroundColor: AppTheme.redColor,
|
||||||
|
textColor: AppTheme.whiteColor,
|
||||||
|
);
|
||||||
|
debugPrint('Login ERROR ${e.toString()}');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Register
|
// Register
|
||||||
Future<void> register({
|
Future<void> register({
|
||||||
required RegisterRequestModel registerRequestModel,
|
required RegisterRequestModel registerRequestModel,
|
||||||
|
|
@ -28,53 +83,37 @@ class AuthService {
|
||||||
if (response.statusCode == HttpStatus.ok) {
|
if (response.statusCode == HttpStatus.ok) {
|
||||||
var data = response.body;
|
var data = response.body;
|
||||||
var registerResponse = registerResponseModelFromJson(data);
|
var registerResponse = registerResponseModelFromJson(data);
|
||||||
|
debugPrint('REGISTER ${registerResponse.user.email}');
|
||||||
}
|
}
|
||||||
httpErrorHandle(
|
httpErrorHandle(
|
||||||
response: response,
|
response: response,
|
||||||
context: context,
|
context: context,
|
||||||
onSuccess: () {
|
onSuccess: () async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
Provider.of<UserProvider>(context, listen: false)
|
||||||
|
.setUser(response.body);
|
||||||
|
await prefs.setString(
|
||||||
|
'token', jsonDecode(response.body)['data']['token']);
|
||||||
|
Navigator.of(context).pushNamedAndRemoveUntil(
|
||||||
|
HomeScreen.routeName,
|
||||||
|
(route) => false,
|
||||||
|
);
|
||||||
showSnackBar(
|
showSnackBar(
|
||||||
context,
|
context,
|
||||||
'successfully_created_now_login',
|
content: 'signup_success',
|
||||||
|
backgroundColor: AppTheme.lightPrimaryColor,
|
||||||
|
textColor: AppTheme.whiteColor,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showSnackBar(context, e.toString());
|
showSnackBar(
|
||||||
debugPrint('Register Repsponse $e');
|
context,
|
||||||
}
|
content: e.toString(),
|
||||||
}
|
backgroundColor: AppTheme.redColor,
|
||||||
|
textColor: AppTheme.whiteColor,
|
||||||
Future<void> login({
|
|
||||||
required LoginRequestModel loginRequestModel,
|
|
||||||
required BuildContext context,
|
|
||||||
}) async {
|
|
||||||
try {
|
|
||||||
var response = await http.post(Uri.parse('$kBaseUrl/jwt/login'),
|
|
||||||
body: loginRequestModel.toMap(),
|
|
||||||
headers: {
|
|
||||||
'Accept': 'application/json',
|
|
||||||
});
|
|
||||||
|
|
||||||
if (response.statusCode == HttpStatus.ok) {
|
|
||||||
var data = response.body;
|
|
||||||
var loginResponse = LoginResponseModel.fromJson(data);
|
|
||||||
debugPrint('EMAIL ${loginResponse.user.email}');
|
|
||||||
}
|
|
||||||
|
|
||||||
httpErrorHandle(
|
|
||||||
response: response,
|
|
||||||
context: context,
|
|
||||||
onSuccess: () {
|
|
||||||
showSnackBar(
|
|
||||||
context,
|
|
||||||
'successfully_created_now_login',
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
} catch (e) {
|
debugPrint('Register ERROr ${e.toString()}');
|
||||||
showSnackBar(context, e.toString());
|
|
||||||
debugPrint('Login Response ${e.toString()}');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,33 @@
|
||||||
import 'package:adaptix/adaptix.dart';
|
import 'package:adaptix/adaptix.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sapaly_shop/features/screens/category/category_screen.dart';
|
import 'package:sapaly_shop/features/screens/category/category_screen.dart';
|
||||||
import 'package:sapaly_shop/features/screens/dashboard/dashboard.dart';
|
import 'package:sapaly_shop/features/screens/dashboard/dashboard.dart';
|
||||||
import 'package:sapaly_shop/features/screens/drawer/sapaly_drawer.dart';
|
import 'package:sapaly_shop/features/screens/drawer/sapaly_drawer.dart';
|
||||||
import 'package:sapaly_shop/features/screens/home/home_screen.dart';
|
import 'package:sapaly_shop/features/screens/home/home_screen.dart';
|
||||||
import 'package:sapaly_shop/features/screens/auth/login/login_screen.dart';
|
import 'package:sapaly_shop/features/screens/auth/login/login_screen.dart';
|
||||||
|
import 'package:sapaly_shop/providers/user_provider.dart';
|
||||||
import 'package:sapaly_shop/router.dart';
|
import 'package:sapaly_shop/router.dart';
|
||||||
import 'package:sapaly_shop/themes/app_theme.dart';
|
import 'package:sapaly_shop/themes/app_theme.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
import 'constants/global_variables.dart';
|
import 'constants/global_variables.dart';
|
||||||
|
import 'models/settings_model.dart';
|
||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
runApp(const MyApp());
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
await SettingsModel.initLocalization(
|
||||||
|
prefs.getString('language') ?? kDefaultLanguage);
|
||||||
|
runApp(
|
||||||
|
MultiProvider(
|
||||||
|
providers: [
|
||||||
|
ChangeNotifierProvider(create: (_) => SettingsModel(prefs)),
|
||||||
|
ChangeNotifierProvider(create: (_) => UserProvider()),
|
||||||
|
],
|
||||||
|
child: const MyApp(),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyApp extends StatelessWidget {
|
class MyApp extends StatelessWidget {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:sapaly_shop/models/auth/login/login_response_model.dart';
|
||||||
|
|
||||||
|
class UserProvider extends ChangeNotifier {
|
||||||
|
LoginResponseModel _user = LoginResponseModel(
|
||||||
|
token: '',
|
||||||
|
expires: '',
|
||||||
|
user: User(
|
||||||
|
id: 0,
|
||||||
|
email: '',
|
||||||
|
name: '',
|
||||||
|
lastName: '',
|
||||||
|
middleName: '',
|
||||||
|
phone: '',
|
||||||
|
phoneShort: '',
|
||||||
|
isActivated: true,
|
||||||
|
lastLogin: '',
|
||||||
|
isSuperuser: 0,
|
||||||
|
createdAt: '',
|
||||||
|
updatedAt: '',
|
||||||
|
phoneList: [],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
LoginResponseModel get user => _user;
|
||||||
|
|
||||||
|
void setUser(String user) {
|
||||||
|
_user = LoginResponseModel.fromJson(user);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:sapaly_shop/features/screens/home/home_screen.dart';
|
||||||
|
|
||||||
import 'features/screens/auth/login/login_screen.dart';
|
import 'features/screens/auth/login/login_screen.dart';
|
||||||
import 'features/widgets/empty_widget.dart';
|
import 'features/widgets/empty_widget.dart';
|
||||||
|
|
@ -6,7 +7,14 @@ import 'features/widgets/empty_widget.dart';
|
||||||
Route<dynamic> generateRoute(RouteSettings routeSettings) {
|
Route<dynamic> generateRoute(RouteSettings routeSettings) {
|
||||||
switch (routeSettings.name) {
|
switch (routeSettings.name) {
|
||||||
case LoginScreen.routeName:
|
case LoginScreen.routeName:
|
||||||
return MaterialPageRoute(builder: (_) => LoginScreen());
|
return MaterialPageRoute(
|
||||||
|
builder: (_) => LoginScreen(),
|
||||||
|
);
|
||||||
|
|
||||||
|
case HomeScreen.routeName:
|
||||||
|
return MaterialPageRoute(
|
||||||
|
builder: (_) => const HomeScreen(),
|
||||||
|
);
|
||||||
default:
|
default:
|
||||||
return MaterialPageRoute(
|
return MaterialPageRoute(
|
||||||
settings: routeSettings,
|
settings: routeSettings,
|
||||||
|
|
|
||||||
58
pubspec.lock
58
pubspec.lock
|
|
@ -170,22 +170,6 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.5"
|
version: "1.0.5"
|
||||||
device_info_plus:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: device_info_plus
|
|
||||||
sha256: "1d6e5a61674ba3a68fb048a7c7b4ff4bebfed8d7379dbe8f2b718231be9a7c95"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "8.1.0"
|
|
||||||
device_info_plus_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: device_info_plus_platform_interface
|
|
||||||
sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "7.0.0"
|
|
||||||
fake_async:
|
fake_async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -390,30 +374,6 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.2"
|
||||||
os_detect:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: os_detect
|
|
||||||
sha256: faf3bcf39515e64da8ff76b2f2805b20a6ff47ae515393e535f8579ff91d6b7f
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.1"
|
|
||||||
package_info_plus:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: package_info_plus
|
|
||||||
sha256: "8df5ab0a481d7dc20c0e63809e90a588e496d276ba53358afc4c4443d0a00697"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.3"
|
|
||||||
package_info_plus_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: package_info_plus_platform_interface
|
|
||||||
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.1"
|
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -527,7 +487,7 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.4"
|
version: "4.2.4"
|
||||||
provider:
|
provider:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: provider
|
name: provider
|
||||||
sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f
|
sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f
|
||||||
|
|
@ -699,14 +659,6 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.0"
|
version: "2.2.0"
|
||||||
upgrader:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: upgrader
|
|
||||||
sha256: "600eec301fd27b985a7cf223c0d8f70f1bca6290b959fa970e399bb4da6e8c8e"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "6.0.1"
|
|
||||||
url_launcher:
|
url_launcher:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -811,14 +763,6 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.4"
|
||||||
version:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: version
|
|
||||||
sha256: "3d4140128e6ea10d83da32fef2fa4003fccbf6852217bb854845802f04191f94"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.2"
|
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -44,13 +44,13 @@ dependencies:
|
||||||
cached_network_image: ^3.2.3
|
cached_network_image: ^3.2.3
|
||||||
flutter_native_splash: ^2.2.0+1
|
flutter_native_splash: ^2.2.0+1
|
||||||
flutter_launcher_icons: ^0.10.0
|
flutter_launcher_icons: ^0.10.0
|
||||||
upgrader: ^6.0.1
|
|
||||||
badges: ^3.0.2
|
badges: ^3.0.2
|
||||||
buttons_flutter: ^0.0.2+1
|
buttons_flutter: ^0.0.2+1
|
||||||
buttons_tabbar: ^1.3.6
|
buttons_tabbar: ^1.3.6
|
||||||
shimmer: ^2.0.0
|
shimmer: ^2.0.0
|
||||||
url_launcher: ^6.1.9
|
url_launcher: ^6.1.9
|
||||||
shared_preferences: ^2.0.17
|
shared_preferences: ^2.0.17
|
||||||
|
provider: ^6.0.5
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue