错误:无法将参数类型“Function”分配给参数类型“void Function()?”。“Function”来自“dart:core”。onPressed: selectHandler

时间:2021-06-28 12:58:09

标签: flutter dart flutter-layout

main.dart

    import 'package:flutter/material.dart';
    import './questions.dart';
    import './answer.dart';
    
    void main() {
    runApp(AskMe());
    }
    
    class AskMe extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
        return _AskMeState();
    }
    }
    
    class _AskMeState extends State<AskMe> {
    var _next_ques = 0;
    
    void _Response() {
        setState(() {
        _next_ques += 1;
        });
        print(_next_ques);
    }
    
    @override
    Widget build(BuildContext context) {
        var questions = ["What is your Name ?", "What is your favourite color ?"];
        return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
            title: Text("Ask Me"),
            ),
            body: Column(
            children: [
                Questions(questions[_next_ques]),
                Answer(_Response),
                Answer(_Response),
                Answer(_Response),
            ],
            ),
        ),
        );
    }
    }

questions.dart

        import 'package:flutter/material.dart';
        
        class Questions extends StatelessWidget {
        final String questions;
        Questions(this.questions);
        
        @override
        Widget build(BuildContext context) {
            return Container(
            width: double.infinity,
            margin: EdgeInsets.all(20),
            child: Text(
                questions,
                style: TextStyle(fontSize: 28),
                textAlign: TextAlign.center,
            ),
            );
        }
        }
        

answer.dart

    import 'package:flutter/material.dart';
    
    class Answer extends StatelessWidget {
    final Function selectHandler;
    
    Answer(this.selectHandler);
    
    @override
    Widget build(BuildContext context) {
        return Container(
        width: double.infinity,
        margin: EdgeInsets.all(10),
        child: RaisedButton(
            color: Colors.blueGrey,
            child: Text("Question 1"),
            onPressed: selectHandler,
        ),
        );
    }
    }

以上代码用于基本应用程序,包含 3 个用于显示为 textview 的问题的按钮,单击按钮将显示下一个问题。我面临的问题是在 answer.dart 中创建自定义 dart 函数时,我无法调用指向 main.dart 中存在的函数 _Response 的指针,因为它给出了标题中提到的错误。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

像这样定义函数类型:

class Answer extends StatelessWidget {
  final Function() selectHandler;
  ...