purpi_kit

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

Installation

flutter pub add purpi_kit
dependencies:
  purpi_kit: ^2.0.18

Utilisation

Intégration dans une app hôte

import 'package:purpi_kit/purpi_kit.dart';

const purpiConfig = PurpiConfig(
  flavor: Flavor.prod,
  storeAuthEmail: String.fromEnvironment('PURPI_STORE_AUTH_EMAIL'),
  storeAuthPassword: String.fromEnvironment('PURPI_STORE_AUTH_PASSWORD'),
);

// Au démarrage de l'app hôte, ou juste avant d'ouvrir Purpi
await PurpiKit.initialize(purpiConfig);

// Option A : ouvrir Purpi dans un nouvel écran
await PurpiKit.open(context, config: purpiConfig);

// Option B : embarquer le widget (onglet, route, etc.)
Navigator.push(
  context,
  MaterialPageRoute(builder: (_) => PurpiKit.app(config: purpiConfig)),
);

En application standalone

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await PurpiKit.runStandalone(config: purpiConfig);
}

Un exemple complet est disponible dans example/.

Configuration

Aucune clé API ni identifiant n'est embarqué dans le package : tout est fourni par l'app hôte via PurpiConfig, idéalement avec --dart-define.

Champ Rôle
flavor Flavor.prod ou Flavor.preprod (choisit l'URL d'API)
storeAuthEmail / storeAuthPassword Identifiants du store Purpi
googlePlacesApiKey Autocomplétion d'adresse (Google Places) ; sans clé, le champ reste saisissable
appsFlyerDevKey / appsFlyerAppId Attribution AppsFlyer ; sans dev key, le SDK n'est pas initialisé
googleIosClientId / googleServerClientId OAuth client IDs Google Sign-In de votre app
showTopBar Affiche la top bar Purpi (logo + menu)
externalAuthRequest Auth déléguée par l'app hôte, à la place de l'écran de login
flutter run \
  --dart-define=PURPI_STORE_AUTH_EMAIL=... \
  --dart-define=PURPI_STORE_AUTH_PASSWORD=... \
  --dart-define=PURPI_GOOGLE_PLACES_API_KEY=... \
  --dart-define=PURPI_APPSFLYER_DEV_KEY=... \
  --dart-define=PURPI_APPSFLYER_APP_ID=... \
  --dart-define=PURPI_GOOGLE_IOS_CLIENT_ID=... \
  --dart-define=PURPI_GOOGLE_SERVER_CLIENT_ID=...

API publique

Classe / méthode Rôle
PurpiKit.initialize() DI, IAP, AppsFlyer, config API
PurpiKit.app() Widget MaterialApp.router Purpi
PurpiKit.open() Initialise puis pousse Purpi sur la navigation courante
PurpiKit.runStandalone() runApp avec Purpi
PurpiConfig Flavor, credentials, clés API, options d'UI
Flavor prod / preprod

Plateformes

Android et iOS. Le SDK utilise Google Maps, l'achat in-app, la caméra (scan QR) et Google/Apple Sign-In : pensez à déclarer les permissions et clés natives correspondantes dans votre app hôte.

Licence

MIT — voir LICENSE.

Libraries

config/app_config
core/constants/package_constants
core/data/app_response
core/network/endpoints
core/network/error/app_exception_response
core/network/google_auth
core/network/network_info
core/routers/app_router
core/routers/app_router.gr
core/routers/auto_route_guard
core/services/api_client
core/services/store_api_client
core/theme/app_theme
core/theme/color
core/theme/text_size
core/theme/text_styles
core/theme/text_theme
core/utils/appsflyer
core/utils/calculate
core/utils/const
core/utils/device_info
core/utils/frensh_upgrader_messages
core/utils/image
core/utils/in_app_purchase_utils
core/utils/l10n
core/utils/launch_url
core/utils/pref_utils
core/utils/validator
core/utils/view_extension
core/widgets/action_button
core/widgets/back_widget
core/widgets/birthday_date_picker_widget
core/widgets/check_grid_widget
core/widgets/condition_bottom_sheet
core/widgets/confirmation_popup_bottom_sheet
core/widgets/counter_widget
core/widgets/custom_action_pane
core/widgets/custom_app_bar
core/widgets/custom_button
core/widgets/custom_checkbox
core/widgets/custom_dialog
core/widgets/custom_discount_banner
core/widgets/custom_dropdown_button
core/widgets/custom_expansion_widget
core/widgets/custom_html_view
core/widgets/custom_image_network
core/widgets/custom_see_more_ext
core/widgets/custom_text_box
core/widgets/dynamic_list_widget
core/widgets/empty_list
core/widgets/gift_card_popup_bottom_sheet
core/widgets/google_place_auto_complete_text_field
core/widgets/input_text_field
core/widgets/input_text_form_field
core/widgets/next_button
core/widgets/payment_button
core/widgets/payment_methods_widget
core/widgets/payment_popup_bottom_sheet
core/widgets/pdf_attachment_widget
core/widgets/pdf_preview
core/widgets/scan_button
core/widgets/search_text_field
core/widgets/success_popup_bottom_sheet
feature/authentication/data/data_sources/auth_remote_data_source
feature/authentication/data/models/abonnement_client
feature/authentication/data/models/auth_response
feature/authentication/data/models/client_details
feature/authentication/data/models/client_device
feature/authentication/data/models/client_info
feature/authentication/data/models/informations
feature/authentication/data/models/onboarding
feature/authentication/data/models/payment
feature/authentication/data/models/store
feature/authentication/data/models/store_response
feature/authentication/data/models/subscription
feature/authentication/data/models/tarif
feature/authentication/data/models/token
feature/authentication/data/models/verify_email_response
feature/authentication/data/repositories/auth_repository_impl
feature/authentication/domain/entities/external_auth_request
feature/authentication/domain/entities/forget_password_request
feature/authentication/domain/entities/login_request
feature/authentication/domain/entities/register_request
feature/authentication/domain/entities/resend_verify_email_request
feature/authentication/domain/entities/reset_password_request
feature/authentication/domain/entities/socialite_auth_request
feature/authentication/domain/entities/store_login_request
feature/authentication/domain/entities/verify_code_request
feature/authentication/domain/repositories/auth_repository
feature/authentication/domain/use_cases/check_code_use_case
feature/authentication/domain/use_cases/external_auth_use_case
feature/authentication/domain/use_cases/forget_password_use_case
feature/authentication/domain/use_cases/get_onboarding_use_case
feature/authentication/domain/use_cases/login_use_case
feature/authentication/domain/use_cases/register_use_case
feature/authentication/domain/use_cases/resend_verify_email_use_case
feature/authentication/domain/use_cases/reset_password_use_case
feature/authentication/domain/use_cases/socialite_auth_use_case
feature/authentication/domain/use_cases/store_login_use_case
feature/authentication/domain/use_cases/verify_email_use_case
feature/authentication/presentation/bloc/auth_bloc
feature/authentication/presentation/pages/forget_password_screen
feature/authentication/presentation/pages/inscription_screen
feature/authentication/presentation/pages/login_screen
feature/authentication/presentation/pages/on_boarding_screen
feature/authentication/presentation/pages/reset_password_screen
feature/authentication/presentation/pages/validation_email_screen
feature/authentication/presentation/pages/validation_forget_password_screen
feature/authentication/presentation/widgets/condition_and_sales_widget
feature/authentication/presentation/widgets/connection_item_widget
feature/authentication/presentation/widgets/custom_radio_button
feature/authentication/presentation/widgets/forget_password_widget
feature/authentication/presentation/widgets/inscription_widget
feature/authentication/presentation/widgets/login_widget
feature/authentication/presentation/widgets/on_boarding_widget
feature/authentication/presentation/widgets/reset_password_widget
feature/authentication/presentation/widgets/validation_email_widget
feature/authentication/presentation/widgets/validation_forget_password_widget
feature/privileges/data/data_sources/privileges_remote_data_source
feature/privileges/data/models/cartridge_banner_item
feature/privileges/data/models/cartridge_item
feature/privileges/data/models/cartridge_promotion_item
feature/privileges/data/models/cartridge_type
feature/privileges/data/models/cartridges_partner_item
feature/privileges/data/models/cartridges_response
feature/privileges/data/models/category_type
feature/privileges/data/models/location
feature/privileges/data/models/meta
feature/privileges/data/models/partner
feature/privileges/data/models/partner_category
feature/privileges/data/models/partner_response
feature/privileges/data/models/promotion
feature/privileges/data/models/promotion_partner
feature/privileges/data/models/promotion_type
feature/privileges/data/repositories/privileges_repository_impl
feature/privileges/domain/entities/partner_by_id_request
feature/privileges/domain/entities/partner_category_request
feature/privileges/domain/entities/partner_location_request
feature/privileges/domain/entities/partner_request
feature/privileges/domain/entities/search_partner_request
feature/privileges/domain/entities/tarif
feature/privileges/domain/entities/uploade_pdf
feature/privileges/domain/repositories/privileges_repository
feature/privileges/domain/use_cases/get_cartridges_use_case
feature/privileges/domain/use_cases/get_privileges_by_id_use_case
feature/privileges/domain/use_cases/get_privileges_category_use_case
feature/privileges/domain/use_cases/get_privileges_use_case
feature/privileges/domain/use_cases/search_partners_use_case
feature/privileges/presentation/bloc/privileges_bloc
feature/privileges/presentation/pages/home_screen
feature/privileges/presentation/pages/privileges_details_screen
feature/privileges/presentation/pages/privileges_screen
feature/privileges/presentation/shimmer/details_partner_shimmer
feature/privileges/presentation/shimmer/partner_item_shimmer
feature/privileges/presentation/shimmer/partner_line_shimmer
feature/privileges/presentation/widgets/advantage_item_widget
feature/privileges/presentation/widgets/advantage_widget
feature/privileges/presentation/widgets/cartridge_banner_item_widget
feature/privileges/presentation/widgets/cartridge_partner_item_widget
feature/privileges/presentation/widgets/cartridge_section_widget
feature/privileges/presentation/widgets/home_widget
feature/privileges/presentation/widgets/meta_item_widget
feature/privileges/presentation/widgets/point_of_sale_item_widget
feature/privileges/presentation/widgets/points_of_sale_widget
feature/privileges/presentation/widgets/privileges_category_item
feature/privileges/presentation/widgets/privileges_details_widget
feature/privileges/presentation/widgets/privileges_item_widget
feature/privileges/presentation/widgets/privileges_widget
feature/profile/data/data_sources/profile_remote_data_source
feature/profile/data/models/client
feature/profile/data/models/client_response
feature/profile/data/models/get_orders_response
feature/profile/data/models/history_request
feature/profile/data/models/login
feature/profile/data/models/pagination
feature/profile/data/models/promotion_pass_history
feature/profile/data/models/promotion_pass_history_response
feature/profile/data/models/promotion_response
feature/profile/data/models/update_client_request
feature/profile/data/repositories/profile_repository_impl
feature/profile/domain/entities/delete_account_request
feature/profile/domain/repositories/profile_repository
feature/profile/domain/use_cases/delete_account_use_case
feature/profile/domain/use_cases/get_client_use_case
feature/profile/domain/use_cases/get_promotion_pass_use_case
feature/profile/domain/use_cases/get_promotion_use_case
feature/profile/domain/use_cases/logout_use_case
feature/profile/domain/use_cases/update_client_use_case
feature/profile/presentation/bloc/profile_bloc
feature/profile/presentation/pages/delete_account_screen
feature/profile/presentation/pages/edit_user_data_screen
feature/profile/presentation/pages/profile_screen
feature/profile/presentation/pages/user_data_screen
feature/profile/presentation/pages/user_passes_screen
feature/profile/presentation/widgets/custom_tab_bar
feature/profile/presentation/widgets/delete_account_widget
feature/profile/presentation/widgets/edit_user_data_widget
feature/profile/presentation/widgets/pass_item
feature/profile/presentation/widgets/profile_widget
feature/profile/presentation/widgets/user_data_widget
feature/profile/presentation/widgets/user_information_widget
feature/profile/presentation/widgets/user_passes_widget
feature/setting/data/data_sources/setting_remote_data_source
feature/setting/data/models/page_response
feature/setting/data/repositories/setting_repository_impl
feature/setting/domain/repositories/setting_repository
feature/setting/domain/use_cases/get_pages_use_case
feature/setting/presentation/bloc/setting_bloc
feature/setting/presentation/pages/contact_us_screen
feature/setting/presentation/pages/html_view_screen
feature/setting/presentation/pages/setting_screen
feature/setting/presentation/widgets/contact_us_widget
feature/setting/presentation/widgets/how_are_we_widget
feature/setting/presentation/widgets/setting_section_item
feature/setting/presentation/widgets/setting_widget
feature/subscription/data/data_sources/subscription_remote_data_source
feature/subscription/data/models/scan_response
feature/subscription/data/repositories/subscription_repository_impl
feature/subscription/domain/entities/scan_request
feature/subscription/domain/entities/subscribe_request
feature/subscription/domain/repositories/subscription_repository
feature/subscription/domain/use_cases/scan_promotion_uses_case
feature/subscription/domain/use_cases/subscribe_uses_case
feature/subscription/domain/use_cases/unsubscribe_uses_case
feature/subscription/presentation/bloc/subscription_bloc
feature/subscription/presentation/pages/scan_intro_screen
feature/subscription/presentation/pages/scan_result_screen
feature/subscription/presentation/pages/scan_screen
feature/subscription/presentation/widgets/choose_subscription_item
feature/subscription/presentation/widgets/scan_result_widget
feature/subscription/presentation/widgets/scan_widget
feature/ticket_office/data/data_sources/ticket_office_remote_data_source
feature/ticket_office/data/models/dynamic_display
feature/ticket_office/data/models/filter
feature/ticket_office/data/models/filter_item
feature/ticket_office/data/models/partner_ticket_office
feature/ticket_office/data/models/status_value
feature/ticket_office/data/models/sub_gender_offer
feature/ticket_office/data/models/sub_gender_offer_child
feature/ticket_office/data/models/sub_gender_offers_response
feature/ticket_office/data/models/ticket_office
feature/ticket_office/data/models/ticket_office_response
feature/ticket_office/data/repositories/ticket_office_repository_impl
feature/ticket_office/domain/entities/sub_gender_offers_request
feature/ticket_office/domain/entities/ticket_office_by_id_request
feature/ticket_office/domain/entities/ticket_office_order_item_request
feature/ticket_office/domain/entities/ticket_office_order_request
feature/ticket_office/domain/entities/ticket_office_request
feature/ticket_office/domain/repositories/ticket_office_repository
feature/ticket_office/domain/use_cases/get_sub_gender_offers_case
feature/ticket_office/domain/use_cases/get_ticket_office_use_case
feature/ticket_office/domain/use_cases/get_ticket_offices_id_use_case
feature/ticket_office/domain/use_cases/ticket_office_buy_order_use_case
feature/ticket_office/presentation/bloc/ticket_office_bloc
feature/ticket_office/presentation/pages/ticket_office_basket_screen
feature/ticket_office/presentation/pages/ticket_office_confirm_user_data_screen
feature/ticket_office/presentation/pages/ticket_office_details_screen
feature/ticket_office/presentation/pages/ticket_office_screen
feature/ticket_office/presentation/widgets/ticket_office_basket_item
feature/ticket_office/presentation/widgets/ticket_office_confirm_user_data_widget
feature/ticket_office/presentation/widgets/ticket_office_date_filter
feature/ticket_office/presentation/widgets/ticket_office_days_number_filter
feature/ticket_office/presentation/widgets/ticket_office_detail_widget
feature/ticket_office/presentation/widgets/ticket_office_item
feature/ticket_office/presentation/widgets/ticket_office_tabs_filter
feature/ticket_office/presentation/widgets/ticket_office_widget
feature/vouchers/data/data_sources/vouchers_remote_data_source
feature/vouchers/data/models/article
feature/vouchers/data/models/article_list_response
feature/vouchers/data/models/article_response
feature/vouchers/data/models/articles_partner
feature/vouchers/data/models/buy_orders_response
feature/vouchers/data/repositories/vouchers_repository_impl
feature/vouchers/domain/entities/article_by_id_request
feature/vouchers/domain/entities/article_details_filter
feature/vouchers/domain/entities/article_request
feature/vouchers/domain/entities/voucher_order_request
feature/vouchers/domain/repositories/vouchers_repository
feature/vouchers/domain/use_cases/get_articles_list_use_case
feature/vouchers/domain/use_cases/get_articles_use_case
feature/vouchers/domain/use_cases/get_orders_use_case
feature/vouchers/domain/use_cases/vouchers_buy_order_use_case
feature/vouchers/presentation/bloc/vouchers_bloc
feature/vouchers/presentation/pages/confirm_user_data_screen
feature/vouchers/presentation/pages/partner_vouchers_details_screen
feature/vouchers/presentation/pages/payment_details_screen
feature/vouchers/presentation/pages/payment_screen
feature/vouchers/presentation/pages/vouchers_article_amount_range_screen
feature/vouchers/presentation/pages/vouchers_article_fixed_price_screen
feature/vouchers/presentation/pages/vouchers_article_price_option_screen
feature/vouchers/presentation/pages/vouchers_screen
feature/vouchers/presentation/widgets/article_item
feature/vouchers/presentation/widgets/article_name_and_details
feature/vouchers/presentation/widgets/article_price_option_widget
feature/vouchers/presentation/widgets/confirm_user_data_widget
feature/vouchers/presentation/widgets/custom_tab_bar_content
feature/vouchers/presentation/widgets/original_and_reduced_price_widget
feature/vouchers/presentation/widgets/partner_info
feature/vouchers/presentation/widgets/partner_vouchers_detail_widget
feature/vouchers/presentation/widgets/voucher_item_widget
feature/vouchers/presentation/widgets/vouchers_article_amount_range_widget
feature/vouchers/presentation/widgets/vouchers_article_fixed_price_widget
feature/vouchers/presentation/widgets/vouchers_article_price_options_widget
feature/vouchers/presentation/widgets/vouchers_widget
generated/intl/messages_all
generated/intl/messages_en
generated/intl/messages_fr
generated/l10n
injection_container
main_account_manager
purpi_app
purpi_config
purpi_kit
purpi_runtime
purpi_scope