提交 d6302c91 authored 作者: 王鹏飞's avatar 王鹏飞

feat: migrate from flutter_inapp_purchase to official in_app_purchase plugin

Replace deprecated flutter_inapp_purchase (StoreKit 1 only) with the official in_app_purchase plugin supporting StoreKit 2 on iOS 15+. Update all IAP-related controllers (recharge, order awaiting/cancel/completed) to use InAppPurchase.instance, purchaseStream, and buyConsumable API.
上级 70946588
...@@ -7,8 +7,6 @@ PODS: ...@@ -7,8 +7,6 @@ PODS:
- Flutter (1.0.0) - Flutter (1.0.0)
- flutter_app_update (0.0.1): - flutter_app_update (0.0.1):
- Flutter - Flutter
- flutter_inapp_purchase (0.0.1):
- Flutter
- flutter_inappwebview_ios (0.0.1): - flutter_inappwebview_ios (0.0.1):
- Flutter - Flutter
- flutter_inappwebview_ios/Core (= 0.0.1) - flutter_inappwebview_ios/Core (= 0.0.1)
...@@ -30,6 +28,9 @@ PODS: ...@@ -30,6 +28,9 @@ PODS:
- WechatOpenSDK-XCFramework (~> 2.0.4) - WechatOpenSDK-XCFramework (~> 2.0.4)
- image_picker_ios (0.0.1): - image_picker_ios (0.0.1):
- Flutter - Flutter
- in_app_purchase_storekit (0.0.1):
- Flutter
- FlutterMacOS
- just_audio (0.0.1): - just_audio (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
...@@ -57,12 +58,12 @@ DEPENDENCIES: ...@@ -57,12 +58,12 @@ DEPENDENCIES:
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- Flutter (from `Flutter`) - Flutter (from `Flutter`)
- flutter_app_update (from `.symlinks/plugins/flutter_app_update/ios`) - flutter_app_update (from `.symlinks/plugins/flutter_app_update/ios`)
- flutter_inapp_purchase (from `.symlinks/plugins/flutter_inapp_purchase/ios`)
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
- flutter_sound (from `.symlinks/plugins/flutter_sound/ios`) - flutter_sound (from `.symlinks/plugins/flutter_sound/ios`)
- flutter_tts (from `.symlinks/plugins/flutter_tts/ios`) - flutter_tts (from `.symlinks/plugins/flutter_tts/ios`)
- fluwx (from `.symlinks/plugins/fluwx/ios`) - fluwx (from `.symlinks/plugins/fluwx/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`)
- just_audio (from `.symlinks/plugins/just_audio/darwin`) - just_audio (from `.symlinks/plugins/just_audio/darwin`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
...@@ -86,8 +87,6 @@ EXTERNAL SOURCES: ...@@ -86,8 +87,6 @@ EXTERNAL SOURCES:
:path: Flutter :path: Flutter
flutter_app_update: flutter_app_update:
:path: ".symlinks/plugins/flutter_app_update/ios" :path: ".symlinks/plugins/flutter_app_update/ios"
flutter_inapp_purchase:
:path: ".symlinks/plugins/flutter_inapp_purchase/ios"
flutter_inappwebview_ios: flutter_inappwebview_ios:
:path: ".symlinks/plugins/flutter_inappwebview_ios/ios" :path: ".symlinks/plugins/flutter_inappwebview_ios/ios"
flutter_sound: flutter_sound:
...@@ -98,6 +97,8 @@ EXTERNAL SOURCES: ...@@ -98,6 +97,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/fluwx/ios" :path: ".symlinks/plugins/fluwx/ios"
image_picker_ios: image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios" :path: ".symlinks/plugins/image_picker_ios/ios"
in_app_purchase_storekit:
:path: ".symlinks/plugins/in_app_purchase_storekit/darwin"
just_audio: just_audio:
:path: ".symlinks/plugins/just_audio/darwin" :path: ".symlinks/plugins/just_audio/darwin"
package_info_plus: package_info_plus:
...@@ -116,13 +117,13 @@ SPEC CHECKSUMS: ...@@ -116,13 +117,13 @@ SPEC CHECKSUMS:
connectivity_plus: 481668c94744c30c53b8895afb39159d1e619bdf connectivity_plus: 481668c94744c30c53b8895afb39159d1e619bdf
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
flutter_app_update: 816fdb2e30e4832a7c45e3f108d391c42ef040a9 flutter_app_update: 816fdb2e30e4832a7c45e3f108d391c42ef040a9
flutter_inapp_purchase: 722da12971a50f306f37e62fc1aaf576b1cbecf6
flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99 flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
flutter_sound: d95194f6476c9ad211d22b3a414d852c12c7ca44 flutter_sound: d95194f6476c9ad211d22b3a414d852c12c7ca44
flutter_sound_core: 7f2626d249d3a57bfa6da892ef7e22d234482c1a flutter_sound_core: 7f2626d249d3a57bfa6da892ef7e22d234482c1a
flutter_tts: b88dbc8655d3dc961bc4a796e4e16a4cc1795833 flutter_tts: b88dbc8655d3dc961bc4a796e4e16a4cc1795833
fluwx: 49b4472b54762abde51daa0bc348ba05520016ac fluwx: 49b4472b54762abde51daa0bc348ba05520016ac
image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326 image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326
in_app_purchase_storekit: 22cca7d08eebca9babdf4d07d0baccb73325d3c8
just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: 566e1b7a2f3900e4b0020914ad3fc051dcc95596 package_info_plus: 566e1b7a2f3900e4b0020914ad3fc051dcc95596
......
...@@ -5,14 +5,10 @@ class CoinRechargeController extends GetxController { ...@@ -5,14 +5,10 @@ class CoinRechargeController extends GetxController {
// 上线文 // 上线文
final BuildContext context; final BuildContext context;
CoinRechargeController({required this.context}); CoinRechargeController({required this.context});
dynamic _purchaseUpdatedSubscription; StreamSubscription<List<PurchaseDetails>>? _purchaseUpdatedSubscription;
dynamic _purchaseErrorSubscription; PurchaseDetails? _resultItem;
dynamic _connectionSubscription;
PurchasedItem? _resultItem;
List<IAPItem> _items = []; List<ProductDetails> _items = [];
//未完成的订单
final List<PurchasedItem> _pendingPurchases = [];
// 支付宝 // 支付宝
Tobias tobias = Tobias(); Tobias tobias = Tobias();
// 微信 // 微信
...@@ -30,13 +26,16 @@ class CoinRechargeController extends GetxController { ...@@ -30,13 +26,16 @@ class CoinRechargeController extends GetxController {
// 充值模型 // 充值模型
late CoinModel rechargeModel = CoinModel(); late CoinModel rechargeModel = CoinModel();
// 支付方式 // 支付方式
late PayModel _payModel = pays.first; late PayModel _payModel = pays.isNotEmpty
? pays.first
: PayModel(type: 0, name: '', icon: '', selected: false);
PayModel get payModel => _payModel; PayModel get payModel => _payModel;
bool iapProductLoading = false;
bool isSubmitting = false;
@override @override
void onInit() { void onInit() {
initPlatformState(); initPlatformState();
_getPendingPurchase();
super.onInit(); super.onInit();
} }
...@@ -48,18 +47,10 @@ class CoinRechargeController extends GetxController { ...@@ -48,18 +47,10 @@ class CoinRechargeController extends GetxController {
} }
@override @override
void onClose() { void onClose() {
if (_connectionSubscription != null) {
_connectionSubscription.cancel();
_connectionSubscription = null;
}
if (_purchaseUpdatedSubscription != null) { if (_purchaseUpdatedSubscription != null) {
_purchaseUpdatedSubscription.cancel(); _purchaseUpdatedSubscription!.cancel();
_purchaseUpdatedSubscription = null; _purchaseUpdatedSubscription = null;
} }
if (_purchaseErrorSubscription != null) {
_purchaseErrorSubscription.cancel();
_purchaseErrorSubscription = null;
}
super.onClose(); super.onClose();
} }
...@@ -98,54 +89,85 @@ class CoinRechargeController extends GetxController { ...@@ -98,54 +89,85 @@ class CoinRechargeController extends GetxController {
} }
final result = await MineAPI.coinsRechargeList(type: type); final result = await MineAPI.coinsRechargeList(type: type);
data = result; data = result;
if (data.isNotEmpty && rechargeModel.identifying == null) {
choose(data.first);
}
if(Platform.isIOS){ if(Platform.isIOS){
_getProduct(); await _getProduct();
} }
update(); update();
} }
/// 初始化支付 /// 初始化支付
Future<void> initPlatformState() async{ Future<void> initPlatformState() async{
await FlutterInappPurchase.instance.initialize(); final available = await InAppPurchase.instance.isAvailable();
_iapLog('IAP store available: $available');
_purchaseUpdatedSubscription =
_connectionSubscription = FlutterInappPurchase.connectionUpdated.listen((connected) { InAppPurchase.instance.purchaseStream.listen(
}); _listenToPurchaseUpdated,
onError: (error) {
_purchaseUpdatedSubscription = FlutterInappPurchase.purchaseUpdated.listen((productItem) {
CustomToast.dismiss();
if(productItem != null){
_resultItem = productItem;
_requestOrderStatus();
}
});
_purchaseErrorSubscription = FlutterInappPurchase.purchaseError.listen((purchaseError) {
CustomToast.dismiss(); CustomToast.dismiss();
Toast.show(purchaseError!.message.toString()); _iapLog('IAP purchase stream error: $error');
}); Toast.show('内购发生错误,请稍后重试');
},
);
} }
/// 获取商品列表 /// 获取商品列表
Future _getProduct() async { Future _getProduct() async {
iapProductLoading = true;
update();
List<String> productList = data List<String> productList = data
.where((coinModel) => coinModel.identifying != null) .where((coinModel) => coinModel.identifying != null)
.map((coinModel) => coinModel.identifying!) .map((coinModel) => coinModel.identifying!)
.toList(); .toList();
List<IAPItem> items = await FlutterInappPurchase.instance.getProducts(productList); _iapLog('IAP productList: $productList');
for (var item in items) { try {
_items.add(item); final response =
await InAppPurchase.instance.queryProductDetails(productList.toSet());
_items = response.productDetails;
_iapLog('IAP query error: ${response.error}');
_iapLog('IAP not found ids: ${response.notFoundIDs}');
_iapLog('IAP loaded items: ${_items.map((item) => item.id).toList()}');
} catch (error) {
_items = [];
_iapLog('IAP getProducts failed: $error');
} finally {
iapProductLoading = false;
update();
} }
_items = items;
// update();
} }
/// 创建订单 /// 创建订单
void createRechargeOrder() async { void createRechargeOrder() async {
if (isSubmitting) return;
if (rechargeModel.identifying == null || rechargeModel.identifying!.isEmpty) {
Toast.show('请选择充值金额');
return;
}
ProductDetails? targetItem;
if (Platform.isIOS) {
if (iapProductLoading) {
Toast.show('内购商品加载中,请稍后重试');
return;
}
targetItem = _findIapItem(rechargeModel.identifying!);
if (targetItem == null) {
await _getProduct();
targetItem = _findIapItem(rechargeModel.identifying!);
}
if (targetItem == null) {
_iapLog('IAP target not found: ${rechargeModel.identifying}, loaded: ${_items.map((item) => item.id).toList()}');
Toast.show('内购商品加载失败,请稍后重试');
return;
}
}
isSubmitting = true;
update();
String type = ''; String type = '';
if(Platform.isIOS){ if(Platform.isIOS){
type = '3'; type = '3';
...@@ -153,7 +175,18 @@ class CoinRechargeController extends GetxController { ...@@ -153,7 +175,18 @@ class CoinRechargeController extends GetxController {
else{ else{
type = payModel.type.toString(); type = payModel.type.toString();
} }
final result = await MineAPI.createRechargeOrder(identifying: rechargeModel.identifying??'', type: type); late PayOrderModel result;
try {
result = await MineAPI.createRechargeOrder(
identifying: rechargeModel.identifying ?? '', type: type);
} catch (error) {
isSubmitting = false;
update();
Console.log('createRechargeOrder failed: $error');
return;
}
isSubmitting = false;
update();
Console.log('-----------------------------------${result.ordersnum}--------------------------------${result.msg}'); Console.log('-----------------------------------${result.ordersnum}--------------------------------${result.msg}');
payOrderModel = result; payOrderModel = result;
...@@ -163,10 +196,7 @@ class CoinRechargeController extends GetxController { ...@@ -163,10 +196,7 @@ class CoinRechargeController extends GetxController {
// 苹果 // 苹果
if(Platform.isIOS){ if(Platform.isIOS){
// 发起苹果支付 // 发起苹果支付
IAPItem targetItem = _items.firstWhere( _requestPurchase(targetItem!);
(item) => item.productId == rechargeModel.identifying,
);
_requestPurchase(targetItem);
} }
// 安卓 // 安卓
else if(Platform.isAndroid){ else if(Platform.isAndroid){
...@@ -184,9 +214,23 @@ class CoinRechargeController extends GetxController { ...@@ -184,9 +214,23 @@ class CoinRechargeController extends GetxController {
} }
ProductDetails? _findIapItem(String productId) {
for (final item in _items) {
if (item.id == productId) {
return item;
}
}
return null;
}
void _iapLog(String message) {
Console.log(message);
debugPrint(message);
}
/// 获取后台关于当前单号的结算结果 /// 获取后台关于当前单号的结算结果
void _requestOrderStatus() async { Future<void> _requestOrderStatus() async {
final result = await ShopAPI.orderStatus(orderNumber: payOrderModel.ordersnum??'',receipt:_resultItem != null?_resultItem!.transactionReceipt.toString():''); final result = await ShopAPI.orderStatus(orderNumber: payOrderModel.ordersnum??'',receipt:_resultItem != null?_resultItem!.verificationData.serverVerificationData.toString():'');
// 查询订单支付成功 // 查询订单支付成功
if (result.paySuccess == 1){ if (result.paySuccess == 1){
...@@ -208,7 +252,6 @@ class CoinRechargeController extends GetxController { ...@@ -208,7 +252,6 @@ class CoinRechargeController extends GetxController {
} }
StorageService.to.setObject(kFailOrder, temp); StorageService.to.setObject(kFailOrder, temp);
} }
FlutterInappPurchase.instance.finishTransactionIOS(_resultItem!.transactionId!);
} }
} }
// 查询订单支付失败 // 查询订单支付失败
...@@ -218,8 +261,8 @@ class CoinRechargeController extends GetxController { ...@@ -218,8 +261,8 @@ class CoinRechargeController extends GetxController {
// 保存未支付的订单 // 保存未支付的订单
Map<String,String> failOrder = { Map<String,String> failOrder = {
'orderNum':payOrderModel.ordersnum??'', 'orderNum':payOrderModel.ordersnum??'',
'transactionReceipt':_resultItem!.transactionReceipt.toString(), 'transactionReceipt':_resultItem!.verificationData.serverVerificationData.toString(),
'transactionId':_resultItem!.transactionId.toString() 'transactionId':_resultItem!.purchaseID.toString()
}; };
List<Map> failOrderList = []; List<Map> failOrderList = [];
failOrderList.add(failOrder); failOrderList.add(failOrder);
...@@ -232,10 +275,19 @@ class CoinRechargeController extends GetxController { ...@@ -232,10 +275,19 @@ class CoinRechargeController extends GetxController {
} }
/// 苹果支付 /// 苹果支付
void _requestPurchase(IAPItem item) { void _requestPurchase(ProductDetails item) {
CustomToast.loading(); CustomToast.loading();
FlutterInappPurchase.instance try {
.requestPurchase(item.productId!); final purchaseParam = PurchaseParam(productDetails: item);
InAppPurchase.instance.buyConsumable(
purchaseParam: purchaseParam,
autoConsume: true,
);
} catch (error) {
CustomToast.dismiss();
_iapLog('IAP request purchase failed: $error');
Toast.show('内购发起失败,请稍后重试');
}
} }
/// 支付宝支付 /// 支付宝支付
...@@ -271,20 +323,26 @@ class CoinRechargeController extends GetxController { ...@@ -271,20 +323,26 @@ class CoinRechargeController extends GetxController {
}); });
} }
///获取未完成的购买 Future<void> _listenToPurchaseUpdated(
Future _getPendingPurchase() async { List<PurchaseDetails> purchaseDetailsList) async {
List<PurchasedItem>? items = await FlutterInappPurchase.instance.getPurchaseHistory(); for (final purchaseDetails in purchaseDetailsList) {
for (var item in items!) { _iapLog(
_pendingPurchases.add(item); 'IAP purchase update: ${purchaseDetails.productID}, ${purchaseDetails.status}, ${purchaseDetails.error}');
} if (purchaseDetails.status == PurchaseStatus.pending) {
if(StorageService.to.getObject(kFailOrder) !=null){ continue;
List<Map<String,String>> failOrderList = StorageService.to.getObject(kFailOrder) as List<Map<String, String>>;
for (var item in _pendingPurchases) {
for (var element in failOrderList) {
if(element['transactionId'] == item.transactionId){
_requestOrderStatus();
}
} }
CustomToast.dismiss();
if (purchaseDetails.status == PurchaseStatus.error) {
Toast.show(purchaseDetails.error?.message ?? '内购发生错误,请稍后重试');
} else if (purchaseDetails.status == PurchaseStatus.canceled) {
Toast.show('支付已取消');
} else if (purchaseDetails.status == PurchaseStatus.purchased ||
purchaseDetails.status == PurchaseStatus.restored) {
_resultItem = purchaseDetails;
await _requestOrderStatus();
}
if (purchaseDetails.pendingCompletePurchase) {
await InAppPurchase.instance.completePurchase(purchaseDetails);
} }
} }
} }
......
...@@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; ...@@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_book/apis/index.dart'; import 'package:flutter_book/apis/index.dart';
import 'package:flutter_book/models/index.dart'; import 'package:flutter_book/models/index.dart';
import 'package:flutter_book/theme.dart'; import 'package:flutter_book/theme.dart';
import 'package:flutter_inapp_purchase/flutter_inapp_purchase.dart'; import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluwx/fluwx.dart'; import 'package:fluwx/fluwx.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
......
...@@ -56,8 +56,11 @@ class _CoinRechargePageState extends State<CoinRechargePage> ...@@ -56,8 +56,11 @@ class _CoinRechargePageState extends State<CoinRechargePage>
Container( Container(
margin: EdgeInsets.symmetric(horizontal: 15.w), margin: EdgeInsets.symmetric(horizontal: 15.w),
child: CustomGradientButton( child: CustomGradientButton(
text: '立即充值${controller.rechargeModel.priceName ?? ''}', text: controller.isSubmitting
isEnabled: true, ? '正在充值...'
: '立即充值${controller.rechargeModel.priceName ?? ''}',
isEnabled: controller.rechargeModel.identifying != null &&
!controller.isSubmitting,
onPressed: () { onPressed: () {
controller.createRechargeOrder(); controller.createRechargeOrder();
}, },
......
...@@ -20,14 +20,10 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -20,14 +20,10 @@ class UserOrderCoinAwaitingController extends GetxController {
// 微信 // 微信
Fluwx fluwx = Fluwx(); Fluwx fluwx = Fluwx();
late PayOrderModel payOrderModel; late PayOrderModel payOrderModel;
dynamic _purchaseUpdatedSubscription; StreamSubscription<List<PurchaseDetails>>? _purchaseUpdatedSubscription;
dynamic _purchaseErrorSubscription; PurchaseDetails? _resultItem;
dynamic _connectionSubscription;
PurchasedItem? _resultItem;
List<IAPItem> _items = []; List<ProductDetails> _items = [];
///未完成的订单
final List<PurchasedItem> _pendingPurchases = [];
// 紫荆币数据 // 紫荆币数据
List<CoinModel> data = []; List<CoinModel> data = [];
...@@ -37,7 +33,6 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -37,7 +33,6 @@ class UserOrderCoinAwaitingController extends GetxController {
if(Platform.isIOS){ if(Platform.isIOS){
_getProduct(); _getProduct();
initPlatformState(); initPlatformState();
_getPendingPurchase();
} }
super.onInit(); super.onInit();
} }
...@@ -50,42 +45,27 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -50,42 +45,27 @@ class UserOrderCoinAwaitingController extends GetxController {
@override @override
void onClose() { void onClose() {
// controller.onRefresh();
if (_connectionSubscription != null) {
_connectionSubscription.cancel();
_connectionSubscription = null;
}
if (_purchaseUpdatedSubscription != null) { if (_purchaseUpdatedSubscription != null) {
_purchaseUpdatedSubscription.cancel(); _purchaseUpdatedSubscription!.cancel();
_purchaseUpdatedSubscription = null; _purchaseUpdatedSubscription = null;
} }
if (_purchaseErrorSubscription != null) {
_purchaseErrorSubscription.cancel();
_purchaseErrorSubscription = null;
}
super.onClose(); super.onClose();
} }
/// 初始化 /// 初始化
Future<void> initPlatformState() async{ Future<void> initPlatformState() async{
await FlutterInappPurchase.instance.initialize(); final available = await InAppPurchase.instance.isAvailable();
_iapLog('IAP store available: $available');
_connectionSubscription = FlutterInappPurchase.connectionUpdated.listen((connected) { _purchaseUpdatedSubscription =
}); InAppPurchase.instance.purchaseStream.listen(
_listenToPurchaseUpdated,
_purchaseUpdatedSubscription = FlutterInappPurchase.purchaseUpdated.listen((productItem) { onError: (error) {
CustomToast.dismiss(); CustomToast.dismiss();
if(productItem != null){ _iapLog('IAP purchase stream error: $error');
_resultItem = productItem; Toast.show('内购发生错误,请稍后重试');
requestOrderStatus(); },
} );
});
_purchaseErrorSubscription = FlutterInappPurchase.purchaseError.listen((purchaseError) {
CustomToast.dismiss();
Toast.show(purchaseError!.message.toString());
});
} }
...@@ -130,14 +110,20 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -130,14 +110,20 @@ class UserOrderCoinAwaitingController extends GetxController {
.map((coinModel) => coinModel.identifying!) .map((coinModel) => coinModel.identifying!)
.toList(); .toList();
List<IAPItem> items = await FlutterInappPurchase.instance.getProducts(productList); if (productList.isEmpty) return;
for (var item in items) {
_items.add(item);
}
_iapLog('IAP productList: $productList');
_items = items; try {
// update(); final response =
await InAppPurchase.instance.queryProductDetails(productList.toSet());
_items = response.productDetails;
_iapLog('IAP query error: ${response.error}');
_iapLog('IAP not found ids: ${response.notFoundIDs}');
_iapLog('IAP loaded items: ${_items.map((item) => item.id).toList()}');
} catch (error) {
_items = [];
_iapLog('IAP getProducts failed: $error');
}
} }
/// 支付订单 /// 支付订单
...@@ -145,8 +131,8 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -145,8 +131,8 @@ class UserOrderCoinAwaitingController extends GetxController {
// 苹果支付 // 苹果支付
if (model.payType ==3){ if (model.payType ==3){
// 发起苹果支付 // 发起苹果支付
IAPItem targetItem = _items.firstWhere( ProductDetails targetItem = _items.firstWhere(
(item) => item.productId == model.goodsId, (item) => item.id == model.goodsId,
); );
_requestPurchase(targetItem); _requestPurchase(targetItem);
} }
...@@ -178,10 +164,19 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -178,10 +164,19 @@ class UserOrderCoinAwaitingController extends GetxController {
} }
/// 苹果支付 /// 苹果支付
void _requestPurchase(IAPItem item) { void _requestPurchase(ProductDetails item) {
CustomToast.loading(); CustomToast.loading();
FlutterInappPurchase.instance try {
.requestPurchase(item.productId!); final purchaseParam = PurchaseParam(productDetails: item);
InAppPurchase.instance.buyConsumable(
purchaseParam: purchaseParam,
autoConsume: true,
);
} catch (error) {
CustomToast.dismiss();
_iapLog('IAP request purchase failed: $error');
Toast.show('内购发起失败,请稍后重试');
}
} }
/// 支付宝支付 /// 支付宝支付
...@@ -220,7 +215,7 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -220,7 +215,7 @@ class UserOrderCoinAwaitingController extends GetxController {
/// 获取订单状态 /// 获取订单状态
void requestOrderStatus() async { void requestOrderStatus() async {
final result = await ShopAPI.orderStatus(orderNumber: model.ordersnum??'',receipt:_resultItem != null?_resultItem!.transactionReceipt.toString():''); final result = await ShopAPI.orderStatus(orderNumber: model.ordersnum??'',receipt:_resultItem != null?_resultItem!.verificationData.serverVerificationData.toString():'');
if (result.paySuccess == 1){ if (result.paySuccess == 1){
Toast.show('订单支付完成'); Toast.show('订单支付完成');
if(context.mounted){ if(context.mounted){
...@@ -239,7 +234,6 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -239,7 +234,6 @@ class UserOrderCoinAwaitingController extends GetxController {
} }
StorageService.to.setObject(kFailOrder, temp); StorageService.to.setObject(kFailOrder, temp);
} }
FlutterInappPurchase.instance.finishTransactionIOS(_resultItem!.transactionId!);
} }
} }
else{ else{
...@@ -248,8 +242,8 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -248,8 +242,8 @@ class UserOrderCoinAwaitingController extends GetxController {
// 保存未支付的订单 // 保存未支付的订单
Map<String,String> failOrder = { Map<String,String> failOrder = {
'orderNum':payOrderModel.ordersnum??'', 'orderNum':payOrderModel.ordersnum??'',
'transactionReceipt':_resultItem!.transactionReceipt.toString(), 'transactionReceipt':_resultItem!.verificationData.serverVerificationData.toString(),
'transactionId':_resultItem!.transactionId.toString() 'transactionId':_resultItem!.purchaseID.toString()
}; };
List<Map> failOrderList = []; List<Map> failOrderList = [];
failOrderList.add(failOrder); failOrderList.add(failOrder);
...@@ -259,23 +253,33 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -259,23 +253,33 @@ class UserOrderCoinAwaitingController extends GetxController {
} }
///获取未完成的购买 void _iapLog(String message) {
Future _getPendingPurchase() async { Console.log(message);
List<PurchasedItem>? items = await FlutterInappPurchase.instance.getPurchaseHistory(); debugPrint(message);
for (var item in items!) {
_pendingPurchases.add(item);
} }
if(StorageService.to.getObject(kFailOrder) !=null){
List<Map<String,String>> failOrderList = StorageService.to.getObject(kFailOrder) as List<Map<String, String>>; Future<void> _listenToPurchaseUpdated(
for (var item in _pendingPurchases) { List<PurchaseDetails> purchaseDetailsList) async {
for (var element in failOrderList) { for (final purchaseDetails in purchaseDetailsList) {
if(element['transactionId'] == item.transactionId){ _iapLog(
requestOrderStatus(); 'IAP purchase update: ${purchaseDetails.productID}, ${purchaseDetails.status}, ${purchaseDetails.error}');
if (purchaseDetails.status == PurchaseStatus.pending) {
continue;
} }
CustomToast.dismiss();
if (purchaseDetails.status == PurchaseStatus.error) {
Toast.show(purchaseDetails.error?.message ?? '内购发生错误,请稍后重试');
} else if (purchaseDetails.status == PurchaseStatus.canceled) {
Toast.show('支付已取消');
} else if (purchaseDetails.status == PurchaseStatus.purchased ||
purchaseDetails.status == PurchaseStatus.restored) {
_resultItem = purchaseDetails;
requestOrderStatus();
} }
if (purchaseDetails.pendingCompletePurchase) {
await InAppPurchase.instance.completePurchase(purchaseDetails);
} }
} }
} }
} }
library user_order_coin_awaiting; library user_order_coin_awaiting;
import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_book/theme.dart'; import 'package:flutter_book/theme.dart';
import 'package:flutter_book/utils/index.dart'; import 'package:flutter_book/utils/index.dart';
import 'package:flutter_book/widgets/index.dart'; import 'package:flutter_book/widgets/index.dart';
import 'package:flutter_inapp_purchase/flutter_inapp_purchase.dart'; import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:fluwx/fluwx.dart'; import 'package:fluwx/fluwx.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
......
...@@ -20,14 +20,10 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -20,14 +20,10 @@ class UserOrderCoinCancelController extends GetxController {
// 微信 // 微信
Fluwx fluwx = Fluwx(); Fluwx fluwx = Fluwx();
late PayOrderModel payOrderModel; late PayOrderModel payOrderModel;
dynamic _purchaseUpdatedSubscription; StreamSubscription<List<PurchaseDetails>>? _purchaseUpdatedSubscription;
dynamic _purchaseErrorSubscription; PurchaseDetails? _resultItem;
dynamic _connectionSubscription;
PurchasedItem? _resultItem;
List<IAPItem> _items = []; List<ProductDetails> _items = [];
///未完成的订单
final List<PurchasedItem> _pendingPurchases = [];
List<CoinModel> data = []; List<CoinModel> data = [];
...@@ -37,7 +33,6 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -37,7 +33,6 @@ class UserOrderCoinCancelController extends GetxController {
if(Platform.isIOS){ if(Platform.isIOS){
_getProduct(); _getProduct();
initPlatformState(); initPlatformState();
_getPendingPurchase();
} }
super.onInit(); super.onInit();
} }
...@@ -50,43 +45,27 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -50,43 +45,27 @@ class UserOrderCoinCancelController extends GetxController {
@override @override
void onClose() { void onClose() {
// controller.onRefresh();
if (_connectionSubscription != null) {
_connectionSubscription.cancel();
_connectionSubscription = null;
}
if (_purchaseUpdatedSubscription != null) { if (_purchaseUpdatedSubscription != null) {
_purchaseUpdatedSubscription.cancel(); _purchaseUpdatedSubscription!.cancel();
_purchaseUpdatedSubscription = null; _purchaseUpdatedSubscription = null;
} }
if (_purchaseErrorSubscription != null) {
_purchaseErrorSubscription.cancel();
_purchaseErrorSubscription = null;
}
super.onClose(); super.onClose();
} }
/// 初始化 /// 初始化
Future<void> initPlatformState() async{ Future<void> initPlatformState() async{
await FlutterInappPurchase.instance.initialize(); final available = await InAppPurchase.instance.isAvailable();
_iapLog('IAP store available: $available');
_purchaseUpdatedSubscription =
_connectionSubscription = FlutterInappPurchase.connectionUpdated.listen((connected) { InAppPurchase.instance.purchaseStream.listen(
}); _listenToPurchaseUpdated,
onError: (error) {
_purchaseUpdatedSubscription = FlutterInappPurchase.purchaseUpdated.listen((productItem) {
CustomToast.dismiss();
if(productItem != null){
_resultItem = productItem;
requestOrderStatus();
}
});
_purchaseErrorSubscription = FlutterInappPurchase.purchaseError.listen((purchaseError) {
CustomToast.dismiss(); CustomToast.dismiss();
Toast.show(purchaseError!.message.toString()); _iapLog('IAP purchase stream error: $error');
}); Toast.show('内购发生错误,请稍后重试');
},
);
} }
...@@ -131,13 +110,20 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -131,13 +110,20 @@ class UserOrderCoinCancelController extends GetxController {
.map((coinModel) => coinModel.identifying!) .map((coinModel) => coinModel.identifying!)
.toList(); .toList();
List<IAPItem> items = await FlutterInappPurchase.instance.getProducts(productList); if (productList.isEmpty) return;
for (var item in items) {
_items.add(item);
}
_items = items; _iapLog('IAP productList: $productList');
// update(); try {
final response =
await InAppPurchase.instance.queryProductDetails(productList.toSet());
_items = response.productDetails;
_iapLog('IAP query error: ${response.error}');
_iapLog('IAP not found ids: ${response.notFoundIDs}');
_iapLog('IAP loaded items: ${_items.map((item) => item.id).toList()}');
} catch (error) {
_items = [];
_iapLog('IAP getProducts failed: $error');
}
} }
/// 支付订单 /// 支付订单
...@@ -145,8 +131,8 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -145,8 +131,8 @@ class UserOrderCoinCancelController extends GetxController {
// 苹果支付 // 苹果支付
if (model.payType ==3){ if (model.payType ==3){
// 发起苹果支付 // 发起苹果支付
IAPItem targetItem = _items.firstWhere( ProductDetails targetItem = _items.firstWhere(
(item) => item.productId == model.goodsId, (item) => item.id == model.goodsId,
); );
_requestPurchase(targetItem); _requestPurchase(targetItem);
} }
...@@ -178,10 +164,19 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -178,10 +164,19 @@ class UserOrderCoinCancelController extends GetxController {
} }
/// 苹果支付 /// 苹果支付
void _requestPurchase(IAPItem item) { void _requestPurchase(ProductDetails item) {
CustomToast.loading(); CustomToast.loading();
FlutterInappPurchase.instance try {
.requestPurchase(item.productId!); final purchaseParam = PurchaseParam(productDetails: item);
InAppPurchase.instance.buyConsumable(
purchaseParam: purchaseParam,
autoConsume: true,
);
} catch (error) {
CustomToast.dismiss();
_iapLog('IAP request purchase failed: $error');
Toast.show('内购发起失败,请稍后重试');
}
} }
/// 支付宝支付 /// 支付宝支付
...@@ -220,7 +215,7 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -220,7 +215,7 @@ class UserOrderCoinCancelController extends GetxController {
/// 获取订单状态 /// 获取订单状态
void requestOrderStatus() async { void requestOrderStatus() async {
final result = await ShopAPI.orderStatus(orderNumber: model.ordersnum??'',receipt:_resultItem != null?_resultItem!.transactionReceipt.toString():''); final result = await ShopAPI.orderStatus(orderNumber: model.ordersnum??'',receipt:_resultItem != null?_resultItem!.verificationData.serverVerificationData.toString():'');
if (result.paySuccess == 1){ if (result.paySuccess == 1){
Toast.show('订单支付完成'); Toast.show('订单支付完成');
if(context.mounted){ if(context.mounted){
...@@ -239,7 +234,6 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -239,7 +234,6 @@ class UserOrderCoinCancelController extends GetxController {
} }
StorageService.to.setObject(kFailOrder, temp); StorageService.to.setObject(kFailOrder, temp);
} }
FlutterInappPurchase.instance.finishTransactionIOS(_resultItem!.transactionId!);
} }
} }
else{ else{
...@@ -248,8 +242,8 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -248,8 +242,8 @@ class UserOrderCoinCancelController extends GetxController {
// 保存未支付的订单 // 保存未支付的订单
Map<String,String> failOrder = { Map<String,String> failOrder = {
'orderNum':payOrderModel.ordersnum??'', 'orderNum':payOrderModel.ordersnum??'',
'transactionReceipt':_resultItem!.transactionReceipt.toString(), 'transactionReceipt':_resultItem!.verificationData.serverVerificationData.toString(),
'transactionId':_resultItem!.transactionId.toString() 'transactionId':_resultItem!.purchaseID.toString()
}; };
List<Map> failOrderList = []; List<Map> failOrderList = [];
failOrderList.add(failOrder); failOrderList.add(failOrder);
...@@ -259,25 +253,33 @@ class UserOrderCoinCancelController extends GetxController { ...@@ -259,25 +253,33 @@ class UserOrderCoinCancelController extends GetxController {
} }
///获取未完成的购买 void _iapLog(String message) {
Future _getPendingPurchase() async { Console.log(message);
List<PurchasedItem>? items = await FlutterInappPurchase.instance.getPurchaseHistory(); debugPrint(message);
for (var item in items!) {
_pendingPurchases.add(item);
} }
if(StorageService.to.getObject(kFailOrder) !=null){
List<Map<String,String>> failOrderList = StorageService.to.getObject(kFailOrder) as List<Map<String, String>>; Future<void> _listenToPurchaseUpdated(
for (var item in _pendingPurchases) { List<PurchaseDetails> purchaseDetailsList) async {
for (var element in failOrderList) { for (final purchaseDetails in purchaseDetailsList) {
if(element['transactionId'] == item.transactionId){ _iapLog(
requestOrderStatus(); 'IAP purchase update: ${purchaseDetails.productID}, ${purchaseDetails.status}, ${purchaseDetails.error}');
if (purchaseDetails.status == PurchaseStatus.pending) {
continue;
} }
CustomToast.dismiss();
if (purchaseDetails.status == PurchaseStatus.error) {
Toast.show(purchaseDetails.error?.message ?? '内购发生错误,请稍后重试');
} else if (purchaseDetails.status == PurchaseStatus.canceled) {
Toast.show('支付已取消');
} else if (purchaseDetails.status == PurchaseStatus.purchased ||
purchaseDetails.status == PurchaseStatus.restored) {
_resultItem = purchaseDetails;
requestOrderStatus();
} }
if (purchaseDetails.pendingCompletePurchase) {
await InAppPurchase.instance.completePurchase(purchaseDetails);
} }
} }
} }
} }
library user_order_coin_cancel; library user_order_coin_cancel;
import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_book/theme.dart'; import 'package:flutter_book/theme.dart';
import 'package:flutter_book/utils/index.dart'; import 'package:flutter_book/utils/index.dart';
import 'package:flutter_book/widgets/index.dart'; import 'package:flutter_book/widgets/index.dart';
import 'package:flutter_inapp_purchase/flutter_inapp_purchase.dart'; import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:fluwx/fluwx.dart'; import 'package:fluwx/fluwx.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
......
...@@ -20,13 +20,9 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -20,13 +20,9 @@ class UserOrderCoinCompletedController extends GetxController {
// 微信 // 微信
Fluwx fluwx = Fluwx(); Fluwx fluwx = Fluwx();
late PayOrderModel payOrderModel; late PayOrderModel payOrderModel;
dynamic _purchaseUpdatedSubscription; StreamSubscription<List<PurchaseDetails>>? _purchaseUpdatedSubscription;
dynamic _purchaseErrorSubscription; PurchaseDetails? _resultItem;
dynamic _connectionSubscription; List<ProductDetails> _items = [];
PurchasedItem? _resultItem;
List<IAPItem> _items = [];
///未完成的订单
final List<PurchasedItem> _pendingPurchases = [];
List<CoinModel> data = []; List<CoinModel> data = [];
...@@ -36,7 +32,6 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -36,7 +32,6 @@ class UserOrderCoinCompletedController extends GetxController {
if(Platform.isIOS){ if(Platform.isIOS){
_getProduct(); _getProduct();
initPlatformState(); initPlatformState();
_getPendingPurchase();
} }
super.onInit(); super.onInit();
} }
...@@ -49,43 +44,27 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -49,43 +44,27 @@ class UserOrderCoinCompletedController extends GetxController {
@override @override
void onClose() { void onClose() {
// controller.onRefresh();
if (_connectionSubscription != null) {
_connectionSubscription.cancel();
_connectionSubscription = null;
}
if (_purchaseUpdatedSubscription != null) { if (_purchaseUpdatedSubscription != null) {
_purchaseUpdatedSubscription.cancel(); _purchaseUpdatedSubscription!.cancel();
_purchaseUpdatedSubscription = null; _purchaseUpdatedSubscription = null;
} }
if (_purchaseErrorSubscription != null) {
_purchaseErrorSubscription.cancel();
_purchaseErrorSubscription = null;
}
super.onClose(); super.onClose();
} }
/// 初始化 /// 初始化
Future<void> initPlatformState() async{ Future<void> initPlatformState() async{
await FlutterInappPurchase.instance.initialize(); final available = await InAppPurchase.instance.isAvailable();
_iapLog('IAP store available: $available');
_purchaseUpdatedSubscription =
_connectionSubscription = FlutterInappPurchase.connectionUpdated.listen((connected) { InAppPurchase.instance.purchaseStream.listen(
}); _listenToPurchaseUpdated,
onError: (error) {
_purchaseUpdatedSubscription = FlutterInappPurchase.purchaseUpdated.listen((productItem) {
CustomToast.dismiss();
if(productItem != null){
_resultItem = productItem;
requestOrderStatus();
}
});
_purchaseErrorSubscription = FlutterInappPurchase.purchaseError.listen((purchaseError) {
CustomToast.dismiss(); CustomToast.dismiss();
Toast.show(purchaseError!.message.toString()); _iapLog('IAP purchase stream error: $error');
}); Toast.show('内购发生错误,请稍后重试');
},
);
} }
...@@ -131,13 +110,20 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -131,13 +110,20 @@ class UserOrderCoinCompletedController extends GetxController {
.map((coinModel) => coinModel.identifying!) .map((coinModel) => coinModel.identifying!)
.toList(); .toList();
List<IAPItem> items = await FlutterInappPurchase.instance.getProducts(productList); if (productList.isEmpty) return;
for (var item in items) {
_items.add(item);
}
_items = items; _iapLog('IAP productList: $productList');
// update(); try {
final response =
await InAppPurchase.instance.queryProductDetails(productList.toSet());
_items = response.productDetails;
_iapLog('IAP query error: ${response.error}');
_iapLog('IAP not found ids: ${response.notFoundIDs}');
_iapLog('IAP loaded items: ${_items.map((item) => item.id).toList()}');
} catch (error) {
_items = [];
_iapLog('IAP getProducts failed: $error');
}
} }
/// 支付订单 /// 支付订单
...@@ -145,8 +131,8 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -145,8 +131,8 @@ class UserOrderCoinCompletedController extends GetxController {
// 苹果支付 // 苹果支付
if (model.payType ==3){ if (model.payType ==3){
// 发起苹果支付 // 发起苹果支付
IAPItem targetItem = _items.firstWhere( ProductDetails targetItem = _items.firstWhere(
(item) => item.productId == model.goodsId, (item) => item.id == model.goodsId,
); );
_requestPurchase(targetItem); _requestPurchase(targetItem);
} }
...@@ -178,10 +164,19 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -178,10 +164,19 @@ class UserOrderCoinCompletedController extends GetxController {
} }
/// 苹果支付 /// 苹果支付
void _requestPurchase(IAPItem item) { void _requestPurchase(ProductDetails item) {
CustomToast.loading(); CustomToast.loading();
FlutterInappPurchase.instance try {
.requestPurchase(item.productId!); final purchaseParam = PurchaseParam(productDetails: item);
InAppPurchase.instance.buyConsumable(
purchaseParam: purchaseParam,
autoConsume: true,
);
} catch (error) {
CustomToast.dismiss();
_iapLog('IAP request purchase failed: $error');
Toast.show('内购发起失败,请稍后重试');
}
} }
/// 支付宝支付 /// 支付宝支付
...@@ -220,7 +215,7 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -220,7 +215,7 @@ class UserOrderCoinCompletedController extends GetxController {
/// 获取订单状态 /// 获取订单状态
void requestOrderStatus() async { void requestOrderStatus() async {
final result = await ShopAPI.orderStatus(orderNumber: model.ordersnum??'',receipt:_resultItem != null?_resultItem!.transactionReceipt.toString():''); final result = await ShopAPI.orderStatus(orderNumber: model.ordersnum??'',receipt:_resultItem != null?_resultItem!.verificationData.serverVerificationData.toString():'');
if (result.paySuccess == 1){ if (result.paySuccess == 1){
Toast.show('订单支付完成'); Toast.show('订单支付完成');
if(context.mounted){ if(context.mounted){
...@@ -239,7 +234,6 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -239,7 +234,6 @@ class UserOrderCoinCompletedController extends GetxController {
} }
StorageService.to.setObject(kFailOrder, temp); StorageService.to.setObject(kFailOrder, temp);
} }
FlutterInappPurchase.instance.finishTransactionIOS(_resultItem!.transactionId!);
} }
} }
else{ else{
...@@ -248,8 +242,8 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -248,8 +242,8 @@ class UserOrderCoinCompletedController extends GetxController {
// 保存未支付的订单 // 保存未支付的订单
Map<String,String> failOrder = { Map<String,String> failOrder = {
'orderNum':payOrderModel.ordersnum??'', 'orderNum':payOrderModel.ordersnum??'',
'transactionReceipt':_resultItem!.transactionReceipt.toString(), 'transactionReceipt':_resultItem!.verificationData.serverVerificationData.toString(),
'transactionId':_resultItem!.transactionId.toString() 'transactionId':_resultItem!.purchaseID.toString()
}; };
List<Map> failOrderList = []; List<Map> failOrderList = [];
failOrderList.add(failOrder); failOrderList.add(failOrder);
...@@ -259,25 +253,33 @@ class UserOrderCoinCompletedController extends GetxController { ...@@ -259,25 +253,33 @@ class UserOrderCoinCompletedController extends GetxController {
} }
///获取未完成的购买 void _iapLog(String message) {
Future _getPendingPurchase() async { Console.log(message);
List<PurchasedItem>? items = await FlutterInappPurchase.instance.getPurchaseHistory(); debugPrint(message);
for (var item in items!) {
_pendingPurchases.add(item);
} }
if(StorageService.to.getObject(kFailOrder) !=null){
List<Map<String,String>> failOrderList = StorageService.to.getObject(kFailOrder) as List<Map<String, String>>; Future<void> _listenToPurchaseUpdated(
for (var item in _pendingPurchases) { List<PurchaseDetails> purchaseDetailsList) async {
for (var element in failOrderList) { for (final purchaseDetails in purchaseDetailsList) {
if(element['transactionId'] == item.transactionId){ _iapLog(
requestOrderStatus(); 'IAP purchase update: ${purchaseDetails.productID}, ${purchaseDetails.status}, ${purchaseDetails.error}');
if (purchaseDetails.status == PurchaseStatus.pending) {
continue;
} }
CustomToast.dismiss();
if (purchaseDetails.status == PurchaseStatus.error) {
Toast.show(purchaseDetails.error?.message ?? '内购发生错误,请稍后重试');
} else if (purchaseDetails.status == PurchaseStatus.canceled) {
Toast.show('支付已取消');
} else if (purchaseDetails.status == PurchaseStatus.purchased ||
purchaseDetails.status == PurchaseStatus.restored) {
_resultItem = purchaseDetails;
requestOrderStatus();
} }
if (purchaseDetails.pendingCompletePurchase) {
await InAppPurchase.instance.completePurchase(purchaseDetails);
} }
} }
} }
} }
library user_order_coin_completed; library user_order_coin_completed;
import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_book/theme.dart'; import 'package:flutter_book/theme.dart';
import 'package:flutter_book/utils/index.dart'; import 'package:flutter_book/utils/index.dart';
import 'package:flutter_book/widgets/index.dart'; import 'package:flutter_book/widgets/index.dart';
import 'package:flutter_inapp_purchase/flutter_inapp_purchase.dart'; import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:fluwx/fluwx.dart'; import 'package:fluwx/fluwx.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
......
...@@ -6,7 +6,7 @@ packages: ...@@ -6,7 +6,7 @@ packages:
description: description:
name: archive name: archive
sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.6.1" version: "3.6.1"
args: args:
...@@ -14,7 +14,7 @@ packages: ...@@ -14,7 +14,7 @@ packages:
description: description:
name: args name: args
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.7.0" version: "2.7.0"
asn1lib: asn1lib:
...@@ -22,7 +22,7 @@ packages: ...@@ -22,7 +22,7 @@ packages:
description: description:
name: asn1lib name: asn1lib
sha256: "9a8f69025044eb466b9b60ef3bc3ac99b4dc6c158ae9c56d25eeccf5bc56d024" sha256: "9a8f69025044eb466b9b60ef3bc3ac99b4dc6c158ae9c56d25eeccf5bc56d024"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.6.5" version: "1.6.5"
async: async:
...@@ -30,7 +30,7 @@ packages: ...@@ -30,7 +30,7 @@ packages:
description: description:
name: async name: async
sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.13.1" version: "2.13.1"
audio_session: audio_session:
...@@ -38,7 +38,7 @@ packages: ...@@ -38,7 +38,7 @@ packages:
description: description:
name: audio_session name: audio_session
sha256: "2b7fff16a552486d078bfc09a8cde19f426dc6d6329262b684182597bec5b1ac" sha256: "2b7fff16a552486d078bfc09a8cde19f426dc6d6329262b684182597bec5b1ac"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.25" version: "0.1.25"
badges: badges:
...@@ -46,7 +46,7 @@ packages: ...@@ -46,7 +46,7 @@ packages:
description: description:
name: badges name: badges
sha256: cf1c88fb3777df69ccd630b80de5267f54efa4a39381b0404a7c03d56cb7c041 sha256: cf1c88fb3777df69ccd630b80de5267f54efa4a39381b0404a7c03d56cb7c041
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.2.0" version: "3.2.0"
boolean_selector: boolean_selector:
...@@ -54,7 +54,7 @@ packages: ...@@ -54,7 +54,7 @@ packages:
description: description:
name: boolean_selector name: boolean_selector
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.2" version: "2.1.2"
carousel_slider: carousel_slider:
...@@ -62,7 +62,7 @@ packages: ...@@ -62,7 +62,7 @@ packages:
description: description:
name: carousel_slider name: carousel_slider
sha256: febf4b0163e0242adc13d7a863b04965351f59e7dfea56675c7c2caa7bcd7476 sha256: febf4b0163e0242adc13d7a863b04965351f59e7dfea56675c7c2caa7bcd7476
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "5.1.2" version: "5.1.2"
characters: characters:
...@@ -70,7 +70,7 @@ packages: ...@@ -70,7 +70,7 @@ packages:
description: description:
name: characters name: characters
sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.1" version: "1.4.1"
clock: clock:
...@@ -78,23 +78,23 @@ packages: ...@@ -78,23 +78,23 @@ packages:
description: description:
name: clock name: clock
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.2" version: "1.1.2"
code_assets: code_assets:
dependency: transitive dependency: transitive
description: description:
name: code_assets name: code_assets
sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687" sha256: dad6bf6b9f4f378b0a69edbf42584d336efd1a9ce15deb1ba591cbb1b5ff440f
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0" version: "1.1.0"
collection: collection:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.19.1" version: "1.19.1"
connectivity_plus: connectivity_plus:
...@@ -102,7 +102,7 @@ packages: ...@@ -102,7 +102,7 @@ packages:
description: description:
name: connectivity_plus name: connectivity_plus
sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.2" version: "5.0.2"
connectivity_plus_platform_interface: connectivity_plus_platform_interface:
...@@ -110,7 +110,7 @@ packages: ...@@ -110,7 +110,7 @@ packages:
description: description:
name: connectivity_plus_platform_interface name: connectivity_plus_platform_interface
sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.4" version: "1.2.4"
convert: convert:
...@@ -118,7 +118,7 @@ packages: ...@@ -118,7 +118,7 @@ packages:
description: description:
name: convert name: convert
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.2" version: "3.1.2"
cross_file: cross_file:
...@@ -126,7 +126,7 @@ packages: ...@@ -126,7 +126,7 @@ packages:
description: description:
name: cross_file name: cross_file
sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937" sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.5+2" version: "0.3.5+2"
crypto: crypto:
...@@ -134,7 +134,7 @@ packages: ...@@ -134,7 +134,7 @@ packages:
description: description:
name: crypto name: crypto
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.7" version: "3.0.7"
cupertino_icons: cupertino_icons:
...@@ -142,23 +142,23 @@ packages: ...@@ -142,23 +142,23 @@ packages:
description: description:
name: cupertino_icons name: cupertino_icons
sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.9" version: "1.0.9"
dbus: dbus:
dependency: transitive dependency: transitive
description: description:
name: dbus name: dbus
sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 sha256: "792974a4007974fbc5c1b5433eb2330a9db3e368c3f906253af4c007d0f49a91"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.12" version: "0.7.13"
decimal: decimal:
dependency: "direct main" dependency: "direct main"
description: description:
name: decimal name: decimal
sha256: "24a261d5d5c87e86c7651c417a5dbdf8bcd7080dd592533910e8d0505a279f21" sha256: "24a261d5d5c87e86c7651c417a5dbdf8bcd7080dd592533910e8d0505a279f21"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.3" version: "2.3.3"
dio: dio:
...@@ -166,7 +166,7 @@ packages: ...@@ -166,7 +166,7 @@ packages:
description: description:
name: dio name: dio
sha256: aff32c08f92787a557dd5c0145ac91536481831a01b4648136373cddb0e64f8c sha256: aff32c08f92787a557dd5c0145ac91536481831a01b4648136373cddb0e64f8c
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "5.9.2" version: "5.9.2"
dio_web_adapter: dio_web_adapter:
...@@ -174,7 +174,7 @@ packages: ...@@ -174,7 +174,7 @@ packages:
description: description:
name: dio_web_adapter name: dio_web_adapter
sha256: "2f9e64323a7c3c7ef69567d5c800424a11f8337b8b228bad02524c9fb3c1f340" sha256: "2f9e64323a7c3c7ef69567d5c800424a11f8337b8b228bad02524c9fb3c1f340"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.2" version: "2.1.2"
easy_refresh: easy_refresh:
...@@ -182,7 +182,7 @@ packages: ...@@ -182,7 +182,7 @@ packages:
description: description:
name: easy_refresh name: easy_refresh
sha256: "73eb6119f7275270cedc764fa22e724b62a2f110265945699c9bc3290681ee70" sha256: "73eb6119f7275270cedc764fa22e724b62a2f110265945699c9bc3290681ee70"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.5.0" version: "3.5.0"
encrypt: encrypt:
...@@ -190,7 +190,7 @@ packages: ...@@ -190,7 +190,7 @@ packages:
description: description:
name: encrypt name: encrypt
sha256: "62d9aa4670cc2a8798bab89b39fc71b6dfbacf615de6cf5001fb39f7e4a996a2" sha256: "62d9aa4670cc2a8798bab89b39fc71b6dfbacf615de6cf5001fb39f7e4a996a2"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.3" version: "5.0.3"
extended_image: extended_image:
...@@ -198,7 +198,7 @@ packages: ...@@ -198,7 +198,7 @@ packages:
description: description:
name: extended_image name: extended_image
sha256: "69d4299043334ecece679996e47d0b0891cd8c29d8da0034868443506f1d9a78" sha256: "69d4299043334ecece679996e47d0b0891cd8c29d8da0034868443506f1d9a78"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "8.3.1" version: "8.3.1"
extended_image_library: extended_image_library:
...@@ -206,7 +206,7 @@ packages: ...@@ -206,7 +206,7 @@ packages:
description: description:
name: extended_image_library name: extended_image_library
sha256: e61dafd94400fff6ef7ed1523d445ff3af137f198f3228e4a3107bc5b4bec5d1 sha256: e61dafd94400fff6ef7ed1523d445ff3af137f198f3228e4a3107bc5b4bec5d1
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.6" version: "4.0.6"
fake_async: fake_async:
...@@ -214,7 +214,7 @@ packages: ...@@ -214,7 +214,7 @@ packages:
description: description:
name: fake_async name: fake_async
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.3" version: "1.3.3"
ffi: ffi:
...@@ -222,7 +222,7 @@ packages: ...@@ -222,7 +222,7 @@ packages:
description: description:
name: ffi name: ffi
sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.2.0"
file: file:
...@@ -230,7 +230,7 @@ packages: ...@@ -230,7 +230,7 @@ packages:
description: description:
name: file name: file
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "7.0.1" version: "7.0.1"
file_selector_linux: file_selector_linux:
...@@ -238,7 +238,7 @@ packages: ...@@ -238,7 +238,7 @@ packages:
description: description:
name: file_selector_linux name: file_selector_linux
sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0" sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.9.4" version: "0.9.4"
file_selector_macos: file_selector_macos:
...@@ -246,7 +246,7 @@ packages: ...@@ -246,7 +246,7 @@ packages:
description: description:
name: file_selector_macos name: file_selector_macos
sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a" sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.9.5" version: "0.9.5"
file_selector_platform_interface: file_selector_platform_interface:
...@@ -254,7 +254,7 @@ packages: ...@@ -254,7 +254,7 @@ packages:
description: description:
name: file_selector_platform_interface name: file_selector_platform_interface
sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.7.0" version: "2.7.0"
file_selector_windows: file_selector_windows:
...@@ -262,7 +262,7 @@ packages: ...@@ -262,7 +262,7 @@ packages:
description: description:
name: file_selector_windows name: file_selector_windows
sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd" sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.9.3+5" version: "0.9.3+5"
fixnum: fixnum:
...@@ -270,7 +270,7 @@ packages: ...@@ -270,7 +270,7 @@ packages:
description: description:
name: fixnum name: fixnum
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.1.1"
flutter: flutter:
...@@ -283,7 +283,7 @@ packages: ...@@ -283,7 +283,7 @@ packages:
description: description:
name: flutter_app_update name: flutter_app_update
sha256: cb373a9d011c7c7d7e3d027e71d3fa3c4049d41e4be7364124bd93a95fe311a7 sha256: cb373a9d011c7c7d7e3d027e71d3fa3c4049d41e4be7364124bd93a95fe311a7
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.2.3" version: "3.2.3"
flutter_cache_manager: flutter_cache_manager:
...@@ -291,7 +291,7 @@ packages: ...@@ -291,7 +291,7 @@ packages:
description: description:
name: flutter_cache_manager name: flutter_cache_manager
sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.4.1" version: "3.4.1"
flutter_easyloading: flutter_easyloading:
...@@ -299,23 +299,15 @@ packages: ...@@ -299,23 +299,15 @@ packages:
description: description:
name: flutter_easyloading name: flutter_easyloading
sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.5" version: "3.0.5"
flutter_inapp_purchase:
dependency: "direct main"
description:
name: flutter_inapp_purchase
sha256: "748757271506a3cc7745aa501019c7ce8051d8738b8a36aee12a617d8e9df8d3"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.6.2"
flutter_inappwebview: flutter_inappwebview:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_inappwebview name: flutter_inappwebview
sha256: "80092d13d3e29b6227e25b67973c67c7210bd5e35c4b747ca908e31eb71a46d5" sha256: "80092d13d3e29b6227e25b67973c67c7210bd5e35c4b747ca908e31eb71a46d5"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.5" version: "6.1.5"
flutter_inappwebview_android: flutter_inappwebview_android:
...@@ -323,7 +315,7 @@ packages: ...@@ -323,7 +315,7 @@ packages:
description: description:
name: flutter_inappwebview_android name: flutter_inappwebview_android
sha256: "62557c15a5c2db5d195cb3892aab74fcaec266d7b86d59a6f0027abd672cddba" sha256: "62557c15a5c2db5d195cb3892aab74fcaec266d7b86d59a6f0027abd672cddba"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.3" version: "1.1.3"
flutter_inappwebview_internal_annotations: flutter_inappwebview_internal_annotations:
...@@ -331,7 +323,7 @@ packages: ...@@ -331,7 +323,7 @@ packages:
description: description:
name: flutter_inappwebview_internal_annotations name: flutter_inappwebview_internal_annotations
sha256: e30fba942e3debea7b7e6cdd4f0f59ce89dd403a9865193e3221293b6d1544c6 sha256: e30fba942e3debea7b7e6cdd4f0f59ce89dd403a9865193e3221293b6d1544c6
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0"
flutter_inappwebview_ios: flutter_inappwebview_ios:
...@@ -339,7 +331,7 @@ packages: ...@@ -339,7 +331,7 @@ packages:
description: description:
name: flutter_inappwebview_ios name: flutter_inappwebview_ios
sha256: "5818cf9b26cf0cbb0f62ff50772217d41ea8d3d9cc00279c45f8aabaa1b4025d" sha256: "5818cf9b26cf0cbb0f62ff50772217d41ea8d3d9cc00279c45f8aabaa1b4025d"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.2" version: "1.1.2"
flutter_inappwebview_macos: flutter_inappwebview_macos:
...@@ -347,7 +339,7 @@ packages: ...@@ -347,7 +339,7 @@ packages:
description: description:
name: flutter_inappwebview_macos name: flutter_inappwebview_macos
sha256: c1fbb86af1a3738e3541364d7d1866315ffb0468a1a77e34198c9be571287da1 sha256: c1fbb86af1a3738e3541364d7d1866315ffb0468a1a77e34198c9be571287da1
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.2" version: "1.1.2"
flutter_inappwebview_platform_interface: flutter_inappwebview_platform_interface:
...@@ -355,7 +347,7 @@ packages: ...@@ -355,7 +347,7 @@ packages:
description: description:
name: flutter_inappwebview_platform_interface name: flutter_inappwebview_platform_interface
sha256: cf5323e194096b6ede7a1ca808c3e0a078e4b33cc3f6338977d75b4024ba2500 sha256: cf5323e194096b6ede7a1ca808c3e0a078e4b33cc3f6338977d75b4024ba2500
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.0+1" version: "1.3.0+1"
flutter_inappwebview_web: flutter_inappwebview_web:
...@@ -363,7 +355,7 @@ packages: ...@@ -363,7 +355,7 @@ packages:
description: description:
name: flutter_inappwebview_web name: flutter_inappwebview_web
sha256: "55f89c83b0a0d3b7893306b3bb545ba4770a4df018204917148ebb42dc14a598" sha256: "55f89c83b0a0d3b7893306b3bb545ba4770a4df018204917148ebb42dc14a598"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.2" version: "1.1.2"
flutter_inappwebview_windows: flutter_inappwebview_windows:
...@@ -371,7 +363,7 @@ packages: ...@@ -371,7 +363,7 @@ packages:
description: description:
name: flutter_inappwebview_windows name: flutter_inappwebview_windows
sha256: "8b4d3a46078a2cdc636c4a3d10d10f2a16882f6be607962dbfff8874d1642055" sha256: "8b4d3a46078a2cdc636c4a3d10d10f2a16882f6be607962dbfff8874d1642055"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.0" version: "0.6.0"
flutter_lints: flutter_lints:
...@@ -379,7 +371,7 @@ packages: ...@@ -379,7 +371,7 @@ packages:
description: description:
name: flutter_lints name: flutter_lints
sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.3" version: "2.0.3"
flutter_localizations: flutter_localizations:
...@@ -392,7 +384,7 @@ packages: ...@@ -392,7 +384,7 @@ packages:
description: description:
name: flutter_oss_aliyun name: flutter_oss_aliyun
sha256: "8280c1e8dfb792dec6449d1e6052e1d3492b3b3a1dfee456cc41d3f31b4cbc26" sha256: "8280c1e8dfb792dec6449d1e6052e1d3492b3b3a1dfee456cc41d3f31b4cbc26"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "6.4.2" version: "6.4.2"
flutter_plugin_android_lifecycle: flutter_plugin_android_lifecycle:
...@@ -400,7 +392,7 @@ packages: ...@@ -400,7 +392,7 @@ packages:
description: description:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
sha256: "38d1c268de9097ff59cf0e844ac38759fc78f76836d37edad06fa21e182055a0" sha256: "38d1c268de9097ff59cf0e844ac38759fc78f76836d37edad06fa21e182055a0"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.34" version: "2.0.34"
flutter_screenutil: flutter_screenutil:
...@@ -408,7 +400,7 @@ packages: ...@@ -408,7 +400,7 @@ packages:
description: description:
name: flutter_screenutil name: flutter_screenutil
sha256: "8239210dd68bee6b0577aa4a090890342d04a136ce1c81f98ee513fc0ce891de" sha256: "8239210dd68bee6b0577aa4a090890342d04a136ce1c81f98ee513fc0ce891de"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "5.9.3" version: "5.9.3"
flutter_slidable: flutter_slidable:
...@@ -416,7 +408,7 @@ packages: ...@@ -416,7 +408,7 @@ packages:
description: description:
name: flutter_slidable name: flutter_slidable
sha256: a857de7ea701f276fd6a6c4c67ae885b60729a3449e42766bb0e655171042801 sha256: a857de7ea701f276fd6a6c4c67ae885b60729a3449e42766bb0e655171042801
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.2" version: "3.1.2"
flutter_sound: flutter_sound:
...@@ -424,7 +416,7 @@ packages: ...@@ -424,7 +416,7 @@ packages:
description: description:
name: flutter_sound name: flutter_sound
sha256: "77f0252a2f08449d621f68b8fd617c3b391e7f862eaa94bb32f53cc2dc3bbe85" sha256: "77f0252a2f08449d621f68b8fd617c3b391e7f862eaa94bb32f53cc2dc3bbe85"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "9.30.0" version: "9.30.0"
flutter_sound_platform_interface: flutter_sound_platform_interface:
...@@ -432,7 +424,7 @@ packages: ...@@ -432,7 +424,7 @@ packages:
description: description:
name: flutter_sound_platform_interface name: flutter_sound_platform_interface
sha256: "5ffc858fd96c6fa277e3bb25eecc100849d75a8792b1f9674d1ba817aea9f861" sha256: "5ffc858fd96c6fa277e3bb25eecc100849d75a8792b1f9674d1ba817aea9f861"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "9.30.0" version: "9.30.0"
flutter_sound_web: flutter_sound_web:
...@@ -440,7 +432,7 @@ packages: ...@@ -440,7 +432,7 @@ packages:
description: description:
name: flutter_sound_web name: flutter_sound_web
sha256: "3af46f45f44768c01c83ba260855c956d0963673664947926d942aa6fbf6f6fb" sha256: "3af46f45f44768c01c83ba260855c956d0963673664947926d942aa6fbf6f6fb"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "9.30.0" version: "9.30.0"
flutter_spinkit: flutter_spinkit:
...@@ -448,7 +440,7 @@ packages: ...@@ -448,7 +440,7 @@ packages:
description: description:
name: flutter_spinkit name: flutter_spinkit
sha256: "77850df57c00dc218bfe96071d576a8babec24cf58b2ed121c83cca4a2fdce7f" sha256: "77850df57c00dc218bfe96071d576a8babec24cf58b2ed121c83cca4a2fdce7f"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "5.2.2" version: "5.2.2"
flutter_star: flutter_star:
...@@ -456,7 +448,7 @@ packages: ...@@ -456,7 +448,7 @@ packages:
description: description:
name: flutter_star name: flutter_star
sha256: "7dc10b8b3667ace2aa575a37ea0c00558a7514019cfe7e76322573d85b72a472" sha256: "7dc10b8b3667ace2aa575a37ea0c00558a7514019cfe7e76322573d85b72a472"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
flutter_test: flutter_test:
...@@ -469,7 +461,7 @@ packages: ...@@ -469,7 +461,7 @@ packages:
description: description:
name: flutter_tts name: flutter_tts
sha256: cbb3fd43b946e62398560235469e6113e4fe26c40eab1b7cb5e7c417503fb3a8 sha256: cbb3fd43b946e62398560235469e6113e4fe26c40eab1b7cb5e7c417503fb3a8
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.8.5" version: "3.8.5"
flutter_web_plugins: flutter_web_plugins:
...@@ -482,7 +474,7 @@ packages: ...@@ -482,7 +474,7 @@ packages:
description: description:
name: fluwx name: fluwx
sha256: d25c26a12a1fa280833105869ea255a5877695e03dc1190f0d2c027a7c989ef3 sha256: d25c26a12a1fa280833105869ea255a5877695e03dc1190f0d2c027a7c989ef3
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "4.6.3" version: "4.6.3"
get: get:
...@@ -490,39 +482,31 @@ packages: ...@@ -490,39 +482,31 @@ packages:
description: description:
name: get name: get
sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a" sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "4.7.3" version: "4.7.3"
glob:
dependency: transitive
description:
name: glob
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.3"
go_router: go_router:
dependency: "direct main" dependency: "direct main"
description: description:
name: go_router name: go_router
sha256: e1a30a66d734f9e498b1b6522d6a75ded28242bad2359a9158df38a1c30bcf1f sha256: e1a30a66d734f9e498b1b6522d6a75ded28242bad2359a9158df38a1c30bcf1f
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "10.2.0" version: "10.2.0"
hooks: hooks:
dependency: transitive dependency: transitive
description: description:
name: hooks name: hooks
sha256: "025f060e86d2d4c3c47b56e33caf7f93bf9283340f26d23424ebcfccf34f621e" sha256: a41af4e8fc687cd6d33de9751eb936c8c0204ebe2bcb6c15ecf707504bf47f31
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.3" version: "2.0.0"
http: http:
dependency: transitive dependency: transitive
description: description:
name: http name: http
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.6.0" version: "1.6.0"
http_client_helper: http_client_helper:
...@@ -530,7 +514,7 @@ packages: ...@@ -530,7 +514,7 @@ packages:
description: description:
name: http_client_helper name: http_client_helper
sha256: "8a9127650734da86b5c73760de2b404494c968a3fd55602045ffec789dac3cb1" sha256: "8a9127650734da86b5c73760de2b404494c968a3fd55602045ffec789dac3cb1"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.0" version: "3.0.0"
http_parser: http_parser:
...@@ -538,7 +522,7 @@ packages: ...@@ -538,7 +522,7 @@ packages:
description: description:
name: http_parser name: http_parser
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "4.1.2" version: "4.1.2"
image_picker: image_picker:
...@@ -546,7 +530,7 @@ packages: ...@@ -546,7 +530,7 @@ packages:
description: description:
name: image_picker name: image_picker
sha256: "91c025426c2881c551100bce834e201c835a170151545f58d17da5180ca7d9ac" sha256: "91c025426c2881c551100bce834e201c835a170151545f58d17da5180ca7d9ac"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.2" version: "1.2.2"
image_picker_android: image_picker_android:
...@@ -554,7 +538,7 @@ packages: ...@@ -554,7 +538,7 @@ packages:
description: description:
name: image_picker_android name: image_picker_android
sha256: d5b3e1774af29c9ab00103afb0d4614070f924d2e0057ac867ec98800114793f sha256: d5b3e1774af29c9ab00103afb0d4614070f924d2e0057ac867ec98800114793f
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.13+17" version: "0.8.13+17"
image_picker_for_web: image_picker_for_web:
...@@ -562,7 +546,7 @@ packages: ...@@ -562,7 +546,7 @@ packages:
description: description:
name: image_picker_for_web name: image_picker_for_web
sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214" sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.1" version: "3.1.1"
image_picker_ios: image_picker_ios:
...@@ -570,7 +554,7 @@ packages: ...@@ -570,7 +554,7 @@ packages:
description: description:
name: image_picker_ios name: image_picker_ios
sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588 sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.13+6" version: "0.8.13+6"
image_picker_linux: image_picker_linux:
...@@ -578,7 +562,7 @@ packages: ...@@ -578,7 +562,7 @@ packages:
description: description:
name: image_picker_linux name: image_picker_linux
sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.2" version: "0.2.2"
image_picker_macos: image_picker_macos:
...@@ -586,7 +570,7 @@ packages: ...@@ -586,7 +570,7 @@ packages:
description: description:
name: image_picker_macos name: image_picker_macos
sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91" sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.2+1" version: "0.2.2+1"
image_picker_platform_interface: image_picker_platform_interface:
...@@ -594,7 +578,7 @@ packages: ...@@ -594,7 +578,7 @@ packages:
description: description:
name: image_picker_platform_interface name: image_picker_platform_interface
sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c" sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.11.1" version: "2.11.1"
image_picker_windows: image_picker_windows:
...@@ -602,15 +586,47 @@ packages: ...@@ -602,15 +586,47 @@ packages:
description: description:
name: image_picker_windows name: image_picker_windows
sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.2" version: "0.2.2"
in_app_purchase:
dependency: "direct main"
description:
name: in_app_purchase
sha256: "5cddd7f463f3bddb1d37a72b95066e840d5822d66291331d7f8f05ce32c24b6c"
url: "https://pub.dev"
source: hosted
version: "3.2.3"
in_app_purchase_android:
dependency: transitive
description:
name: in_app_purchase_android
sha256: "518b48a385dfc1aa278080472969c6cee0c3d41ef8b9511b0071dd015473ecf1"
url: "https://pub.dev"
source: hosted
version: "0.4.0+11"
in_app_purchase_platform_interface:
dependency: transitive
description:
name: in_app_purchase_platform_interface
sha256: "1d353d38251da5b9fea6635c0ebfc6bb17a2d28d0e86ea5e083bf64244f1fb4c"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
in_app_purchase_storekit:
dependency: transitive
description:
name: in_app_purchase_storekit
sha256: f2cf3a6c5233f8f43b4bb148e658be881441f33c3d285fe6ae8348c4994e1a75
url: "https://pub.dev"
source: hosted
version: "0.4.9"
intl: intl:
dependency: "direct main" dependency: "direct main"
description: description:
name: intl name: intl
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.20.2" version: "0.20.2"
jni: jni:
...@@ -618,7 +634,7 @@ packages: ...@@ -618,7 +634,7 @@ packages:
description: description:
name: jni name: jni
sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0" version: "1.0.0"
jni_flutter: jni_flutter:
...@@ -626,7 +642,7 @@ packages: ...@@ -626,7 +642,7 @@ packages:
description: description:
name: jni_flutter name: jni_flutter
sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6" sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.1" version: "1.0.1"
js: js:
...@@ -634,15 +650,23 @@ packages: ...@@ -634,15 +650,23 @@ packages:
description: description:
name: js name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.7" version: "0.6.7"
json_annotation:
dependency: transitive
description:
name: json_annotation
sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80"
url: "https://pub.dev"
source: hosted
version: "4.12.0"
just_audio: just_audio:
dependency: "direct main" dependency: "direct main"
description: description:
name: just_audio name: just_audio
sha256: f978d5b4ccea08f267dae0232ec5405c1b05d3f3cd63f82097ea46c015d5c09e sha256: f978d5b4ccea08f267dae0232ec5405c1b05d3f3cd63f82097ea46c015d5c09e
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.9.46" version: "0.9.46"
just_audio_platform_interface: just_audio_platform_interface:
...@@ -650,7 +674,7 @@ packages: ...@@ -650,7 +674,7 @@ packages:
description: description:
name: just_audio_platform_interface name: just_audio_platform_interface
sha256: "2532c8d6702528824445921c5ff10548b518b13f808c2e34c2fd54793b999a6a" sha256: "2532c8d6702528824445921c5ff10548b518b13f808c2e34c2fd54793b999a6a"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "4.6.0" version: "4.6.0"
just_audio_web: just_audio_web:
...@@ -658,7 +682,7 @@ packages: ...@@ -658,7 +682,7 @@ packages:
description: description:
name: just_audio_web name: just_audio_web
sha256: "6ba8a2a7e87d57d32f0f7b42856ade3d6a9fbe0f1a11fabae0a4f00bb73f0663" sha256: "6ba8a2a7e87d57d32f0f7b42856ade3d6a9fbe0f1a11fabae0a4f00bb73f0663"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.4.16" version: "0.4.16"
leak_tracker: leak_tracker:
...@@ -666,7 +690,7 @@ packages: ...@@ -666,7 +690,7 @@ packages:
description: description:
name: leak_tracker name: leak_tracker
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "11.0.2" version: "11.0.2"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
...@@ -674,7 +698,7 @@ packages: ...@@ -674,7 +698,7 @@ packages:
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.10" version: "3.0.10"
leak_tracker_testing: leak_tracker_testing:
...@@ -682,7 +706,7 @@ packages: ...@@ -682,7 +706,7 @@ packages:
description: description:
name: leak_tracker_testing name: leak_tracker_testing
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.0.2"
lints: lints:
...@@ -690,7 +714,7 @@ packages: ...@@ -690,7 +714,7 @@ packages:
description: description:
name: lints name: lints
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.1"
logger: logger:
...@@ -698,7 +722,7 @@ packages: ...@@ -698,7 +722,7 @@ packages:
description: description:
name: logger name: logger
sha256: "25aee487596a6257655a1e091ec2ae66bc30e7af663592cc3a27e6591e05035c" sha256: "25aee487596a6257655a1e091ec2ae66bc30e7af663592cc3a27e6591e05035c"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.7.0" version: "2.7.0"
logging: logging:
...@@ -706,7 +730,7 @@ packages: ...@@ -706,7 +730,7 @@ packages:
description: description:
name: logging name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0"
matcher: matcher:
...@@ -714,7 +738,7 @@ packages: ...@@ -714,7 +738,7 @@ packages:
description: description:
name: matcher name: matcher
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.19" version: "0.12.19"
material_color_utilities: material_color_utilities:
...@@ -722,7 +746,7 @@ packages: ...@@ -722,7 +746,7 @@ packages:
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.13.0" version: "0.13.0"
meta: meta:
...@@ -730,7 +754,7 @@ packages: ...@@ -730,7 +754,7 @@ packages:
description: description:
name: meta name: meta
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.0" version: "1.17.0"
mime: mime:
...@@ -738,39 +762,31 @@ packages: ...@@ -738,39 +762,31 @@ packages:
description: description:
name: mime name: mime
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.6" version: "1.0.6"
native_toolchain_c:
dependency: transitive
description:
name: native_toolchain_c
sha256: "6ba77bb18063eebe9de401f5e6437e95e1438af0a87a3a39084fbd37c90df572"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.17.6"
nm: nm:
dependency: transitive dependency: transitive
description: description:
name: nm name: nm
sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.0" version: "0.5.0"
objective_c: objective_c:
dependency: transitive dependency: transitive
description: description:
name: objective_c name: objective_c
sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52" sha256: "6cb691c686fa2838c6deb34980d426145c2a5d537491cb83d463c33cdbc726ed"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "9.3.0" version: "9.4.1"
oktoast: oktoast:
dependency: "direct main" dependency: "direct main"
description: description:
name: oktoast name: oktoast
sha256: f1366c5c793ddfb8f55bc6fc3e45db43c45debf173b765fb4c5ec096cbdeb84a sha256: f1366c5c793ddfb8f55bc6fc3e45db43c45debf173b765fb4c5ec096cbdeb84a
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.4.0" version: "3.4.0"
package_config: package_config:
...@@ -778,7 +794,7 @@ packages: ...@@ -778,7 +794,7 @@ packages:
description: description:
name: package_config name: package_config
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.2.0"
package_info_plus: package_info_plus:
...@@ -786,7 +802,7 @@ packages: ...@@ -786,7 +802,7 @@ packages:
description: description:
name: package_info_plus name: package_info_plus
sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "4.2.0" version: "4.2.0"
package_info_plus_platform_interface: package_info_plus_platform_interface:
...@@ -794,7 +810,7 @@ packages: ...@@ -794,7 +810,7 @@ packages:
description: description:
name: package_info_plus_platform_interface name: package_info_plus_platform_interface
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "2.0.1"
path: path:
...@@ -802,7 +818,7 @@ packages: ...@@ -802,7 +818,7 @@ packages:
description: description:
name: path name: path
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.9.1"
path_drawing: path_drawing:
...@@ -810,7 +826,7 @@ packages: ...@@ -810,7 +826,7 @@ packages:
description: description:
name: path_drawing name: path_drawing
sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.1" version: "1.0.1"
path_parsing: path_parsing:
...@@ -818,7 +834,7 @@ packages: ...@@ -818,7 +834,7 @@ packages:
description: description:
name: path_parsing name: path_parsing
sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0"
path_provider: path_provider:
...@@ -826,7 +842,7 @@ packages: ...@@ -826,7 +842,7 @@ packages:
description: description:
name: path_provider name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.5" version: "2.1.5"
path_provider_android: path_provider_android:
...@@ -834,7 +850,7 @@ packages: ...@@ -834,7 +850,7 @@ packages:
description: description:
name: path_provider_android name: path_provider_android
sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.1" version: "2.3.1"
path_provider_foundation: path_provider_foundation:
...@@ -842,7 +858,7 @@ packages: ...@@ -842,7 +858,7 @@ packages:
description: description:
name: path_provider_foundation name: path_provider_foundation
sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.0" version: "2.6.0"
path_provider_linux: path_provider_linux:
...@@ -850,7 +866,7 @@ packages: ...@@ -850,7 +866,7 @@ packages:
description: description:
name: path_provider_linux name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.1" version: "2.2.1"
path_provider_platform_interface: path_provider_platform_interface:
...@@ -858,7 +874,7 @@ packages: ...@@ -858,7 +874,7 @@ packages:
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.2" version: "2.1.2"
path_provider_windows: path_provider_windows:
...@@ -866,7 +882,7 @@ packages: ...@@ -866,7 +882,7 @@ packages:
description: description:
name: path_provider_windows name: path_provider_windows
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.0" version: "2.3.0"
permission_handler: permission_handler:
...@@ -874,7 +890,7 @@ packages: ...@@ -874,7 +890,7 @@ packages:
description: description:
name: permission_handler name: permission_handler
sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1 sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "12.0.1" version: "12.0.1"
permission_handler_android: permission_handler_android:
...@@ -882,7 +898,7 @@ packages: ...@@ -882,7 +898,7 @@ packages:
description: description:
name: permission_handler_android name: permission_handler_android
sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6" sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "13.0.1" version: "13.0.1"
permission_handler_apple: permission_handler_apple:
...@@ -890,7 +906,7 @@ packages: ...@@ -890,7 +906,7 @@ packages:
description: description:
name: permission_handler_apple name: permission_handler_apple
sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023 sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "9.4.7" version: "9.4.7"
permission_handler_html: permission_handler_html:
...@@ -898,7 +914,7 @@ packages: ...@@ -898,7 +914,7 @@ packages:
description: description:
name: permission_handler_html name: permission_handler_html
sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.3+5" version: "0.1.3+5"
permission_handler_platform_interface: permission_handler_platform_interface:
...@@ -906,7 +922,7 @@ packages: ...@@ -906,7 +922,7 @@ packages:
description: description:
name: permission_handler_platform_interface name: permission_handler_platform_interface
sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878 sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "4.3.0" version: "4.3.0"
permission_handler_windows: permission_handler_windows:
...@@ -914,7 +930,7 @@ packages: ...@@ -914,7 +930,7 @@ packages:
description: description:
name: permission_handler_windows name: permission_handler_windows
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.1" version: "0.2.1"
petitparser: petitparser:
...@@ -922,7 +938,7 @@ packages: ...@@ -922,7 +938,7 @@ packages:
description: description:
name: petitparser name: petitparser
sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675" sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "7.0.2" version: "7.0.2"
platform: platform:
...@@ -930,7 +946,7 @@ packages: ...@@ -930,7 +946,7 @@ packages:
description: description:
name: platform name: platform
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.6" version: "3.1.6"
plugin_platform_interface: plugin_platform_interface:
...@@ -938,7 +954,7 @@ packages: ...@@ -938,7 +954,7 @@ packages:
description: description:
name: plugin_platform_interface name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.8" version: "2.1.8"
pointycastle: pointycastle:
...@@ -946,7 +962,7 @@ packages: ...@@ -946,7 +962,7 @@ packages:
description: description:
name: pointycastle name: pointycastle
sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe" sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.9.1" version: "3.9.1"
pub_semver: pub_semver:
...@@ -954,7 +970,7 @@ packages: ...@@ -954,7 +970,7 @@ packages:
description: description:
name: pub_semver name: pub_semver
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.2.0"
rational: rational:
...@@ -962,7 +978,7 @@ packages: ...@@ -962,7 +978,7 @@ packages:
description: description:
name: rational name: rational
sha256: cb808fb6f1a839e6fc5f7d8cb3b0a10e1db48b3be102de73938c627f0b636336 sha256: cb808fb6f1a839e6fc5f7d8cb3b0a10e1db48b3be102de73938c627f0b636336
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.3" version: "2.2.3"
record_use: record_use:
...@@ -970,7 +986,7 @@ packages: ...@@ -970,7 +986,7 @@ packages:
description: description:
name: record_use name: record_use
sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed" sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.0" version: "0.6.0"
rxdart: rxdart:
...@@ -978,7 +994,7 @@ packages: ...@@ -978,7 +994,7 @@ packages:
description: description:
name: rxdart name: rxdart
sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.28.0" version: "0.28.0"
shared_preferences: shared_preferences:
...@@ -986,7 +1002,7 @@ packages: ...@@ -986,7 +1002,7 @@ packages:
description: description:
name: shared_preferences name: shared_preferences
sha256: c3025c5534b01739267eb7d76959bbc25a6d10f6988e1c2a3036940133dd10bf sha256: c3025c5534b01739267eb7d76959bbc25a6d10f6988e1c2a3036940133dd10bf
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.5" version: "2.5.5"
shared_preferences_android: shared_preferences_android:
...@@ -994,7 +1010,7 @@ packages: ...@@ -994,7 +1010,7 @@ packages:
description: description:
name: shared_preferences_android name: shared_preferences_android
sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53 sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.23" version: "2.4.23"
shared_preferences_foundation: shared_preferences_foundation:
...@@ -1002,7 +1018,7 @@ packages: ...@@ -1002,7 +1018,7 @@ packages:
description: description:
name: shared_preferences_foundation name: shared_preferences_foundation
sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f" sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.6" version: "2.5.6"
shared_preferences_linux: shared_preferences_linux:
...@@ -1010,7 +1026,7 @@ packages: ...@@ -1010,7 +1026,7 @@ packages:
description: description:
name: shared_preferences_linux name: shared_preferences_linux
sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.1" version: "2.4.1"
shared_preferences_platform_interface: shared_preferences_platform_interface:
...@@ -1018,7 +1034,7 @@ packages: ...@@ -1018,7 +1034,7 @@ packages:
description: description:
name: shared_preferences_platform_interface name: shared_preferences_platform_interface
sha256: "649dc798a33931919ea356c4305c2d1f81619ea6e92244070b520187b5140ef9" sha256: "649dc798a33931919ea356c4305c2d1f81619ea6e92244070b520187b5140ef9"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2" version: "2.4.2"
shared_preferences_web: shared_preferences_web:
...@@ -1026,7 +1042,7 @@ packages: ...@@ -1026,7 +1042,7 @@ packages:
description: description:
name: shared_preferences_web name: shared_preferences_web
sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.3" version: "2.4.3"
shared_preferences_windows: shared_preferences_windows:
...@@ -1034,7 +1050,7 @@ packages: ...@@ -1034,7 +1050,7 @@ packages:
description: description:
name: shared_preferences_windows name: shared_preferences_windows
sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.1" version: "2.4.1"
sky_engine: sky_engine:
...@@ -1047,7 +1063,7 @@ packages: ...@@ -1047,7 +1063,7 @@ packages:
description: description:
name: source_span name: source_span
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.10.2" version: "1.10.2"
sqflite: sqflite:
...@@ -1055,7 +1071,7 @@ packages: ...@@ -1055,7 +1071,7 @@ packages:
description: description:
name: sqflite name: sqflite
sha256: "564cfed0746fe53140c23b70b308e045c3b31f17778f2f326ccb7d804ea0250a" sha256: "564cfed0746fe53140c23b70b308e045c3b31f17778f2f326ccb7d804ea0250a"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2+1" version: "2.4.2+1"
sqflite_android: sqflite_android:
...@@ -1063,23 +1079,23 @@ packages: ...@@ -1063,23 +1079,23 @@ packages:
description: description:
name: sqflite_android name: sqflite_android
sha256: "881e28efdcc9950fd8e9bb42713dcf1103e62a2e7168f23c9338d82db13dec40" sha256: "881e28efdcc9950fd8e9bb42713dcf1103e62a2e7168f23c9338d82db13dec40"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2+3" version: "2.4.2+3"
sqflite_common: sqflite_common:
dependency: transitive dependency: transitive
description: description:
name: sqflite_common name: sqflite_common
sha256: f8a08a13fb8f0f8c590df89d745000bed44a673ed94bac846739e1a016875c21 sha256: "1581ffbf7a0e333b380d6a30737d78516b826cb35beb7fb0bf8a3ea0c678b465"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.7" version: "2.5.8"
sqflite_darwin: sqflite_darwin:
dependency: transitive dependency: transitive
description: description:
name: sqflite_darwin name: sqflite_darwin
sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2" version: "2.4.2"
sqflite_platform_interface: sqflite_platform_interface:
...@@ -1087,7 +1103,7 @@ packages: ...@@ -1087,7 +1103,7 @@ packages:
description: description:
name: sqflite_platform_interface name: sqflite_platform_interface
sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.0" version: "2.4.0"
stack_trace: stack_trace:
...@@ -1095,7 +1111,7 @@ packages: ...@@ -1095,7 +1111,7 @@ packages:
description: description:
name: stack_trace name: stack_trace
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.12.1" version: "1.12.1"
stream_channel: stream_channel:
...@@ -1103,7 +1119,7 @@ packages: ...@@ -1103,7 +1119,7 @@ packages:
description: description:
name: stream_channel name: stream_channel
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
string_scanner: string_scanner:
...@@ -1111,7 +1127,7 @@ packages: ...@@ -1111,7 +1127,7 @@ packages:
description: description:
name: string_scanner name: string_scanner
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.1" version: "1.4.1"
synchronized: synchronized:
...@@ -1119,7 +1135,7 @@ packages: ...@@ -1119,7 +1135,7 @@ packages:
description: description:
name: synchronized name: synchronized
sha256: "63896c27e81b28f8cb4e69ead0d3e8f03f1d1e5fc531a3e579cabed6a2c7c9e5" sha256: "63896c27e81b28f8cb4e69ead0d3e8f03f1d1e5fc531a3e579cabed6a2c7c9e5"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.4.0+1" version: "3.4.0+1"
term_glyph: term_glyph:
...@@ -1127,7 +1143,7 @@ packages: ...@@ -1127,7 +1143,7 @@ packages:
description: description:
name: term_glyph name: term_glyph
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.2" version: "1.2.2"
test_api: test_api:
...@@ -1135,7 +1151,7 @@ packages: ...@@ -1135,7 +1151,7 @@ packages:
description: description:
name: test_api name: test_api
sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.10" version: "0.7.10"
tobias: tobias:
...@@ -1143,7 +1159,7 @@ packages: ...@@ -1143,7 +1159,7 @@ packages:
description: description:
name: tobias name: tobias
sha256: "32836a9dae348d1c3f5f4247ed0a6a409fd5b9ddf490b06966a0fad2fd02cb7a" sha256: "32836a9dae348d1c3f5f4247ed0a6a409fd5b9ddf490b06966a0fad2fd02cb7a"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.3.2" version: "3.3.2"
typed_data: typed_data:
...@@ -1151,7 +1167,7 @@ packages: ...@@ -1151,7 +1167,7 @@ packages:
description: description:
name: typed_data name: typed_data
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.4.0"
uuid: uuid:
...@@ -1159,7 +1175,7 @@ packages: ...@@ -1159,7 +1175,7 @@ packages:
description: description:
name: uuid name: uuid
sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489" sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "4.5.3" version: "4.5.3"
vector_math: vector_math:
...@@ -1167,7 +1183,7 @@ packages: ...@@ -1167,7 +1183,7 @@ packages:
description: description:
name: vector_math name: vector_math
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.2.0"
vm_service: vm_service:
...@@ -1175,7 +1191,7 @@ packages: ...@@ -1175,7 +1191,7 @@ packages:
description: description:
name: vm_service name: vm_service
sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "15.2.0" version: "15.2.0"
web: web:
...@@ -1183,7 +1199,7 @@ packages: ...@@ -1183,7 +1199,7 @@ packages:
description: description:
name: web name: web
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.1.1"
win32: win32:
...@@ -1191,7 +1207,7 @@ packages: ...@@ -1191,7 +1207,7 @@ packages:
description: description:
name: win32 name: win32
sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "5.15.0" version: "5.15.0"
xdg_directories: xdg_directories:
...@@ -1199,23 +1215,23 @@ packages: ...@@ -1199,23 +1215,23 @@ packages:
description: description:
name: xdg_directories name: xdg_directories
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0"
xml: xml:
dependency: transitive dependency: transitive
description: description:
name: xml name: xml
sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" sha256: "67f0aff7be013d107995e9b75bf4e7f2c3ef2dfdb2c8e68024bba0a7fd5756a4"
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "6.6.1" version: "7.0.1"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:
name: yaml name: yaml
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.flutter-io.cn" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.3" version: "3.1.3"
sdks: sdks:
......
...@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev ...@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 1.0.1+5 version: 1.0.1+6
environment: environment:
sdk: '>=3.0.0 <4.0.0' sdk: '>=3.0.0 <4.0.0'
...@@ -95,7 +95,7 @@ dependencies: ...@@ -95,7 +95,7 @@ dependencies:
# 支付宝 # 支付宝
tobias: ^3.3.0 tobias: ^3.3.0
# 内购 # 内购
flutter_inapp_purchase: ^5.6.1 in_app_purchase: ^3.2.1
encrypt: ^5.0.3 encrypt: ^5.0.3
# 阿里oss直传 # 阿里oss直传
flutter_oss_aliyun: ^6.4.1 flutter_oss_aliyun: ^6.4.1
......
Markdown 格式
0% 或
您添加了 0 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论