Summary
Keywords
Full Transcript
Playlist: Curso Grátis de FLUTTER e DART Completo https://www.youtube.com/playlist?list=PL5EmR7zuTn_aX0pG4oWTyKKQT25Hkq2XG ChangeNotifier O ChangeNotifier é uma classe simples incluída no Flutter SDK, que fornece notificação de alteração aos seus ouvintes. Em outras palavras, se algo é um ChangeNotifier, você pode se inscrever em suas alterações. (É uma forma de Observable, para aqueles familiarizados com o termo.) No provedor, o ChangeNotifier é uma maneira de encapsular o estado do seu aplicativo. Para aplicativos muito simples, você consegue com um único ChangeNotifier. Nas complexas, você terá vários modelos e, portanto, vários ChangeNotifiers. (Você não precisa usar o ChangeNotifier com provedor, mas é uma classe fácil de se trabalhar.) No nosso exemplo de aplicativo de compras, queremos gerenciar o estado do carrinho em um ChangeNotifier. Criamos uma nova classe que a extende, assim: content_copy classe CartModel estende ChangeNotifier { /// Estado interno e privado do carrinho. lista final item _items = []; /// Uma visão inalterável dos itens no carrinho. UnmodifiableListView Item get items = UnmodifiableListView (_items); /// O preço total atual de todos os itens (supondo que todos os itens custem US $ 42). int get totalPrice = _items.length * 42; /// Adiciona [item] ao carrinho. Esta é a única maneira de modificar o carrinho de fora. void add (Item item) { _items.add (item); // Esta chamada informa aos widgets que estão ouvindo este modelo para reconstruir. notifyListeners (); } } O único código que é específico para o ChangeNotifier é a chamada para notifyListeners (). Chame esse método sempre que o modelo mudar de maneira que possa alterar a interface do usuário do seu aplicativo. Tudo o resto no CartModel é o modelo em si e sua lógica de negócios. O ChangeNotifier faz parte do flutter: foundation e não depende de nenhuma classe de nível superior no Flutter. É facilmente testável (você nem precisa usar o teste de widget para isso). Por exemplo, aqui está um teste de unidade simples do CartModel: content_copy teste ('adicionar item aumenta o custo total', () { carrinho final = CartModel (); final startingPrice = cart.totalPrice; cart.addListener (() { esperar (cart.totalPrice, greaterThan (startingPrice)); }); cart.add (Item ('Dash')); });
