import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; import '../design_system/unionflow_design_system.dart'; /// Widget "Powered by Lions Dev" — affiche le logo Lions Dev adaptatif (dark/light) /// avec lien cliquable vers https://www.lions.dev /// /// Usage: /// ```dart /// const PoweredByLionsDev() /// // ou compact: /// const PoweredByLionsDev(compact: true) /// ``` class PoweredByLionsDev extends StatelessWidget { /// Si true, affichage compact (logo plus petit, sans label "Powered by") final bool compact; /// Couleur du label "Powered by" (par défaut : couleur secondaire du thème) final Color? labelColor; /// Hauteur du logo (par défaut : 28 normal, 20 compact) final double? logoHeight; /// Force une variante (utile sur fond toujours sombre/clair comme login). /// Si null, suit le thème courant. final Brightness? forceBrightness; const PoweredByLionsDev({ super.key, this.compact = false, this.labelColor, this.logoHeight, this.forceBrightness, }); Future _openLionsDev() async { final uri = Uri.parse('https://www.lions.dev'); if (await canLaunchUrl(uri)) { await launchUrl(uri, mode: LaunchMode.externalApplication); } } @override Widget build(BuildContext context) { final brightness = forceBrightness ?? Theme.of(context).brightness; final isDark = brightness == Brightness.dark; // Logo blanc sur fond sombre, logo noir sur fond clair final logoAsset = isDark ? 'assets/images/branding/lions_dev_white.png' : 'assets/images/branding/lions_dev_dark.png'; final effectiveLabelColor = labelColor ?? (isDark ? AppColors.textSecondaryDark : AppColors.textSecondary); final effectiveHeight = logoHeight ?? (compact ? 20.0 : 28.0); return InkWell( onTap: _openLionsDev, borderRadius: BorderRadius.circular(SpacingTokens.radiusMd), child: Padding( padding: const EdgeInsets.symmetric( horizontal: SpacingTokens.md, vertical: SpacingTokens.sm, ), child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ if (!compact) ...[ Text( 'Powered by', style: TextStyle( fontSize: 11, color: effectiveLabelColor, letterSpacing: 0.3, ), ), const SizedBox(width: SpacingTokens.sm), ], Image.asset( logoAsset, height: effectiveHeight, fit: BoxFit.contain, ), ], ), ), ); } }