purpi_kit 2.0.18 copy "purpi_kit: ^2.0.18" to clipboard
purpi_kit: ^2.0.18 copied to clipboard

SDK Flutter Purpi : privilèges, abonnements et paiements in-app, intégrable comme widget dans une app hôte ou lançable en application standalone.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:purpi_kit/purpi_kit.dart';

/// Les secrets sont fournis par l'app hôte, jamais par le package :
/// `flutter run --dart-define=PURPI_STORE_AUTH_EMAIL=... --dart-define=...`
const purpiConfig = PurpiConfig(
  flavor: Flavor.prod,
  storeAuthEmail: String.fromEnvironment('PURPI_STORE_AUTH_EMAIL'),
  storeAuthPassword: String.fromEnvironment('PURPI_STORE_AUTH_PASSWORD'),
  googlePlacesApiKey: String.fromEnvironment('PURPI_GOOGLE_PLACES_API_KEY'),
  appsFlyerDevKey: String.fromEnvironment('PURPI_APPSFLYER_DEV_KEY'),
  appsFlyerAppId: String.fromEnvironment('PURPI_APPSFLYER_APP_ID'),
  googleIosClientId: String.fromEnvironment('PURPI_GOOGLE_IOS_CLIENT_ID'),
  googleServerClientId: String.fromEnvironment('PURPI_GOOGLE_SERVER_CLIENT_ID'),
);

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await PurpiKit.initialize(purpiConfig);
  runApp(const HostApp());
}

/// App hôte minimale : un bouton qui ouvre Purpi dans un nouvel écran.
class HostApp extends StatelessWidget {
  const HostApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Purpi Kit Example',
      home: Scaffold(
        appBar: AppBar(title: const Text('Mon app')),
        body: Center(
          child: Builder(
            builder: (context) => ElevatedButton(
              onPressed: () => PurpiKit.open(context, config: purpiConfig),
              child: const Text('Ouvrir Purpi'),
            ),
          ),
        ),
      ),
    );
  }
}