1
resposta

Ajustar local do botão

Tudo bem pessoal !! Iniciei á pouco tempo no Flutter, e estou com um desafio que não consegui ainda resolver. Se alguém puder ajudar, agradeço. É o seguinte, nos prints abaixo, já incluí 3 clientes, porém quando vou incluir um pedido por exemplo no cliente1, que é o produto e valor, a informação vai para após o último cliente na tela, e não para abaixo do cliente1. TelaInicial

TelaInicial_

Segue o código.

class _InicialState extends State { final CadastrarClientesController controller = Get.put(CadastrarClientesController());

//CadastrarClientesController get _cadastrarClientesController => Get.find(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.blue, title: AppbarTitle( text: "Cadastrar Cliente / Produto", ), ), body: Obx( () => ListView.builder( itemCount: controller.cadastrarClientesList.length, itemBuilder: (context, index) { return Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ListTile( title: Text(controller.cadastrarClientesList[index].nome), subtitle: Text(controller.cadastrarClientesList[index].email), trailing: IconButton( icon: const Icon(Icons.delete), onPressed: () { controller.removeCadastrarClientes(index); }, ), ),

              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Column(
                  children: <Widget>[
                    ListTile(
                      title: Text(
                        'Pedidos:',
                        style: TextStyle(
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                      subtitle: Align(
                        alignment: Alignment.centerLeft,
                        child: ElevatedButton(
                          onPressed: () {
                            _showAddCadastrarProdutosDialog(context);
                          },
                          child: const Text('Add Pedido'),
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ],
          ),
        );
      },
    ),
  ),
  floatingActionButton: ElevatedButton(
    onPressed: () {
      _showAddCadastrarClientesDialog(context);
    },
    child: const Text(
      'Cadastrar Cliente',
      style: TextStyle(color: Colors.blue),
    ),
  ),
  floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
);

}

1 resposta

Olá Leandro.

Tudo bem?

Pelo que entendi, você está enfrentando um problema com a disposição dos elementos na sua aplicação Flutter, onde ao adicionar um pedido para um cliente específico, o pedido está sendo mostrado após o último cliente, e não logo abaixo do cliente para o qual o pedido foi feito.

Isso pode estar acontecendo porque a forma como os pedidos estão sendo adicionados na lista não está associando corretamente os pedidos aos clientes específicos. O que você precisa é de uma estrutura que permita armazenar os pedidos como uma lista dentro de cada cliente, e então exibir essa lista de pedidos abaixo do cliente correspondente.

Para resolver isso, você pode modificar a estrutura do seu controlador para que cada cliente tenha sua própria lista de pedidos. Aqui está uma sugestão de como você pode fazer isso:

  1. Modifique a classe do cliente para incluir uma lista de pedidos:
class Cliente {
  String nome;
  String email;
  List<Pedido> pedidos; // Adicione esta linha

  Cliente({required this.nome, required this.email, this.pedidos = const []});
}
  1. Quando você for adicionar um pedido, certifique-se de adicioná-lo à lista de pedidos do cliente correto.

  2. No seu ListView.builder, você terá que criar um ListView aninhado ou usar um Column para exibir os pedidos de cada cliente. Algo assim:

ListView.builder(
  itemCount: controller.cadastrarClientesList.length,
  itemBuilder: (context, index) {
    final cliente = controller.cadastrarClientesList[index];
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          ListTile(
            title: Text(cliente.nome),
            subtitle: Text(cliente.email),
            trailing: IconButton(
              icon: const Icon(Icons.delete),
              onPressed: () {
                controller.removeCadastrarClientes(index);
              },
            ),
          ),
          ...cliente.pedidos.map((pedido) => ListTile(
            title: Text(pedido.produto),
            subtitle: Text(pedido.valor.toString()),
          )).toList(),
          ElevatedButton(
            onPressed: () {
              // Aqui você deve implementar a lógica para adicionar um pedido ao cliente
              _showAddCadastrarProdutosDialog(context, cliente);
            },
            child: const Text('Add Pedido'),
          ),
        ],
      ),
    );
  },
),

Note que no código acima, você terá que implementar a lógica para adicionar um pedido ao cliente específico no método _showAddCadastrarProdutosDialog.

Espero que essas dicas te ajudem a resolver o problema. Se precisar de mais ajuda, não hesite em perguntar. Espero ter ajudado e bons estudos!