ValueNotifier é uma classe em Flutter que implementa um padrão de notificação de mudanças. Ela é uma forma simples de criar objetos observáveis que podem ser utilizados para notificar a ocorrência de alterações em seu valor, permitindo a atualização de widgets que dependem desses valores.


Aqui está um exemplo básico de como usar o ValueNotifier:

Criando um ValueNotifier e Observando Mudanças:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final ValueNotifier<int> counter = ValueNotifier<int>(0);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ValueNotifier Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ValueListenableBuilder(
                valueListenable: counter,
                builder: (context, value, _) {
                  return Text(
                    'Contador: $value',
                    style: TextStyle(fontSize: 24),
                  );
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  counter.value++; // Incrementa o valor do ValueNotifier
                },
                child: Text('Incrementar'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}


Neste exemplo:

  • ValueNotifier<int> é um ValueNotifier que mantém um valor inteiro.

  • ValueListenableBuilder é um widget que escuta as mudanças no ValueNotifier e reconstrói o widget sempre que o valor dentro dele muda.

  • O botão "Incrementar" aumenta o valor do ValueNotifier quando é pressionado, o que aciona a reconstrução do ValueListenableBuilder, atualizando o valor exibido na tela.


O ValueNotifier é útil para atualizar widgets quando ocorrem mudanças em um determinado valor, permitindo uma atualização rápida e eficiente da interface do usuário sempre que o valor notificado é modificado. Ele pode ser usado em muitos cenários, desde o gerenciamento de estado simples até o controle de valores mais complexos em uma aplicação Flutter.