Aller au contenu principal

AsButton

Un composant de bouton polyvalent qui s'adapte à la plateforme actuelle avec support de différents styles, d'états de chargement et de fonctionnalités d'accessibilité.

Import​

import 'package:alphasow_ui/alphasow_ui.dart';

Utilisation de Base​

AsButton(
onPressed: () {
print('Bouton pressé !');
},
child: const Text('Appuyez-moi'),
)

Styles de Bouton​

Bouton Primaire (Par Défaut)​

AsButton(
style: AsButtonStyle.primary, // Optionnel, c'est le défaut
onPressed: () {},
child: const Text('Bouton Primaire'),
)

Bouton Secondaire​

AsButton(
style: AsButtonStyle.secondary,
onPressed: () {},
child: const Text('Bouton Secondaire'),
)

Bouton Contour​

AsButton(
style: AsButtonStyle.outline,
onPressed: () {},
child: const Text('Bouton Contour'),
)

État de Chargement​

class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
bool _isLoading = false;

@override
Widget build(BuildContext context) {
return AsButton(
loading: _isLoading,
onPressed: _isLoading ? null : () async {
setState(() => _isLoading = true);

// Simuler une opération asynchrone
await Future.delayed(const Duration(seconds: 2));

setState(() => _isLoading = false);
},
child: const Text('Soumettre'),
);
}
}

Couleurs Personnalisées​

AsButton(
backgroundColor: Colors.green,
foregroundColor: Colors.white,
onPressed: () {},
child: const Text('Couleurs Personnalisées'),
)

État Désactivé​

AsButton(
onPressed: null, // null désactive le bouton
child: const Text('Bouton Désactivé'),
)

Bouton Pleine Largeur​

SizedBox(
width: double.infinity,
child: AsButton(
onPressed: () {},
child: const Text('Bouton Pleine Largeur'),
),
)

Référence API​

Propriétés​

PropriétéTypeDéfautDescription
childWidgetrequisLe widget enfant du bouton (généralement Text)
onPressedVoidCallback?requisAppelé quand le bouton est pressé. null désactive le bouton
styleAsButtonStyle?AsButtonStyle.primaryStyle visuel du bouton
loadingboolfalseAffiche un spinner de chargement quand true
backgroundColorColor?nullCouleur d'arrière-plan personnalisée
foregroundColorColor?nullCouleur du texte/icône personnalisée
borderRadiusBorderRadius?nullRayon de bordure personnalisé
paddingEdgeInsetsGeometry?nullEspacement personnalisé
elevationdouble?nullÉlévation d'ombre (Material seulement)
semanticsLabelString?nullÉtiquette d'accessibilité

AsButtonStyle​

  • AsButtonStyle.primary - Bouton rempli avec couleur primaire
  • AsButtonStyle.secondary - Bouton rempli avec couleur secondaire
  • AsButtonStyle.outline - Bouton avec contour et arrière-plan transparent
  • AsButtonStyle.text - Bouton texte seulement sans arrière-plan

Différences de Plateforme​

Material (Android/Web)​

  • Utilise ElevatedButton, OutlinedButton, ou TextButton
  • Support de l'élévation Material et des effets de vague
  • Suit les directives Material Design 3

Cupertino (iOS/macOS)​

  • Utilise CupertinoButton
  • Animation d'état pressé de style iOS
  • Suit les directives iOS Human Interface Guidelines

Accessibilité​

AsButton inclut automatiquement :

  • Rôles sémantiques appropriés
  • Application de taille de cible tactile (minimum 44x44 points)
  • Support de focus et navigation clavier
  • Compatibilité lecteur d'écran

Exemples​

Avec Icône​

AsButton(
onPressed: () {},
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(Icons.download),
const SizedBox(width: 8),
const Text('Télécharger'),
],
),
)

Bouton Arrondi​

AsButton(
borderRadius: BorderRadius.circular(30),
onPressed: () {},
child: const Text('Arrondi'),
)

Grand Bouton​

AsButton(
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
onPressed: () {},
child: const Text('Grand Bouton'),
)

Voir Aussi​