Remonter le résulat d'une fonction d'un widget dans la vue principale

Hello tout le monde,

J’ai découvert une nouvelle façon de remonter le résultat d’une fonction d’un widget dans la vue principale. Je vous partage ça :slight_smile:

Dans le widget, je ne crée pas une variable qui contient une fonction mais une variable du type ValueChange qui renverra un int et dans le onTap de la bottomNavigationBar, je fais référence à cette variable

import 'package:flutter/material.dart';

class BottomNavigationBarWidget extends StatefulWidget {
  final int selectedIndex;
// c'est ici que ça se passe : 
  final ValueChanged<int> onTap;
  const BottomNavigationBarWidget(
      {super.key, required this.selectedIndex, required this.onTap});

  @override
  State<BottomNavigationBarWidget> createState() =>
      _BottomNavigationBarWidgetState();
}

class _BottomNavigationBarWidgetState extends State<BottomNavigationBarWidget> {
  @override
  Widget build(BuildContext context) {
    return BottomNavigationBar(
      items: const <BottomNavigationBarItem>[
        BottomNavigationBarItem(
            icon: Icon(Icons.place), label: 'Mes Cueillettes'),
        BottomNavigationBarItem(icon: Icon(Icons.search), label: 'Découvrir'),
      ],
      iconSize: 26,
      selectedIconTheme: const IconThemeData(color: Colors.orange, size: 30),
      selectedItemColor: Colors.orange,
      backgroundColor: Colors.white,
      currentIndex: widget.selectedIndex,
      onTap: widget.onTap,
    );
  }
}

Puis dans ma vue principale, j’obtiens une fonction de type « void Function(int) » et je peux appeler mon viewmodel en passant l’index sélectionner dans mon widget !

bottomNavigationBar: BottomNavigationBarWidget(
          selectedIndex: NavBar.discover.index,
          onTap: (int index) {
            viewmodel.onBottomNavBarTouched(index: index);
          }),

Vous connaissiez cette façon de faire ?

2 « J'aime »

Oui le ValueChanges en Dart permet d’avoir une variable que tu peux surveiller. Un peu comme un ChangeNotifier mais sur une seule variable.
C’est intéressant de l’utiliser comme fonction de callback :+1:

1 « J'aime »