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/popup
- core/utils/pref_utils
- core/utils/validator
- core/utils/view_extension
- 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_carousel
- core/widgets/custom_checkbox
- core/widgets/custom_dialog
- 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/payment_methods_widget
- core/widgets/payment_popup_bottom_sheet
- core/widgets/pdf_attachment_widget
- core/widgets/pdf_preview
- 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/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/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/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_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_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