FloatingActionButton onPressed不触发

时间:2019-02-12 15:47:29

标签: flutter floating-action-button

希望这里是一个简单的

我有一些浮动按钮,它们带有动画。它们似乎没有触发我的onPressed代码,尽管我在日志中确实获得了“ ViewPostImeInputStage processPointer 0”和1类事件,但似乎什么也没做。

一个按钮:

Widget dice() {
  return Container(
    child: FloatingActionButton(
      elevation: 5.0,
      backgroundColor: Theme.of(context).accentColor,
      heroTag: null,
      onPressed: _rollDice,
      tooltip: 'Inbox',
      child: SizedBox(
        height: 32,
        width: 32,
        child: Image.asset('lib/images/dice_button.png'),
      ),
    ),
  );
}

应该触发的方法:

_rollDice() {
  print('Dice pressed');
  int rng = new Random().nextInt(20);
  print(rng.toString());
}

按三次按钮的输出:

D/ViewRootImpl@b9525ac[MainActivity](11404): ViewPostImeInputStage processPointer 0
D/ViewRootImpl@b9525ac[MainActivity](11404): ViewPostImeInputStage processPointer 1
D/ViewRootImpl@b9525ac[MainActivity](11404): ViewPostImeInputStage processPointer 0
D/ViewRootImpl@b9525ac[MainActivity](11404): ViewPostImeInputStage processPointer 1
D/ViewRootImpl@b9525ac[MainActivity](11404): ViewPostImeInputStage processPointer 0
D/ViewRootImpl@b9525ac[MainActivity](11404): ViewPostImeInputStage processPointer 1

预期输出:

Dice pressed
11
Dice pressed
2
Dice pressed
18

我在这里做任何傻事吗?

2 个答案:

答案 0 :(得分:0)

这里的问题是这是一个已转换的按钮。尽管这绝对没有什么区别,但是有关此确切问题的线程很多。如果通过将按钮转换到新位置来移动按钮,则该按钮的可单击区域将保留在其原始位置。

是的,我正确地说了。如果您在屏幕的左上角有一个按钮,并将其转换为右下角,则您将不再能够在新位置单击该按钮,因为该按钮认为它仍在左上角。 >

这绝对是智障和不可行的。

对我来说,解决方法是在目标位置上覆盖一些不透明的小部件,这些小部件不可见,而在这些小部件上触发onclick事件。我见过一个开发人员的帖子,称此大型错误“按预期工作”,因此,即使整个社区都在呼吁这样做,也不要指望它很快得到解决。

答案 1 :(得分:0)

如果您在Stack中使用AnimatedBuider,请用大的Container包装。在我的情况下,一个200x200的容器可以工作。大小取决于您的过渡。 另外,您可以通过更改堆栈的alignment属性来将按钮放置在任何地方。