2
respostas

Código não está funcionando

O Erro é o abaixo:

65:3: Context: Found this candidate, but the arguments don't match. Editor({required this.controlador, required this.rotulo, required this.dica, required this.icone}); ^^^^^^



 import 'dart:js';

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 FormularioTransferencia 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,
        dica: '0000',
        rotulo: 'Número da conta',
      ),
      Editor(
        dica: '0.00',
        controlador: _controladorCampoValor,
        rotulo: 'Valor',
        icone: Icons.monetization_on,
      ),
      ElevatedButton(
        child: Text('Confirmar'),
        onPressed: () => _criaTransferencia(context),
      )
        ],
      ));
  }

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

class Editor extends StatelessWidget {
  final TextEditingController controlador;
  final String rotulo;
  final String dica;
  final IconData? icone;
  Editor({required this.controlador, required this.rotulo, required this.dica, required this.icone});
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.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 ListaTransferencias extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Transferências'),
      ),
      body: Column(
        children: <Widget>[
          ItemTransferencia(Transferencia(100.0, 1000)),
          ItemTransferencia(Transferencia(200.0, 2000)),
          ItemTransferencia(Transferencia(300.0, 3000)),
        ],
      ),

    floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add), onPressed: () {
    final Future<Transferencia?> future = Navigator.push(context, MaterialPageRoute(builder: (context) {
      return FormularioTransferencia();
    }));
    future.then((transferenciaRecebida) {
      debugPrint('chegou no then do future');
      debugPrint('$transferenciaRecebida');
    });
    },
    ),
    );
  }
}
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()),
        ));
  }
}
class Transferencia {
  final double valor;
  final int numeroConta;
  Transferencia(this.valor, this.numeroConta);
  @override
  String toString() {
    return 'Transferencia{valor: $valor, numeroConta: $numeroConta}';
  }
}
2 respostas

Acho que o problema é o fato de estar colocando required nos campos, tenta tirar do construtor do Editor o required e ve se rola

Olá, Stefani!

Você está utilizando o "required" em todos os campos do construtor (verifique a linha 65). Notei no seu código que vc passa todos os argumentos dos construtores (determinando o nome e o valor), exceto o icone. Acredito que vc tornou o icone opcional e na declaração do tipo colocou a interrogação (?) para permitir null (nulo). Então remova o "required" referente ao icone no construtor: required this.icone. //Sua declaração de variáveis: final TextEditingController controlador; final String rotulo; final String dica; final IconData? icone; //Seu construtor obrigando o icone que não é utilizado entre as linhas 27 e 31: Editor({required this.controlador, required this.rotulo, required this.dica, required this.icone}); //Linhas da 27 a 31: Editor( controlador: _controladorCampoNumeroConta, dica: '0000', rotulo: 'Número da conta', ),