android - 类型 'Null' 不是类型 'Function' 的子类型

标签 android flutter android-studio dart

我是 Flutter 的新手。我正在构建一个测验应用程序并具有以下三个 Dart 文件:

ma​​in.dart

import 'package:flutter/material.dart';
import './answer.dart';
import './question.dart';

void main(){
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  State<StatefulWidget> createState(){
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp>{
  var _questionIndex = 0;
  _answerQuestion(){
    setState(() {
      _questionIndex = _questionIndex + 1;
    });
}
  @override
  Widget build(BuildContext context) {
    var questions = [
      {'questionText': 'What\'s your favourite color ?',
        'answers': ['Red','Blue','White','Black']
      },
      {'questionText': 'What\'s your favourite Animal ?',
        'answers': ['Dog','Rabbit','Tiger','Monkey']
      },
      {'questionText': 'What\'s your favourite Day ?',
        'answers': ['Tuesday','Monday','Sunday','Friday','Wednesday','Saturday']
      },
    ];
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('My First App'),
        ),
        body: Column(
          children: [
            Question(questions[_questionIndex]['questionText'] as String,
            ),
            ...(questions[_questionIndex]['answers'] as List).map((answer) {
              return Answer(_answerQuestion(),answer);
            }).toList()
    ],
        )
      ),
    );
  }
}

问题.dart

import 'package:flutter/material.dart';


class Question extends StatelessWidget {
  final String questions;
  Question(this.questions);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      margin: EdgeInsets.all(10),
      child:(
      Text(
      questions,
      style: TextStyle(
          fontSize: 25),
      textAlign: TextAlign.center,)
    ),
    );
  }
}

answer.dart

import 'package:flutter/material.dart';

class Answer  extends StatelessWidget {
  final Function buttonHandler;
  final String answer;

  Answer(this.buttonHandler,this.answer);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      child: ElevatedButton(
        child: Text(answer),
        style: ButtonStyle(
            backgroundColor: MaterialStateProperty.all(Colors.blue),
            foregroundColor: MaterialStateProperty.all(Colors.white)
        ),
        onPressed: () => buttonHandler,
    ),
    );
  }
}


当我在 Android studio 中的 android 上运行应用程序时,出现此错误:

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY╞═══════════════════════════════════════════
The following _TypeError was thrown building MyApp(dirty, state: _MyAppState#7f7de):
type 'Null' is not a subtype of type 'Function'
The relevant error-causing widget was:
MyApp file:///C:/src/first_app/lib/main.dart:7:10

最佳答案

这个:

onPressed: () => buttonHandler,

需要是:

onPressed: buttonHandler,

onPressed: () => buttonHandler(),

取决于您的处理程序是否与所需的签名完全匹配。

另外,这个:

return Answer(_answerQuestion(),answer);

需要

return Answer(_answerQuestion,answer);

一般来说,您已经多次混淆了调用方法和方法作为参数传递,您可能想要更熟悉它。 p>

关于android - 类型 'Null' 不是类型 'Function' 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68771077/

相关文章:

android - MainActivity NoClassDefFoundError

android - 如何在 Fragment 中注册 Receiver

android - Google GCM 延迟,TCP 超时修复?

安卓ViewPager "slide lag"

flutter - 未在 flutter 中创建文本文件

flutter - 插件 `geocoder` 使用了已弃用的 Android 嵌入版本

firebase - flutter/firebase 数据库中的一个简单的 where 子句

java - EventBus的onEvent方法如何使用?

android-studio - 插件错误: Plugin 'Google Sceneform Tools (Beta)' is compatible with IntelliJ IDEA only because it doesn't define any explicit module dependencies

android - 如何使用 DownloadManager 列