1
resposta

App pedidos

Estou desenvolvendo um aplicativo em flutter para pedidos de pasteis, onde eu tenho uma tela para escolher os pasteis, outra para identificação, outra que define a forma de pagamento do meu pedido... por ai vai. Como que no flutter eu faço para ir salvando em memória cada tela do meu aplicativo, para que quando eu chegue na ultima tela e clique em finalizar pedido, envie todos os dados de uma unica vez para minha API ? (exemplo, tela de pedidos, salve os pedidos... tela de identificação, salve os dados do usuario...) a meu metodo POST segue o seguinte padrao:

{ "id": 0, "nomeCliente": "string", "telefone": "string", "formaPagamento": "string", "pedido": [ { "id": 0, "nomePastel": "string", "quantidade": 0 } ] }

1 resposta

Para implementar o fluxo que você deseja, você pode usar o gerenciamento de estado no Flutter para armazenar os dados temporariamente enquanto o usuário navega pelas diferentes telas do seu aplicativo. Uma abordagem comum para isso é usar um gerenciador de estado global, como o Provider ou o Riverpod.

Adicione a dependência do Provider no seu arquivo pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  provider: ^5.0.2

Importe o Provider no seu arquivo Dart:

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

Crie uma classe para armazenar o estado global do seu aplicativo. Vamos chamá-la de PedidoProvider:

class PedidoProvider extends ChangeNotifier {
  String nomeCliente = "";
  String telefone = "";
  String formaPagamento = "";
  List<Map<String, dynamic>> pedidos = [];

  void adicionarPedido(Map<String, dynamic> pedido) {
    pedidos.add(pedido);
    notifyListeners();
  }

  // Adicione métodos semelhantes para as outras informações que você precisa salvar.
}

Em volta do seu MaterialApp, envolva-o com o ChangeNotifierProvider:

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

Em cada tela do seu aplicativo, você pode acessar o estado global usando o Provider.of e atualizar os dados conforme necessário:

class TelaPedidos extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var pedidoProvider = Provider.of<PedidoProvider>(context);

    // Use pedidoProvider para acessar e atualizar os dados necessários

    return Scaffold(
      //...
    );
  }
}

Quando o usuário finalizar o pedido, você pode enviar todos os dados para a sua API:

class TelaFinalizarPedido extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var pedidoProvider = Provider.of<PedidoProvider>(context);

    // Enviar dados para a API usando pedidoProvider

    return Scaffold(
      //...
    );
  }
}