无法按下按钮以便在颤动中工作

时间:2018-05-16 00:30:07

标签: dart flutter

好的,我很擅长扑扑/飞镖,所以对我很轻松。我只想尝试创建一个非常简单的应用程序,当您按下按钮时,会有一些文本更新告诉您按下按钮的次数。我不知道为什么这段代码不起作用。按钮出现但按下时没有任何反应。

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 :(得分:5)

您的问题是您没有将回调传递给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.
   },
   ..
 )

答案 1 :(得分:0)

添加了一个Material App并重新连接了RaisedButton。我认为这就是onPressed连线的方式。

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();
          },
        ),
      ],
    );
  }
}

答案 2 :(得分:0)

在某些情况下,这可能与堆栈中的小部件一起发生。

该Widget可能被另一个Widget覆盖,因此无法单击它。

答案 3 :(得分:-2)

你的按钮应该是这样的。:

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

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