@@ -56,7 +56,6 @@ class BillingClient {
5656 ///
5757 /// The `onPurchasesUpdated` parameter must not be null.
5858 BillingClient (PurchasesUpdatedListener onPurchasesUpdated) {
59- assert (onPurchasesUpdated != null );
6059 channel.setMethodCallHandler (callHandler);
6160 _callbacks[kOnPurchasesUpdated] = [onPurchasesUpdated];
6261 }
@@ -74,8 +73,13 @@ class BillingClient {
7473 /// Calls
7574 /// [`BillingClient#isReady()`] (https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#isReady())
7675 /// to get the ready status of the BillingClient instance.
77- Future <bool > isReady () async =>
78- await channel.invokeMethod <bool >('BillingClient#isReady()' );
76+ Future <bool > isReady () async {
77+ bool ? ready = await channel.invokeMethod <bool >('BillingClient#isReady()' );
78+ if (ready == null ) {
79+ return false ;
80+ }
81+ return ready;
82+ }
7983
8084 /// Enable the [BillingClientWrapper] to handle pending purchases.
8185 ///
@@ -100,20 +104,20 @@ class BillingClient {
100104 /// This triggers the creation of a new `BillingClient` instance in Java if
101105 /// one doesn't already exist.
102106 Future <BillingResultWrapper > startConnection (
103- {@ required
104- OnBillingServiceDisconnected onBillingServiceDisconnected}) async {
107+ {required OnBillingServiceDisconnected
108+ onBillingServiceDisconnected}) async {
105109 assert (_enablePendingPurchases,
106110 'enablePendingPurchases() must be called before calling startConnection' );
107111 List <Function > disconnectCallbacks =
108112 _callbacks[_kOnBillingServiceDisconnected] ?? = [];
109113 disconnectCallbacks.add (onBillingServiceDisconnected);
110- return BillingResultWrapper .fromJson (await channel
114+ return BillingResultWrapper .fromJson (( await channel
111115 .invokeMapMethod <String , dynamic >(
112116 "BillingClient#startConnection(BillingClientStateListener)" ,
113117 < String , dynamic > {
114118 'handle' : disconnectCallbacks.length - 1 ,
115119 'enablePendingPurchases' : _enablePendingPurchases
116- }));
120+ }))! ) ;
117121 }
118122
119123 /// Calls
@@ -137,15 +141,15 @@ class BillingClient {
137141 /// `SkuDetailsParams` as direct arguments instead of requiring it constructed
138142 /// and passed in as a class.
139143 Future <SkuDetailsResponseWrapper > querySkuDetails (
140- {@ required SkuType skuType, @ required List <String > skusList}) async {
144+ {required SkuType skuType, required List <String > skusList}) async {
141145 final Map <String , dynamic > arguments = < String , dynamic > {
142146 'skuType' : SkuTypeConverter ().toJson (skuType),
143147 'skusList' : skusList
144148 };
145- return SkuDetailsResponseWrapper .fromJson (await channel.invokeMapMethod<
149+ return SkuDetailsResponseWrapper .fromJson (( await channel.invokeMapMethod<
146150 String , dynamic > (
147151 'BillingClient#querySkuDetailsAsync(SkuDetailsParams, SkuDetailsResponseListener)' ,
148- arguments));
152+ arguments))! ) ;
149153 }
150154
151155 /// Attempt to launch the Play Billing Flow for a given [skuDetails] .
@@ -172,16 +176,16 @@ class BillingClient {
172176 /// and [the given
173177 /// accountId](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder.html#setAccountId(java.lang.String)).
174178 Future <BillingResultWrapper > launchBillingFlow (
175- {@ required String sku, String accountId}) async {
179+ {required String sku, String ? accountId}) async {
176180 assert (sku != null );
177181 final Map <String , dynamic > arguments = < String , dynamic > {
178182 'sku' : sku,
179183 'accountId' : accountId,
180184 };
181185 return BillingResultWrapper .fromJson (
182- await channel.invokeMapMethod <String , dynamic >(
186+ ( await channel.invokeMapMethod <String , dynamic >(
183187 'BillingClient#launchBillingFlow(Activity, BillingFlowParams)' ,
184- arguments));
188+ arguments))! ) ;
185189 }
186190
187191 /// Fetches recent purchases for the given [SkuType] .
@@ -197,10 +201,11 @@ class BillingClient {
197201 /// skutype)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querypurchases).
198202 Future <PurchasesResultWrapper > queryPurchases (SkuType skuType) async {
199203 assert (skuType != null );
200- return PurchasesResultWrapper .fromJson (await channel
204+ return PurchasesResultWrapper .fromJson (( await channel
201205 .invokeMapMethod <String , dynamic >(
202- 'BillingClient#queryPurchases(String)' ,
203- < String , dynamic > {'skuType' : SkuTypeConverter ().toJson (skuType)}));
206+ 'BillingClient#queryPurchases(String)' , < String , dynamic > {
207+ 'skuType' : SkuTypeConverter ().toJson (skuType)
208+ }))! );
204209 }
205210
206211 /// Fetches purchase history for the given [SkuType] .
@@ -218,10 +223,10 @@ class BillingClient {
218223 /// listener)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querypurchasehistoryasync).
219224 Future <PurchasesHistoryResult > queryPurchaseHistory (SkuType skuType) async {
220225 assert (skuType != null );
221- return PurchasesHistoryResult .fromJson (await channel.invokeMapMethod< String ,
222- dynamic > (
226+ return PurchasesHistoryResult .fromJson (( await channel.invokeMapMethod<
227+ String , dynamic > (
223228 'BillingClient#queryPurchaseHistoryAsync(String, PurchaseHistoryResponseListener)' ,
224- < String , dynamic > {'skuType' : SkuTypeConverter ().toJson (skuType)}));
229+ < String , dynamic > {'skuType' : SkuTypeConverter ().toJson (skuType)}))! ) ;
225230 }
226231
227232 /// Consumes a given in-app product.
@@ -234,15 +239,15 @@ class BillingClient {
234239 ///
235240 /// This wraps [`BillingClient#consumeAsync(String, ConsumeResponseListener)`] (https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#consumeAsync(java.lang.String,%20com.android.billingclient.api.ConsumeResponseListener))
236241 Future <BillingResultWrapper > consumeAsync (String purchaseToken,
237- {String developerPayload}) async {
242+ {String ? developerPayload}) async {
238243 assert (purchaseToken != null );
239- return BillingResultWrapper .fromJson (await channel
244+ return BillingResultWrapper .fromJson (( await channel
240245 .invokeMapMethod <String , dynamic >(
241246 'BillingClient#consumeAsync(String, ConsumeResponseListener)' ,
242- < String , String > {
247+ < String , dynamic > {
243248 'purchaseToken' : purchaseToken,
244249 'developerPayload' : developerPayload,
245- }));
250+ }))! ) ;
246251 }
247252
248253 /// Acknowledge an in-app purchase.
@@ -266,15 +271,15 @@ class BillingClient {
266271 ///
267272 /// This wraps [`BillingClient#acknowledgePurchase(String, AcknowledgePurchaseResponseListener)`] (https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#acknowledgePurchase(com.android.billingclient.api.AcknowledgePurchaseParams,%20com.android.billingclient.api.AcknowledgePurchaseResponseListener))
268273 Future <BillingResultWrapper > acknowledgePurchase (String purchaseToken,
269- {String developerPayload}) async {
274+ {String ? developerPayload}) async {
270275 assert (purchaseToken != null );
271- return BillingResultWrapper .fromJson (await channel.invokeMapMethod< String ,
276+ return BillingResultWrapper .fromJson (( await channel.invokeMapMethod< String ,
272277 dynamic > (
273278 'BillingClient#(AcknowledgePurchaseParams params, (AcknowledgePurchaseParams, AcknowledgePurchaseResponseListener)' ,
274- < String , String > {
279+ < String , dynamic > {
275280 'purchaseToken' : purchaseToken,
276281 'developerPayload' : developerPayload,
277- }));
282+ }))! ) ;
278283 }
279284
280285 /// The method call handler for [channel] .
@@ -283,15 +288,15 @@ class BillingClient {
283288 switch (call.method) {
284289 case kOnPurchasesUpdated:
285290 // The purchases updated listener is a singleton.
286- assert (_callbacks[kOnPurchasesUpdated].length == 1 );
291+ assert (_callbacks[kOnPurchasesUpdated]! .length == 1 );
287292 final PurchasesUpdatedListener listener =
288- _callbacks[kOnPurchasesUpdated].first;
293+ _callbacks[kOnPurchasesUpdated]! .first as PurchasesUpdatedListener ;
289294 listener (PurchasesResultWrapper .fromJson (
290- call.arguments. cast <String , dynamic >( )));
295+ Map <String , dynamic >. from (call.arguments )));
291296 break ;
292297 case _kOnBillingServiceDisconnected:
293298 final int handle = call.arguments['handle' ];
294- await _callbacks[_kOnBillingServiceDisconnected][handle]();
299+ await _callbacks[_kOnBillingServiceDisconnected]! [handle]();
295300 break ;
296301 }
297302 }
0 commit comments