firebase setup

This commit is contained in:
komekh 2023-10-25 15:19:17 +05:00
parent 0eb8d27bde
commit 7d3e2c5603
26 changed files with 427 additions and 473 deletions

View File

@ -1,36 +1,26 @@
{
"project_info": {
"project_number": "186538881179",
"project_id": "elektronika-app",
"storage_bucket": "elektronika-app.appspot.com"
"project_number": "283547367653",
"project_id": "elektronikatm",
"storage_bucket": "elektronikatm.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:186538881179:android:96a2f9ce98f8bbf00f563e",
"mobilesdk_app_id": "1:283547367653:android:c08fb01d915c3874487c0c",
"android_client_info": {
"package_name": "com.elektronika.tm"
}
},
"oauth_client": [
{
"client_id": "186538881179-j5f608hapm9p4cmdo01fe6r8atca6ep8.apps.googleusercontent.com",
"client_type": 3
}
],
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyD9JBvYuGMFymroLwL9rYxkqB6u7EIaee0"
"current_key": "AIzaSyAOMSH8EgasYe-vJkF7NNMFs42N27P2Ax4"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "186538881179-j5f608hapm9p4cmdo01fe6r8atca6ep8.apps.googleusercontent.com",
"client_type": 3
}
]
"other_platform_oauth_client": []
}
}
}

View File

@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.6.10'
ext.kotlin_version = '1.8.0'
repositories {
google()
mavenCentral()
@ -27,6 +27,6 @@ subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
tasks.register("clean", Delete) {
delete rootProject.buildDir
}

View File

@ -1,7 +1,7 @@
{
"file_generated_by": "FlutterFire CLI",
"purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
"GOOGLE_APP_ID": "1:186538881179:ios:fb651acd4ce97d5d0f563e",
"FIREBASE_PROJECT_ID": "elektronika-app",
"GCM_SENDER_ID": "186538881179"
"GOOGLE_APP_ID": "1:283547367653:ios:a0be3b851b594489487c0c",
"FIREBASE_PROJECT_ID": "elektronikatm",
"GCM_SENDER_ID": "283547367653"
}

View File

@ -126,6 +126,7 @@ const Map<String, String> ruRu = {
'payment_unsuccess': 'Платеж не прошел, повторите попытку позже!',
'approve_lang': 'Продолжить',
'select_language': 'Выберите язык',
'profile':'Профиль',
'profile': 'Профиль',
'discounted_price': 'Товары со скидкой',
'weekly_offers': 'Товар недели',
};

View File

@ -128,4 +128,5 @@ const Map<String, String> tmTM = {
'select_language': 'Dili saýlaň',
'profile': 'Profil',
'discounted_price': 'Arzanladyşdaky harytlar',
'weekly_offers': 'Hepdäniň pursatlary',
};

View File

@ -29,7 +29,7 @@ Map<String, dynamic> _readAndroidBuildData(AndroidDeviceInfo build) {
'tags': build.tags,
'type': build.type,
'isPhysicalDevice': build.isPhysicalDevice,
'androidId': build.androidId,
'androidId': build.id,
'systemFeatures': build.systemFeatures,
};
}

View File

@ -12,7 +12,7 @@ Future<String> downloadFile(String url, String filename) async {
options: Options(
responseType: ResponseType.bytes,
followRedirects: false,
receiveTimeout: 5000000,
receiveTimeout: Duration(seconds: 5),
));
final file = File(filePath);

View File

@ -16,8 +16,8 @@ class HttpUtil {
HttpUtil._internal() {
BaseOptions options = new BaseOptions(
baseUrl: Constants.BASE_URL,
connectTimeout: 100000,
receiveTimeout: 50000,
connectTimeout: Duration(seconds: 4),
receiveTimeout: Duration(seconds: 5),
headers: {},
contentType: 'application/json; charset=utf-8',
);
@ -35,9 +35,9 @@ class HttpUtil {
return handler.next(response);
},
onError: (DioError e, handler) {
ErrorEntity eInfo = createErrorEntity(e);
// ErrorEntity eInfo = createErrorEntity(e);
switch (eInfo.code) {
switch (e.response!.statusCode) {
case 401: // No permission to log in again
setLoginStatus(false);
break;
@ -48,60 +48,60 @@ class HttpUtil {
));
}
ErrorEntity createErrorEntity(DioError error) {
switch (error.type) {
case DioErrorType.cancel:
return ErrorEntity(code: -1, message: 'Request cancellation');
case DioErrorType.connectTimeout:
return ErrorEntity(code: -1, message: 'Connection timed out');
case DioErrorType.sendTimeout:
return ErrorEntity(code: -1, message: 'Request timed out');
case DioErrorType.receiveTimeout:
return ErrorEntity(code: -1, message: 'Response timeout');
case DioErrorType.response:
{
try {
int? errCode = error.response?.statusCode;
switch (errCode) {
case 400:
return ErrorEntity(code: errCode, message: 'Request syntax error');
case 401:
return ErrorEntity(code: errCode, message: 'Username or password incorrect');
case 403:
return ErrorEntity(code: errCode, message: 'Server refused to execute');
case 404:
return ErrorEntity(code: errCode, message: 'Can not reach server');
case 405:
return ErrorEntity(code: errCode, message: 'Request method is forbidden');
case 405:
return ErrorEntity(code: errCode, message: 'User already registered');
case 500:
return ErrorEntity(code: errCode, message: 'Server internal error');
case 502:
return ErrorEntity(code: errCode, message: 'Invalid request');
case 503:
return ErrorEntity(code: errCode, message: 'Server hung up');
case 505:
return ErrorEntity(code: errCode, message: 'Does not support HTTP protocol request');
default:
{
// return ErrorEntity(code: errCode, message: 'Unknown error');
return ErrorEntity(
code: errCode,
message: error.response?.statusMessage,
);
}
}
} on Exception catch (_) {
return ErrorEntity(code: -1, message: 'Unknown error');
}
}
default:
{
return ErrorEntity(code: -1, message: error.message);
}
}
}
// ErrorEntity createErrorEntity(DioError error) {
// switch (error.type) {
// case DioErrorType.cancel:
// return ErrorEntity(code: -1, message: 'Request cancellation');
// case DioErrorType.connectTimeout:
// return ErrorEntity(code: -1, message: 'Connection timed out');
// case DioErrorType.sendTimeout:
// return ErrorEntity(code: -1, message: 'Request timed out');
// case DioErrorType.receiveTimeout:
// return ErrorEntity(code: -1, message: 'Response timeout');
// case DioErrorType.response:
// {
// try {
// int? errCode = error.response?.statusCode;
// switch (errCode) {
// case 400:
// return ErrorEntity(code: errCode, message: 'Request syntax error');
// case 401:
// return ErrorEntity(code: errCode, message: 'Username or password incorrect');
// case 403:
// return ErrorEntity(code: errCode, message: 'Server refused to execute');
// case 404:
// return ErrorEntity(code: errCode, message: 'Can not reach server');
// case 405:
// return ErrorEntity(code: errCode, message: 'Request method is forbidden');
// case 405:
// return ErrorEntity(code: errCode, message: 'User already registered');
// case 500:
// return ErrorEntity(code: errCode, message: 'Server internal error');
// case 502:
// return ErrorEntity(code: errCode, message: 'Invalid request');
// case 503:
// return ErrorEntity(code: errCode, message: 'Server hung up');
// case 505:
// return ErrorEntity(code: errCode, message: 'Does not support HTTP protocol request');
// default:
// {
// // return ErrorEntity(code: errCode, message: 'Unknown error');
// return ErrorEntity(
// code: errCode,
// message: error.response?.statusMessage,
// );
// }
// }
// } on Exception catch (_) {
// return ErrorEntity(code: -1, message: 'Unknown error');
// }
// }
// default:
// {
// return ErrorEntity(code: -1, message: error.message);
// }
// }
// }
void cancelRequests(CancelToken token) {
token.cancel('cancelled');
@ -150,7 +150,8 @@ class HttpUtil {
Map<String, dynamic>? authorization = await getAuthorizationHeader();
requestOptions.headers!.addAll(authorization);
var response = await dio.get(path, queryParameters: queryParameters, options: requestOptions, cancelToken: cancelToken);
var response =
await dio.get(path, queryParameters: queryParameters, options: requestOptions, cancelToken: cancelToken);
return response.data;
}
@ -243,7 +244,7 @@ class HttpUtil {
}
/// restful post form
Future postForm(
Future postForm(
String path, {
required Map<String, dynamic> data,
Map<String, dynamic>? queryParameters,

View File

@ -4,6 +4,7 @@ import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:get/get.dart';
import '../../../firebase_options.dart';
import '../../app.dart';
@ -202,21 +203,40 @@ class FCMFunctions {
}
Future<void> _performClickAction(RemoteMessage message) async {
// if (message.data['type'] == 'product') {
// final int productId = int.parse(message.data['id']);
// final ProductModel? model = await ProductApi.getProductById(productId);
// if (model != null) Get.to(() => ProductDetailsPage(model: model));
// } else if (message.data['type'] == 'filter') {
// message.data.remove('type');
// navigateToProductListScreen(message.data, false);
// } else {
if (message.data['type'] == 'product') {
final int productId = int.parse(message.data['id']);
final ProductModel? model = await ProductApi.getProductById(productId);
if (model != null) Get.to(() => ProductDetailsPage(model: model));
} else if (message.data['type'] == 'category_id') {
final args = {
'type': 'category_id',
'id': message.data['id'],
'name':message.data['name']
};
navigateToProductListScreen(args);
} else {
// open dialog
// if (message.notification == null) return;
// Get.to(
// () => NotificationPage(title: message.notification!.title ?? '', data: message.notification!.body ?? ''),
// );
// }
}
/**
* @params send via firebase
*
* @params for product
* {
* "type": "product",
* "id":1922
* }
* @params for category
* {
* "type": "category_id",
* "id":2
* "name": "Category Name",
* }
**/
}
String? _getImageUrl(RemoteNotification notification) {

View File

@ -39,6 +39,22 @@ class ProductApi {
}
}
static Future<ProductModel?> getProductById(int id) async {
final String fnName = 'getProductById';
try {
debugPrint('class: $className, method: $fnName, params: $id');
String path = Constants.BASE_URL + 'products/$id';
final response = await HttpUtil().get(path: path);
return ProductModel.fromJson(response['data']);
} catch (e) {
return null;
}
}
static Future<Map<String, dynamic>?> getProductVariants(int productId) async {
final String fnName = 'getProductVariants';
@ -62,7 +78,8 @@ class ProductApi {
}
}
static Future<List<ProductAdditionalInfoModel>?> getProductAdditionalInfo(int productId, Map<String, dynamic> params) async {
static Future<List<ProductAdditionalInfoModel>?> getProductAdditionalInfo(
int productId, Map<String, dynamic> params) async {
final String fnName = 'getProductAdditionalInfo';
final List<ProductAdditionalInfoModel> list = [];

View File

@ -56,9 +56,18 @@ class CustomAppbarWidget extends StatelessWidget implements PreferredSizeWidget
controller.state.cartModel.value != null /* && controller.state.cartModel.value?.itemsQty != 0 */
? badge.Badge(
position: badge.BadgePosition.topEnd(top: -14),
animationType: badge.BadgeAnimationType.scale,
// animationType: badge.BadgeAnimationType.scale,
// animationDuration: Duration(milliseconds: 300),
// badgeColor: ThemeColor.mainColor.withOpacity(0.70),
badgeAnimation: badge.BadgeAnimation.rotation(
animationDuration: Duration(milliseconds: 300),
colorChangeAnimationDuration: Duration(seconds: 1),
curve: Curves.fastOutSlowIn,
colorChangeAnimationCurve: Curves.easeInCubic,
),
badgeStyle: badge.BadgeStyle(
badgeColor: ThemeColor.mainColor.withOpacity(0.70),
),
badgeContent: Text(
controller.state.cartModel.value?.itemsQty.toString() ?? '',
style: new TextStyle(

View File

@ -15,6 +15,7 @@ Widget cachedImageNetwork(
child: url.contains('https://')
? CachedNetworkImage(
imageUrl: url,
fit: boxFit,
imageBuilder: (context, imageProvider) => Container(
width: width,
height: height,

View File

@ -17,6 +17,7 @@ class HorizontalScrollableProducts extends StatefulWidget {
class _HorizontalScrollableProductsState extends State<HorizontalScrollableProducts> {
late PagewiseLoadController<ProductModel> pagewiseLoadController;
bool hasData = true;
Future<void> initPageWiseController() async {
pagewiseLoadController = PagewiseLoadController(
@ -35,7 +36,13 @@ class _HorizontalScrollableProductsState extends State<HorizontalScrollableProdu
this.widget.param.keys.first: this.widget.param.values.first,
};
return await ProductApi.getHomePageProducts(apiParams, this.widget.param['url']);
final data = await ProductApi.getHomePageProducts(apiParams, this.widget.param['url']);
setState(() {
hasData = data.isNotEmpty;
});
return data;
}
@override
@ -46,7 +53,8 @@ class _HorizontalScrollableProductsState extends State<HorizontalScrollableProdu
@override
Widget build(BuildContext context) {
return Column(
return hasData
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
@ -67,6 +75,7 @@ class _HorizontalScrollableProductsState extends State<HorizontalScrollableProdu
itemBuilder: (_, model, i) => ItemBuilder(model: model),
pageLoadController: pagewiseLoadController,
// pageFuture: (pageIndex) => pc.fetchProducts(pageIndex!),
loadingBuilder: (context) {
return Container(
// To remove left padding 16
@ -106,7 +115,8 @@ class _HorizontalScrollableProductsState extends State<HorizontalScrollableProdu
),
),
],
);
)
: SizedBox.shrink();
}
}

View File

@ -15,6 +15,7 @@ class CartOrderPage extends StatelessWidget {
color: Colors.white,
child: LoaderOverlay(
useDefaultLoading: false,
overlayColor: Colors.transparent,
overlayWidget: CustomLoader(),
child: Scaffold(
backgroundColor: Colors.white, //ThemeColor.scaffoldBckColor,

View File

@ -26,6 +26,7 @@ class CartPage extends StatelessWidget {
: model != null
? LoaderOverlay(
useDefaultLoading: false,
overlayColor: Colors.transparent,
overlayWidget: CustomLoader(),
child: Container(
color: Colors.white,

View File

@ -12,6 +12,7 @@ class CouponCodeTextFormField extends StatelessWidget {
init: CartController(),
builder: (cc) => LoaderOverlay(
useDefaultLoading: false,
overlayColor: Colors.transparent,
overlayWidget: CustomLoader(),
child: Container(
padding: const EdgeInsets.only(left: 18),

View File

@ -1,5 +1,3 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:webview_flutter/webview_flutter.dart';
@ -16,38 +14,30 @@ class PaymentWebView extends StatefulWidget {
class _PaymentWebViewState extends State<PaymentWebView> {
bool _isLoading = true;
final _key = UniqueKey();
// final _key = UniqueKey();
late WebViewController _controller;
@override
void initState() {
super.initState();
if (Platform.isAndroid) {
WebView.platform = SurfaceAndroidWebView();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppbarWidget(leading: AppBarBackBtn()),
body: Stack(
children: [
WebView(
key: _key,
javascriptMode: JavascriptMode.unrestricted,
initialUrl: widget.url,
void _initWebViewController() {
_controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
// ..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
onProgress: (int progress) {
debugPrint('WebView is loading (progress : $progress%)');
// Update loading bar.
},
onPageStarted: (String url) {
setState(() {
_isLoading = true;
});
},
onPageFinished: (finish) {
setState(() {
_isLoading = false;
});
},
navigationDelegate: (NavigationRequest request) {
setState(() {
_isLoading = true;
});
onWebResourceError: (WebResourceError error) {},
onNavigationRequest: (NavigationRequest request) {
if (request.url.startsWith(Constants.BASE_URL_WEB + 'checkout/success')) {
debugPrint('if');
CartController cc = Get.put(CartController());
@ -63,6 +53,26 @@ class _PaymentWebViewState extends State<PaymentWebView> {
return NavigationDecision.navigate;
},
),
)
..loadRequest(Uri.parse(widget.url));
}
@override
void initState() {
super.initState();
_initWebViewController();
// if (Platform.isAndroid) {
// WebView.platform = SurfaceAndroidWebView();
// }
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppbarWidget(leading: AppBarBackBtn()),
body: Stack(
children: [
WebViewWidget(controller: _controller),
_isLoading
? Center(
child: CustomLoader(),

View File

@ -110,6 +110,19 @@ class HomePage extends StatelessWidget {
),
AppTheme.appSizeDivider30H,
Padding(
padding: EdgeInsets.only(left: 16.w, right: 16.w),
child: HorizontalScrollableProducts(
param: {
'weekly': 1,
'title': 'weekly_offers'.tr,
'url': 'weeklyOffers',
},
),
),
AppTheme.appSizeDivider30H,
],
),
),

View File

@ -25,6 +25,7 @@ class ProductDetailsPage extends StatelessWidget {
top: false,
child: LoaderOverlay(
useDefaultLoading: false,
overlayColor: Colors.transparent,
overlayWidget: CustomLoader(),
child: Scaffold(
appBar: CustomAppbarWidget(leading: AppBarBackBtn()),

View File

@ -23,14 +23,14 @@ class ProductAboutWidget extends StatelessWidget {
child: Html(
shrinkWrap: true,
data: data,
customRender: {
'table': (context, child) {
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: (context.tree as TableLayoutElement).toWidget(context),
);
},
},
// customRender: {
// 'table': (context, child) {
// return SingleChildScrollView(
// scrollDirection: Axis.horizontal,
// child: (context.tree as TableLayoutElement).toWidget(context),
// );
// },
// },
style: {
// tables will have the below background color
'table': Style(
@ -40,13 +40,16 @@ class ProductAboutWidget extends StatelessWidget {
'tr': Style(
border: Border(bottom: BorderSide(color: ThemeColor.colorE5E5E5)),
),
'th': Style(
padding: EdgeInsets.symmetric(vertical: 6),
'th': Style(padding: HtmlPaddings.symmetric(vertical: 6)
// EdgeInsets.symmetric(vertical: 6),
),
'td': Style(
padding: EdgeInsets.symmetric(vertical: 16, horizontal: 8),
padding: HtmlPaddings.symmetric(
vertical: 16,
horizontal: 8,
), //EdgeInsets.symmetric(vertical: 16, horizontal: 8),
// alignment: Alignment.topLeft,
width: 0.45.sw,
width: Width(0.45.sw), // 0.45.sw,
),
},
),

View File

@ -14,6 +14,7 @@ class BSChooseSortMethod extends StatelessWidget {
body: SingleChildScrollView(
child: LoaderOverlay(
useDefaultLoading: false,
overlayColor: Colors.transparent,
overlayWidget: CustomLoader(),
child: Column(
children: cc.state.sortModels

View File

@ -28,6 +28,7 @@ class PersonalInformationPage extends StatelessWidget {
SizedBox(height: 50.h),
LoaderOverlay(
useDefaultLoading: false,
overlayColor: Colors.transparent,
overlayWidget: CustomLoader(),
child: AddressList(
title: 'our_address'.tr,

View File

@ -18,6 +18,7 @@ class WishlistsListWidget extends StatelessWidget {
final bool isLastPage = wc.wlState.lastPage.value;
return LoaderOverlay(
useDefaultLoading: false,
overlayColor: Colors.transparent,
overlayWidget: CustomLoader(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,

View File

@ -50,20 +50,19 @@ class DefaultFirebaseOptions {
}
static const FirebaseOptions android = FirebaseOptions(
apiKey: 'AIzaSyD9JBvYuGMFymroLwL9rYxkqB6u7EIaee0',
appId: '1:186538881179:android:96a2f9ce98f8bbf00f563e',
messagingSenderId: '186538881179',
projectId: 'elektronika-app',
storageBucket: 'elektronika-app.appspot.com',
apiKey: 'AIzaSyAOMSH8EgasYe-vJkF7NNMFs42N27P2Ax4',
appId: '1:283547367653:android:c08fb01d915c3874487c0c',
messagingSenderId: '283547367653',
projectId: 'elektronikatm',
storageBucket: 'elektronikatm.appspot.com',
);
static const FirebaseOptions ios = FirebaseOptions(
apiKey: 'AIzaSyCS07pxfuN62pBYCauLVRAWttTx0GSNDH0',
appId: '1:186538881179:ios:fb651acd4ce97d5d0f563e',
messagingSenderId: '186538881179',
projectId: 'elektronika-app',
storageBucket: 'elektronika-app.appspot.com',
iosClientId: '186538881179-d39r6qso5iv98m8m60vev91gtsh8fs9o.apps.googleusercontent.com',
apiKey: 'AIzaSyBeQk2PlPBPMGQ3JvhAmRjHb-Bpiu8j3H4',
appId: '1:283547367653:ios:a0be3b851b594489487c0c',
messagingSenderId: '283547367653',
projectId: 'elektronikatm',
storageBucket: 'elektronikatm.appspot.com',
iosBundleId: 'com.elektronika.tm',
);
}

View File

@ -13,10 +13,10 @@ packages:
dependency: "direct main"
description:
name: animate_do
sha256: "4554744e604b841e2bde710398ef3f4f8a1935a182b48727afe2a1023527b883"
sha256: "91b3e0306ba2096c7a7e1ee1ba96f491e25e92034c215f4bf8de6a7251c4bef1"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "3.1.2"
archive:
dependency: transitive
description:
@ -53,10 +53,10 @@ packages:
dependency: "direct main"
description:
name: badges
sha256: "727580d938b7a1ff47ea42df730d581415606b4224cfa708671c10287f8d3fe6"
sha256: a7b6bbd60dce418df0db3058b53f9d083c22cdb5132a052145dc267494df0b84
url: "https://pub.dev"
source: hosted
version: "2.0.3"
version: "3.1.2"
boolean_selector:
dependency: transitive
description:
@ -105,22 +105,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.0"
chewie:
checked_yaml:
dependency: transitive
description:
name: chewie
sha256: "745e81e84c6d7f3835f89f85bb49771c0a66099e4caf8f8e9e9a372bc66fb2c1"
name: checked_yaml
sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
url: "https://pub.dev"
source: hosted
version: "1.5.0"
chewie_audio:
version: "2.0.3"
cli_util:
dependency: transitive
description:
name: chewie_audio
sha256: "73948a8b9841d050433af3498a1f8b11320bd5a2cd70b449bdbe16d4405e97c5"
name: cli_util
sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7
url: "https://pub.dev"
source: hosted
version: "1.5.0"
version: "0.4.0"
clock:
dependency: transitive
description:
@ -173,66 +173,34 @@ packages:
dependency: transitive
description:
name: dbus
sha256: "4f814fc7e73057f78f307a6c4714fe2ffb4bdb994ab1970540a068ec4d5a45be"
sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263"
url: "https://pub.dev"
source: hosted
version: "0.7.3"
version: "0.7.8"
device_info_plus:
dependency: "direct main"
description:
name: device_info_plus
sha256: c2386729379f04cd39ee0d5d4c48d8c8a0e70f7622dac626cbf5e396392602fd
sha256: "7035152271ff67b072a211152846e9f1259cf1be41e34cd3e0b5463d2d6b8419"
url: "https://pub.dev"
source: hosted
version: "3.2.4"
device_info_plus_linux:
dependency: transitive
description:
name: device_info_plus_linux
sha256: e4eb5db4704f5534e872148a21cfcd39581022b63df556da6720d88f7c9f91a9
url: "https://pub.dev"
source: hosted
version: "2.1.1"
device_info_plus_macos:
dependency: transitive
description:
name: device_info_plus_macos
sha256: "38871fd2ad31871399d8307630c9f4eb5941dd2c643ee221c44d58de95d367a1"
url: "https://pub.dev"
source: hosted
version: "2.2.3"
version: "9.1.0"
device_info_plus_platform_interface:
dependency: transitive
description:
name: device_info_plus_platform_interface
sha256: b2743934f0efc3e291880d76fb341ea114b7e8417d77ee0f93bd21f5dfd3e8d2
sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
url: "https://pub.dev"
source: hosted
version: "2.6.1"
device_info_plus_web:
dependency: transitive
description:
name: device_info_plus_web
sha256: "38715ad1ef3bee8915dd7bee08a9ac9ab54472a8df425c887062a3046209f663"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
device_info_plus_windows:
dependency: transitive
description:
name: device_info_plus_windows
sha256: "8fb1403fc94636d6ab48aeebb5f9379f2ca51cde3b337167ec6f39db09234492"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "7.0.0"
dio:
dependency: "direct main"
description:
name: dio
sha256: "7d328c4d898a61efc3cd93655a0955858e29a0aa647f0f9e02d59b3bb275e2e8"
sha256: "417e2a6f9d83ab396ec38ff4ea5da6c254da71e4db765ad737a42af6930140b7"
url: "https://pub.dev"
source: hosted
version: "4.0.6"
version: "5.3.3"
fake_async:
dependency: transitive
description:
@ -245,10 +213,10 @@ packages:
dependency: transitive
description:
name: ffi
sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18"
sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "2.1.0"
file:
dependency: transitive
description:
@ -322,66 +290,50 @@ packages:
dependency: "direct main"
description:
name: flutter_html
sha256: ccb810fcabfce3a7ffaca46e458323915ac7e7fc59082c7357ff848972c02230
sha256: "02ad69e813ecfc0728a455e4bf892b9379983e050722b1dce00192ee2e41d1ee"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
version: "3.0.0-beta.2"
flutter_launcher_icons:
dependency: "direct dev"
description:
name: flutter_launcher_icons
sha256: "559c600f056e7c704bd843723c21e01b5fba47e8824bd02422165bcc02a5de1d"
sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
url: "https://pub.dev"
source: hosted
version: "0.9.3"
flutter_layout_grid:
dependency: transitive
description:
name: flutter_layout_grid
sha256: "86c1b21520612edfbb93f189b3ec05058470570f3a5c08ce10c92cc76a6e814e"
url: "https://pub.dev"
source: hosted
version: "1.0.6"
version: "0.13.1"
flutter_local_notifications:
dependency: "direct main"
description:
name: flutter_local_notifications
sha256: f222919a34545931e47b06000836b5101baeffb0e6eb5a4691d2d42851740dd9
sha256: "6d11ea777496061e583623aaf31923f93a9409ef8fcaeeefdd6cd78bf4fe5bb3"
url: "https://pub.dev"
source: hosted
version: "12.0.4"
version: "16.1.0"
flutter_local_notifications_linux:
dependency: transitive
description:
name: flutter_local_notifications_linux
sha256: "6af440e3962eeab8459602c309d7d4ab9e62f05d5cfe58195a28f846a0b5d523"
sha256: "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "4.0.0+1"
flutter_local_notifications_platform_interface:
dependency: transitive
description:
name: flutter_local_notifications_platform_interface
sha256: "5ec1feac5f7f7d9266759488bc5f76416152baba9aa1b26fe572246caa00d1ab"
sha256: "7cf643d6d5022f3baed0be777b0662cce5919c0a7b86e700299f22dc4ae660ef"
url: "https://pub.dev"
source: hosted
version: "6.0.0"
flutter_math_fork:
dependency: transitive
description:
name: flutter_math_fork
sha256: cfec964c4975c6becc64291eb9b782fe70df5e0c5bfe0763d9e856432fcc6fcd
url: "https://pub.dev"
source: hosted
version: "0.4.2+2"
version: "7.0.0+1"
flutter_native_splash:
dependency: "direct main"
description:
name: flutter_native_splash
sha256: bd36d1a7f05ff8378cad17d20c33ca904630bfd3fcf8b15c9e8237efbccfad0a
sha256: "5bf4c3e5e5a0426c1e2fc8ca3555a9e617e76369c3442e1dae8385c7767ba97a"
url: "https://pub.dev"
source: hosted
version: "2.2.0+1"
version: "2.3.4"
flutter_rating_bar:
dependency: "direct main"
description:
@ -402,18 +354,18 @@ packages:
dependency: "direct main"
description:
name: flutter_staggered_grid_view
sha256: "1312314293acceb65b92754298754801b0e1f26a1845833b740b30415bbbcf07"
sha256: "19e7abb550c96fbfeb546b23f3ff356ee7c59a019a651f8f102a4ba9b7349395"
url: "https://pub.dev"
source: hosted
version: "0.6.2"
version: "0.7.0"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
sha256: "9ac1967e2f72a08af11b05b39167920f90d043cf67163d13a544a358c8f31afa"
sha256: "8c5d68a82add3ca76d792f058b186a0599414f279f00ece4830b9b231b570338"
url: "https://pub.dev"
source: hosted
version: "0.22.0"
version: "2.0.7"
flutter_test:
dependency: "direct dev"
description: flutter
@ -460,18 +412,18 @@ packages:
dependency: transitive
description:
name: image
sha256: "02bafd3b4f399bfeb10034deba9753d93b55ce41cd0c4d3d8b355626f80e5b32"
sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271"
url: "https://pub.dev"
source: hosted
version: "3.1.3"
version: "4.1.3"
intl:
dependency: "direct main"
description:
name: intl
sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91"
sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
url: "https://pub.dev"
source: hosted
version: "0.17.0"
version: "0.18.1"
js:
dependency: transitive
description:
@ -480,14 +432,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.6.7"
json_annotation:
dependency: transitive
description:
name: json_annotation
sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467
url: "https://pub.dev"
source: hosted
version: "4.8.1"
lint:
dependency: "direct dev"
description:
name: lint
sha256: "4a539aa34ec5721a2c7574ae2ca0336738ea4adc2a34887d54b7596310b33c85"
sha256: f4bd4dbaa39f4ae8836f2d1275f2f32bc68b3a8cce0a0735dd1f7a601f06682a
url: "https://pub.dev"
source: hosted
version: "1.10.0"
version: "2.1.2"
list_counter:
dependency: transitive
description:
name: list_counter
sha256: c447ae3dfcd1c55f0152867090e67e219d42fe6d4f2807db4bbe8b8d69912237
url: "https://pub.dev"
source: hosted
version: "1.0.2"
loader_overlay:
dependency: "direct main"
description:
@ -545,22 +513,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.1.3"
nested:
dependency: transitive
description:
name: nested
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
numerus:
dependency: transitive
description:
name: numerus
sha256: "0087ef729d63b96cb347a9c44b9c592f21cecb3605b415bbd18710aef80ce5cb"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
octo_image:
dependency: transitive
description:
@ -577,22 +529,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.8.3"
path_drawing:
dependency: transitive
description:
name: path_drawing
sha256: "3bdd251dae9ffaef944450b73f168610db7e968e7b20daf0c3907f8b4aafc8a2"
url: "https://pub.dev"
source: hosted
version: "0.5.1+1"
path_parsing:
dependency: transitive
description:
name: path_parsing
sha256: ee5c47c1058ad66b4a41746ec3996af9593d0858872807bcd64ac118f0700337
sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
url: "https://pub.dev"
source: hosted
version: "0.2.1"
version: "1.0.1"
path_provider:
dependency: "direct main"
description:
@ -637,10 +581,10 @@ packages:
dependency: transitive
description:
name: path_provider_windows
sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905
sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
url: "https://pub.dev"
source: hosted
version: "2.0.7"
version: "2.2.1"
petitparser:
dependency: transitive
description:
@ -653,10 +597,10 @@ packages:
dependency: "direct main"
description:
name: pin_code_fields
sha256: c8652519d14688f3fe2a8288d86910a46aa0b9046d728f292d3bf6067c31b4c7
sha256: "4c0db7fbc889e622e7c71ea54b9ee624bb70c7365b532abea0271b17ea75b729"
url: "https://pub.dev"
source: hosted
version: "7.4.0"
version: "8.0.1"
platform:
dependency: transitive
description:
@ -689,22 +633,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.2.4"
provider:
dependency: transitive
description:
name: provider
sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f
url: "https://pub.dev"
source: hosted
version: "6.0.5"
quiver:
dependency: transitive
description:
name: quiver
sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47
url: "https://pub.dev"
source: hosted
version: "3.2.1"
roundcheckbox:
dependency: "direct main"
description:
@ -781,10 +709,10 @@ packages:
dependency: "direct main"
description:
name: shimmer
sha256: "1f1009b5845a1f88f1c5630212279540486f97409e9fc3f63883e71070d107bf"
sha256: "5f88c883a22e9f9f299e5ba0e4f7e6054857224976a5d9f839d4ebdc94a14ac9"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "3.0.0"
sky_engine:
dependency: transitive
description: flutter
@ -894,14 +822,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.9.2"
tuple:
dependency: transitive
description:
name: tuple
sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151
url: "https://pub.dev"
source: hosted
version: "2.0.2"
typed_data:
dependency: transitive
description:
@ -990,6 +910,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.1.0"
vector_graphics:
dependency: transitive
description:
name: vector_graphics
sha256: b16dadf7eb610e20da044c141b4a0199a5e8082ca21daba68322756f953ce714
url: "https://pub.dev"
source: hosted
version: "1.1.9"
vector_graphics_codec:
dependency: transitive
description:
name: vector_graphics_codec
sha256: a4b01403d5c613db115e30e71eca33f7e9e09f2d3c52c3fb84e16333ecddc539
url: "https://pub.dev"
source: hosted
version: "1.1.9"
vector_graphics_compiler:
dependency: transitive
description:
name: vector_graphics_compiler
sha256: d26c0e2f237476426523eb25512e4c09fa27c6d33ed659a0e69d79e20b5dc47f
url: "https://pub.dev"
source: hosted
version: "1.1.9"
vector_math:
dependency: transitive
description:
@ -998,86 +942,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.4"
video_player:
dependency: transitive
description:
name: video_player
sha256: "74b86e63529cf5885130c639d74cd2f9232e7c8a66cbecbddd1dcb9dbd060d1e"
url: "https://pub.dev"
source: hosted
version: "2.7.2"
video_player_android:
dependency: transitive
description:
name: video_player_android
sha256: "3fe89ab07fdbce786e7eb25b58532d6eaf189ceddc091cb66cba712f8d9e8e55"
url: "https://pub.dev"
source: hosted
version: "2.4.10"
video_player_avfoundation:
dependency: transitive
description:
name: video_player_avfoundation
sha256: "6387c2de77763b45104256b3b00b660089be4f909ded8631457dc11bf635e38f"
url: "https://pub.dev"
source: hosted
version: "2.5.0"
video_player_platform_interface:
dependency: transitive
description:
name: video_player_platform_interface
sha256: be72301bf2c0150ab35a8c34d66e5a99de525f6de1e8d27c0672b836fe48f73a
url: "https://pub.dev"
source: hosted
version: "6.2.1"
video_player_web:
dependency: transitive
description:
name: video_player_web
sha256: "2dd24f7ba46bfb5d070e9c795001db95e0ca5f2a3d025e98f287c10c9f0fd62f"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
wakelock:
dependency: transitive
description:
name: wakelock
sha256: "769ecf42eb2d07128407b50cb93d7c10bd2ee48f0276ef0119db1d25cc2f87db"
url: "https://pub.dev"
source: hosted
version: "0.6.2"
wakelock_macos:
dependency: transitive
description:
name: wakelock_macos
sha256: "047c6be2f88cb6b76d02553bca5a3a3b95323b15d30867eca53a19a0a319d4cd"
url: "https://pub.dev"
source: hosted
version: "0.4.0"
wakelock_platform_interface:
dependency: transitive
description:
name: wakelock_platform_interface
sha256: "1f4aeb81fb592b863da83d2d0f7b8196067451e4df91046c26b54a403f9de621"
url: "https://pub.dev"
source: hosted
version: "0.3.0"
wakelock_web:
dependency: transitive
description:
name: wakelock_web
sha256: "1b256b811ee3f0834888efddfe03da8d18d0819317f20f6193e2922b41a501b5"
url: "https://pub.dev"
source: hosted
version: "0.4.0"
wakelock_windows:
dependency: transitive
description:
name: wakelock_windows
sha256: "108b1b73711f1664ee462e73af34a9286ff496e27d4d8371e2fb4da8fde4cdac"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
web:
dependency: transitive
description:
@ -1090,42 +954,50 @@ packages:
dependency: "direct main"
description:
name: webview_flutter
sha256: "6886b3ceef1541109df5001054aade5ee3c36b5780302e41701c78357233721c"
sha256: c1ab9b81090705c6069197d9fdc1625e587b52b8d70cdde2339d177ad0dbb98e
url: "https://pub.dev"
source: hosted
version: "2.8.0"
version: "4.4.1"
webview_flutter_android:
dependency: transitive
description:
name: webview_flutter_android
sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd"
sha256: b0cd33dd7d3dd8e5f664e11a19e17ba12c352647269921a3b568406b001f1dff
url: "https://pub.dev"
source: hosted
version: "2.10.4"
version: "3.12.0"
webview_flutter_platform_interface:
dependency: transitive
description:
name: webview_flutter_platform_interface
sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf"
sha256: "6d9213c65f1060116757a7c473247c60f3f7f332cac33dc417c9e362a9a13e4f"
url: "https://pub.dev"
source: hosted
version: "1.9.5"
version: "2.6.0"
webview_flutter_wkwebview:
dependency: transitive
description:
name: webview_flutter_wkwebview
sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0
sha256: "30b9af6bdd457b44c08748b9190d23208b5165357cc2eb57914fee1366c42974"
url: "https://pub.dev"
source: hosted
version: "2.9.5"
version: "3.9.1"
win32:
dependency: transitive
description:
name: win32
sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef
sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3"
url: "https://pub.dev"
source: hosted
version: "2.6.1"
version: "5.0.9"
win32_registry:
dependency: transitive
description:
name: win32_registry
sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a"
url: "https://pub.dev"
source: hosted
version: "1.1.2"
xdg_directories:
dependency: transitive
description:
@ -1138,10 +1010,10 @@ packages:
dependency: transitive
description:
name: xml
sha256: "80d494c09849dc3f899d227a78c30c5b949b985ededf884cb3f3bcd39f4b447a"
sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84"
url: "https://pub.dev"
source: hosted
version: "5.4.1"
version: "6.3.0"
yaml:
dependency: transitive
description:

View File

@ -14,9 +14,9 @@ dependencies:
cupertino_icons: ^1.0.2
flutter_screenutil: ^5.5.3+2
get: ^4.6.5
flutter_svg: ^0.22.0
badges: ^2.0.1
dio: ^4.0.0
flutter_svg: ^2.0.7
badges: ^3.1.2
dio: ^5.3.3
carousel_slider: ^4.0.0
smooth_page_indicator: ^1.0.0+2 # indicators used on images
cached_network_image: ^3.2.1
@ -27,34 +27,34 @@ dependencies:
url: https://github.com/followthemoney1/modal_bottom_sheet.git
ref: main
path: modal_bottom_sheet
pin_code_fields: ^7.3.0
pin_code_fields: ^8.0.1
path_provider: ^2.0.6
animate_do: ^2.1.0
animate_do: ^3.1.2
flutter_rating_bar: ^4.0.0
mask_text_input_formatter: ^2.0.0
snapping_sheet: ^3.1.0 # draggable bottom_sheet:
shared_preferences: ^2.0.12
flutter_html: ^2.2.1 # try to remove, use webview_flutter
flutter_html: ^3.0.0-beta.2 # try to remove, use webview_flutter
html: ^0.15.0 # used for parse html
loader_overlay: ^2.0.7
device_info_plus: ^3.2.1
intl: ^0.17.0
loader_overlay: ^2.3.2
device_info_plus: ^9.1.0
intl: ^0.18.1
roundcheckbox: ^2.0.4+1
multi_select_flutter: ^4.1.2
shimmer: ^2.0.0
flutter_staggered_grid_view: ^0.6.1
shimmer: ^3.0.0
flutter_staggered_grid_view: ^0.7.0
url_launcher: ^6.1.5
webview_flutter: ^2.8.0
webview_flutter: ^4.4.1
firebase_messaging: ^14.1.1
firebase_core: ^2.3.0
flutter_local_notifications: ^12.0.4
flutter_local_notifications: ^16.1.0
flutter_native_splash: ^2.2.0+1
dev_dependencies:
flutter_test:
sdk: flutter
lint: ^1.7.2
flutter_launcher_icons: "^0.9.2"
lint: ^2.1.2
flutter_launcher_icons: ^0.13.1
flutter_native_splash:
image: assets/logo/icon-rounded.png