Utilisation d'une fonction pour éviter du code dupliqué

Bonjour,
Je débute eb Flutter après avoir suivi la formation IN’ Learn (vraiment super !)
Dans mon appli, j’ai créé 4 IconButton pour exécuter des actions différentes et je me retrouve avec 4 fois le même code à exécuter.
Pour évitercela, j’ai voulu créer une fonction _constructRow() avec 3 paramètres, la couleur du background de l’icône, le lien vers l’url à appeler et le libellé du bouton.

Le code de la fonction est :
void _constructRow(couleur,lien,titre) {

Row(
children: [
CircleAvatar(
radius: 20,
backgroundColor: couleur,
child: IconButton(

icon: Icon(FontAwesomeIcons.eye),
color: Colors.black,
iconSize: 30,
onPressed: () => _launchUrl(lien),
),
),
SizedBox(width:(20)),
Flexible(
flex: 1,
fit: FlexFit.tight,
child: Container(
child: Text(titre,
textAlign: TextAlign.center,
style: GoogleFonts.rubik(color: Colors.black, fontSize : 20.0, fontWeight: FontWeight.bold)
),
),
),
],
);
}

Lorsque j’appelle ma fonction dans le corps de mon appli avec la code :
_constructRow(couleurHoraires,urlHoraires,titreHoraires),
les paramètres sont définis comme suit :
const couleurHoraires = Colors.pink;
const titreHoraires=‹ Horaires des messes ›;
const urlHoraires = ‹ Menu horaires ›;
la compilation me met une erreur :
Error: This expression has type ‹ void › and can’t be used.
_constructRow(couleurHoraires,urlHoraires,titreHoraires),
^
Failed to compile application.
Mes connaissances en Dart sont encore trop faibles pour m’en sortir !
Pourriez-vous svp m’indiquer comment faire ?
Un grand merci d’avance !
Pépé Michel

Bonjour,

Votre fonction _rowConstruct ne renvoit rien elle est de type void.
Si vous souhaitez renvoyer le widget Row vous devez faire :

Widget _constructRow(couleur,lien,titre) {
    return Row();
}

Merci beaucoup !
Cela règle mon problème !
Bien cordialement
Pépé Michel

En fait, tout n’est pas réglé !
Il n’y a plus d’erreur à la compilation ni à l’exécution … mais aucune ligne n’est générée lors de l’appel de
_constructRow(couleurHoraires,urlHoraires,titreHoraires)

Rien ne se passe …
J’ai dû oublier quelque chose !!!
Merci de vos conseils !
Pépé Michel

Comment appelez vous _constructRow ?
Il faut quelque chose du genre : Après les widgets dépendent de ce que tu as besoin.

 @override
   Widget build(BuildContext context) {
     return SafeArea(
         child: Drawer(
       child: ListView(
         padding: EdgeInsets.zero,
         children: <Widget>[
           _constructRow(couleurHoraires,urlHoraires,titreHoraires)
           _constructRow(couleurHoraires,urlHoraires,titreHoraires)
           _constructRow(couleurHoraires,urlHoraires,titreHoraires)
         ],
       ),
     ));

Merci Hacyrak
Je viens de trtrouver mon erreur !
Dans mon widget _construtRow(…) j"avais éccrit
return Row();
Row( code du row

au lieu de
return Row(code du row…
Et c’est pour cela que le widget ne retournait rien!!!
Un grand merci car l’apprentissage est parfois laborieux, surtout à 83 balais, mais je trouve cela génial !
Amitiés
Pépé Michel

1 J'aime

WOW!! Accroche toi !!! BRAVO ! laisse rien tomber !!!

Merci de tes encour