万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    in_app_purchaseトランザクションオブザーバを設定

    確かに、アプリ全体の初期化処理の中でトランザクションオブザーバを設定する場合、購入情報を処理するコードとの間にアクセスの障壁が生じる可能性があります。

    この問題を解決するために、以下のような方法があります。

    import 'package:in_app_purchase/in_app_purchase.dart';
    // 購入情報を処理するコールバック
    typedef void PurchaseCallback(PurchaseDetails purchaseDetails);
    
    class MyApp extends StatelessWidget {
      // コールバックを格納するリスト
      final List<PurchaseCallback> _purchaseCallbacks = [];
    
      // コールバックを追加するメソッド
      void addPurchaseCallback(PurchaseCallback callback) {
        _purchaseCallbacks.add(callback);
      }
    
      // 購入情報を処理するメソッド
      void _handlePurchaseUpdate(PurchaseDetails purchaseDetails) {
        // 登録されたコールバックをすべて呼び出す
        for (final callback in _purchaseCallbacks) {
          callback(purchaseDetails);
        }
      }
    
      // トランザクションオブザーバを設定するメソッド
      void _initializeInAppPurchases() {
        InAppPurchaseConnection.instance
            .purchaseUpdatedStream
            .listen(_handlePurchaseUpdate);
    
        // トランザクションオブザーバが設定されたら、登録されたコールバックを呼び出す
        for (final callback in _purchaseCallbacks) {
          callback(null);
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'MyApp',
          home: MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final appState = Provider.of<AppState>(context);
        // 購入情報を処理するコードを登録する
        appState.addPurchaseCallback((purchaseDetails) {
          // 購入情報を処理するコードをここに記述する
        });
        return Scaffold(
          appBar: AppBar(
            title: Text('MyApp'),
          ),
          body: Center(
            child: Text('Hello, World!'),
          ),
        );
      }
    }