Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Alguns bugs podem me ajudar?

Undefined name 'transferencias'. : 117 Undefined name 'transferencias'. : 128

Linhas do código

117: final transferencia = _transferencias[indice]; 128: _transferencias.add(transferenciaRecebida);

7 respostas

Bom dia Renato, tudo bom?

Vou solicitar para você o código todo, e os erros que estão dando. Pois só com essa informação que nos passou, não teria como te ajudar com esse problema.

Qualquer dúvida, estamos a disposição.

bl aqq está o código inteiro

import 'package:flutter/material.dart';

void main() => runApp(BytebankApp());

class BytebankApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: ListaTransferencias(),
      ),
    );
  }
}

class FormularioTrasferencia extends StatelessWidget {
  final TextEditingController _controladorCampoNumeroConta =
  TextEditingController();
  final TextEditingController _controladorCampoValor = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Criando Transferência"),
      ),
      body: Column(
        children: <Widget>[
          Editor(
              controlador: _controladorCampoNumeroConta,
              rotulo: "Número da conta",
              dica: "0000",
              icone: Icons.account_balance_sharp),
          Editor(
              controlador: _controladorCampoValor,
              rotulo: "Valor",
              dica: "0,00",
              icone: Icons.monetization_on),
          RaisedButton(
            child: Text('Confirmar'),
            onPressed: () => _criaTransferencia(context),
          )
        ],
      ),
    );
  }

  void _criaTransferencia(BuildContext context) {
    final int? numeroConta = int.tryParse("$_controladorCampoNumeroConta");
    final double? valor = double.tryParse("$_controladorCampoValor");
    if (numeroConta != null && valor != null) {
      final transferenciaCriada = Transferencia(valor, numeroConta);
      debugPrint("Criando Transferencia");
      Navigator.pop(context, transferenciaCriada);
    }
  }
}

class Editor extends StatelessWidget {
  final TextEditingController? controlador;
  final String? rotulo;
  final String? dica;
  final IconData? icone;

  Editor({this.controlador, this.rotulo, this.dica, this.icone});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(15.0),
      child: TextField(
        controller: controlador,
        style: TextStyle(fontSize: 24.0),
        decoration: InputDecoration(
          icon: icone != null ? Icon(icone) : null,
          labelText: rotulo,
          hintText: dica,
        ),
        keyboardType: TextInputType.number,
      ),
    );
  }
}

class Transferencia {
  final double valor;
  final int numeroConta;

  Transferencia(this.valor, this.numeroConta);

  @override
  String toString() {
    return "Transferencia{valor: $valor, numeroConta: $numeroConta}";
  }
}

class ListaTransferencias extends StatelessWidget {
  final List<Transferencia?> _transferencias = [];

  @override
  State<StatefulWidget> createState() {
    return ListaTransferencias();
  }
}

class ListaTransferenciasState extends State<ListaTransferencias> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Transferências"),
        ),
        body: ListView.builder(
          itemCount: widget._transferencias.length,
          itemBuilder: (context, indice) {
            final transferencia = _transferencias[indice];
            return ItemTransferencia(transferencia!);
          },
        ),
        floatingActionButton: FloatingActionButton(
            onPressed: () {
              final Future<Transferencia?> future =
              Navigator.push(context, MaterialPageRoute(builder: (context) {
                return FormularioTrasferencia();
              }));
              future.then((transferenciaRecebida) {
                _transferencias.add(transferenciaRecebida);
              });
            },
            child: Icon(Icons.add)));
  }
}



class ItemTransferencia extends StatelessWidget {
  final Transferencia _transferencia;

  ItemTransferencia(this._transferencia);

  @override
  Widget build(BuildContext context) {
    return Card(
        child: ListTile(
          leading: Icon(Icons.monetization_on),
          title: Text(_transferencia.valor.toString()),
          subtitle: Text(_transferencia.numeroConta.toString()),
        ));
  }
}

Boa tarde Renato, editei seu comentário para o seu código pra ficar mais facil de ler okay? Obrigado pelo compreensão!

Boa tarde Renato,

Vou te orientar que, ao inves de usar o:

final List<Transferencia?> _transferencias = [];

use o:

final transferencia = widget_transferencias[indice];

e coloque também o:

widget_transferencias.add(transferenciaRecebida);
              });

Teste dessa maneira, e veja se deu certo.

Qualquer dúvida, estamos a disposição.

Se eu faço isso só aparece mais bugs

Além desses 2 bugs q eu mencionei tem esse aqq tbm

Missing concrete implementation of 'StatelessWidget.build'.97 A value of type 'ListaTransferencias' can't be returned from the method 'createState' because it has a return type of 'State'. 102 'ListaTransferencias' doesn't conform to the bound 'StatefulWidget' of the type parameter 'T'. 106

solução!

Boa tarde Renato,

Tente colocar o

widget_transferencias.add(transferenciaRecebida);
              });

dentro de um setState , um aluno teve um problema semelhante e com ele funcionou. Dá uma olhada aqui no tópico dele aqui no fórum.

Qualquer dúvida, estamos a disposição.