首页 文章

无法按下按钮按下工作

提问于
浏览
2

好吧,我很擅长扑扑/飞镖,所以对我来说很容易 . 我只是想创建一个非常简单的应用程序,当你按下按钮时,一些文本更新会告诉你按下按钮多少次 . 我不知道为什么这段代码不起作用 . 按钮出现但按下时没有任何反应 .

import 'package:flutter/material.dart';

class Homepage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Column(
      children: <Widget>[],
    );
  }
}

class Buttonz extends StatefulWidget {
  @override
  _ButtonBeingPressed createState() => new _ButtonBeingPressed();
}

class _ButtonBeingPressed extends State<Buttonz> {
  int _timesPressed = 0;
  _buttonWasPressed() {
    setState(() {
      _timesPressed++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Column(children: <Widget>[
     new Center(
          child: new Row(
        children: <Widget>[
          new Text(
              'The button was pressed ' + _timesPressed.toString() + "         
 times"),
          new RaisedButton(
            onPressed: _buttonWasPressed(),
           child: new Row(
              children: <Widget>[new Text("Press meh")],
            ),
          ),
        ],
      ))
    ]);
  }
}

4 回答

  • 0

    你的按钮应该是这样的:

    new RaisedButton( 
        child: const Text('Press meh'), 
        onPressed: _buttonWasPressed, 
    ),
    

    如果这不起作用,请尝试使用 flutter clean 清理 flutter 项目,然后在调试设备上重新安装该应用程序 .

  • 5

    onPressed 这样的事件监听器:只接受回调(包括匿名函数) . 因此,您需要将_buttonWasPressed()替换为_buttonWasPressed .

    注意:我观察到扑灭的beta-3,_buttonWasPressed()给出了编译错误 .

  • -2

    你的问题是你没有将回调传递给 RaisedButton ,你调用了你的回调 .

    new RaisedButton(
      onPressed: _buttonWasPressed(), // invokes function
      child: new Row(children: <Widget>[new Text("Press meh")]),
    );
    

    要将回调传递给另一个小部件,您有两个选择:

    通过撕下

    new RaisedButton(
       onPressed: _buttonWasPressed, // no `()`,
       child: ...
     )
    

    传递一个闭包

    new RaisedButton(
       onPressed: () {
         // do something.
       },
       ..
     )
    
  • -2

    添加了一个Material App并重新连接了RaisedButton . 我认为这是你如何连接的.515897_ .

    import 'package:flutter/material.dart';
    
    void main() => runApp(new MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(home: new Buttonz());
      }
    }
    
    class Buttonz extends StatefulWidget {
      @override
      _ButtonBeingPressed createState() => new _ButtonBeingPressed();
    }
    
    class _ButtonBeingPressed extends State<Buttonz> {
      int _timesPressed = 0;
      _buttonWasPressed() {
        setState(() {
          _timesPressed++;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return  new Column(
          children: <Widget>[
            new Text(
                'The button was pressed $_timesPressed times'),
            new RaisedButton(
              child: const Text('Press meh'),
              onPressed: () {
                _buttonWasPressed();
              },
            ),
          ],
        );
      }
    }
    

相关问题