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

onClick nulo

Estou com um probleminha e não consigo compilar o código

Na linha

_FeatureItem(this.name, this.icon, {@required this.onClick});

aparece um erro:

The parameter 'onClick' can't have a value of 'null' because of its type 'Function', but the implicit default value is 'null'.
 - 'Function' is from 'dart:core'.
Try adding either an explicit non-'null' default value or the 'required' modifier.
  _FeatureItem(this.name, this.icon, {@required this.onClick});
5 respostas

O erro persiste mesmo usando o código mostrado em "Para saber mais"

solução!

Como está a declaração de featureItem?

class _FeatureItem extends StatelessWidget {
  final String name;
  final IconData icon;
  final Function onClick;

  const _FeatureItem({
    Key? key,
    required this.name,
    required this.icon,
    required this.onClick,
  }) : super(key: key);

Estava assim:

class _FeatureItem extends StatelessWidget {
  final String name;
  final IconData icon;
  final Function onClick;

 _FeatureItem(
      this.name,
      this.icon, {
        @required this.onClick,
      })  : assert(icon != null),
        assert(onClick != null);

Troquei por esse que você colocou e agora está com mais erros:

error: The named parameter 'name' is required, but there's no corresponding argument. (missing_required_argument at [projetos2] lib\screens\dashboard.dart:23)
error: The named parameter 'icon' is required, but there's no corresponding argument. (missing_required_argument at [projetos2] lib\screens\dashboard.dart:23)
error: Too many positional arguments: 0 expected, but 2 found. (extra_positional_arguments_could_be_named at [projetos2] lib\screens\dashboard.dart:24)
error: The named parameter 'name' is required, but there's no corresponding argument. (missing_required_argument at [projetos2] lib\screens\dashboard.dart:28)
error: The named parameter 'icon' is required, but there's no corresponding argument. (missing_required_argument at [projetos2] lib\screens\dashboard.dart:28)
error: Too many positional arguments: 0 expected, but 2 found. (extra_positional_arguments_could_be_named at [projetos2] lib\screens\dashboard.dart:29)

Os erros são da Dashboard:

class Dashboard extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
        title: Text('Dashboard'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Image.asset('images/bytebank_logo.png'),
          ),
          Row(
            children: [
              _FeatureItem(
                'Transfer',
                Icons.monetization_on,
                onClick: () => _showContactsList(context),
              ),
              _FeatureItem(
                'Transaction Feed',
                Icons.description,
                onClick: () => _showTransactionsList(context),
              ),
            ],
          ),
        ],
      ),
    );
  }

É que quando você coloca a { na declaração o parâmetro se torna named então você tem que chamar diferente:

_FeatureItem(
                  name: 'Transfer',
                  icon: Icons.monetization_on,
                  onClick: () => _showContactsList(context),
                ),
                _FeatureItem(
                  name: 'Transaction Feed',
                  icon: Icons.description,
                  onClick: () => _showTransactionsList(context),
                ),

Gosto de usar parâmetros nomeados pois as chamadas ficam mais claras.

Agora funciona. Obrigado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software