【问题标题】:onPressed does not execute Function even after using setState即使在使用 setState 之后,onPressed 也不执行 Function
【发布时间】:2022-01-25 11:50:03
【问题描述】:

我在下面创建了一个函数

nextQuestion() {
    setState(() {
      questionIndex++;
    });
    print('pressed');
  }

然后我创建了下面的类,并在上面的方法中传递了一个 onPressed 属性的构造函数

class Answer extends StatelessWidget {
  final String answer;
  final VoidCallback? selectHandler;
  // ignore: use_key_in_widget_constructors
  const Answer({required this.answer, this.selectHandler});

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: selectHandler,
      child: SizedBox(
        width: double.infinity,
        child: Center(
          child: Text(
            answer,
          ),
        ),
      ),
    );
  }
}

然后我使用类的构造函数并传入函数来更新屏幕上的文本,该文本位于以 questionIndex 作为其索引的列表中

Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          Question(question: questions[questionIndex]),
          Answer(selectHandler: nextQuestion(), answer: 'Yellow'),
          Answer(selectHandler: nextQuestion(), answer: 'Yellow'),
          Answer(selectHandler: nextQuestion(), answer: 'Yellow'),
        ],
      ),

这不起作用/按下按钮后没有更新屏幕上的文本

【问题讨论】:

  • ()=> selectHandler一样调用你的onPressed
  • 请它仍然没有更新问题

标签: flutter dart


【解决方案1】:

我重新创建了代码,它对我有用,但有一些例外:

  1. Answer(selectHandler: nextQuestion(), answer: 'Yellow'),错误。你得用selectHandler:nextQuestion(函数后面没有())
  2. 在另一个有状态小部件中使用答案小部件。

如果你做了所有这些,它仍然不起作用运行flutter clean,然后运行flutter pub get(首先关闭调试会话)

如果这不起作用,则问题出在您的问题小部件上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多