【问题标题】:How do I get my elevatedButton widget to call the function in Flutter?如何让我的 elevatedButton 小部件调用 Flutter 中的函数?
【发布时间】:2023-01-17 21:12:05
【问题描述】:

我试图让我的提升按钮响应我在另一个小部件中创建的功能,但在它递增时遇到问题。有人可以协助并告诉我我做错了什么吗?我将所有内容都放在 answer.dart 文件中,以便它调用 answerQuestion 函数

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


// Main that runs the MyApp class
void main() {
  runApp(MyApp());
}

// Stateful MyApp
class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _MyAppState();
  }
}

// MyAppState  Generic State
class _MyAppState extends State<MyApp> {
  var _questionIndex = 0;
  // ignore: unused_local_variable
  void _answerQuestion() {
    setState(() {
      _questionIndex = _questionIndex + 1;
    });
    print(_questionIndex);
  }

  @override
  Widget build(BuildContext context) {
    // FIRST METHOD

    // QUESTION VARIABLE
    // ignore: unused_local_variable
    var questions = [
      'What\'s your favorite food?',
      'What\'s your favorite color?'
    ];

    // RETURNS MATERIAL APP FOR FLUTTER
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('My First App'),
        ),
        body: Column(
          children: [
           Question(
            questions[_questionIndex],
          ),
          Answer(_answerQuestion),
          Answer(_answerQuestion),
          Answer(_answerQuestion),
         ],
        ),
      ),
    );
  }
}

回答.dart

import 'package:flutter/material.dart';
 
class Answer extends StatelessWidget {
  final Function selectHandler;
 
 Answer({Key? key, required this.selectHandler}) : super(key: key);
  
  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      child: ElevatedButton(
            style: ElevatedButton.styleFrom(
            primary: Color.fromARGB(255, 9, 131, 232),
          ),
          child: Text('Answer'),
          
          onPressed: () {
            selectHandler;
          },
          ),
    );
  }
}

问题.dart

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

【问题讨论】:

  • 您能否包括相关部分,如QuestionAnswer
  • 您可能没有在答案小部件内调用该方法。如果您提供 Answer 类,那就太好了
  • 看来您缺少 ( 和 ) (或者只是删除包装它的匿名函数)

标签: flutter function widget


【解决方案1】:

和之前的回答一样 进行这些更改。

onPressed: selectHandler,

Answer(selectHandler: _answerQuestion),

【讨论】:

    【解决方案2】:

    你可以做

     onPressed: () {
       selectHandler(); //missing ()
    

    或者做

     onPressed: selectHandler,
    

    Answer 小部件上的另一件事,您正在使用命名参数,喜欢

     Answer(selectHandler: _answerQuestion),
    

    【讨论】:

    • 谢谢你的提议,但我没有也不用担心。
    • 很高兴为您提供帮助,您可以找到有关dartflutter-cookbook 的更多信息
    • 最后一个问题。我不会更改提升按钮的文本颜色。我使用了对象 textColor: Colors.black 但我一直收到错误,它说 textColor 未定义。
    • 谢谢,我刚刚看了文档,看到了 onPrimary。再次感谢您的帮助。祝你有幸福的一天ধন্যবাদবন্ধু
    猜你喜欢
    • 2020-02-26
    • 2021-09-10
    • 1970-01-01
    • 2022-11-30
    • 2020-11-26
    • 2018-11-06
    • 2021-05-04
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多