Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Flutter - ChangeNotify

Estou tendo uma certa dificuldade para entender essa reatividade, como implemento no codigo. Estou batendo em uma api e na tela enquando a api nao me retorna nada quero que fique um CircularProgressIndicator, e ao receber todos os dados da api, apareça os dados, eu tentei aqui de varias formas, apelei para o chatgpt me ajudar, consegui implementar mas nao entendi legal o fluxo da coisa, tem algum curso aqui ou algum video externo que possa me auxiliar ?

1 resposta
solução!

Olá, Paulo.

Tudo bem?

Vou tentar te ajudar a entender a reatividade no Fluttercom um exemplo prático usando ChangeNotifier e Provider.

Primeiro, você pode criar uma classe que estenda ChangeNotifier para gerenciar o estado da sua aplicação:

import 'package:flutter/material.dart';

class ApiDataProvider with ChangeNotifier {
  bool _isLoading = true;
  List<dynamic> _data = [];

  bool get isLoading => _isLoading;
  List<dynamic> get data => _data;

  Future<void> fetchData() async {
    // Simulando uma chamada de API com delay
    await Future.delayed(Duration(seconds: 2));
    // Aqui você faria a chamada real da API e obteria os dados
    _data = ['Item 1', 'Item 2', 'Item 3']; // Exemplo de dados recebidos da API
    _isLoading = false;
    notifyListeners();
  }
}

Em seguida, no seu arquivo principal, configure o Provider para que ele esteja disponível em toda a aplicação:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'api_data_provider.dart'; // Importe a classe que criamos acima

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (context) => ApiDataProvider(),
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

Agora, na sua tela principal, você pode usar o Consumer para escutar as mudanças no estado e atualizar a UI de acordo:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'api_data_provider.dart';

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final apiDataProvider = Provider.of<ApiDataProvider>(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter ChangeNotifier Example'),
      ),
      body: Center(
        child: apiDataProvider.isLoading
            ? CircularProgressIndicator()
            : ListView.builder(
                itemCount: apiDataProvider.data.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text(apiDataProvider.data[index]),
                  );
                },
              ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          apiDataProvider.fetchData();
        },
        child: Icon(Icons.refresh),
      ),
    );
  }
}

Nesse exemplo, quando você clica no botão de atualização, a chamada da API é simulada e, enquanto os dados não chegam, um CircularProgressIndicator é exibido. Quando os dados são recebidos, a lista é atualizada automaticamente.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.