我需要提醒用户注意一个按钮.我想到的第一个 idea 是添加一个 blink 动画.我真的不知道如何做到这一点,但我try 使用以下代码使其工作:

Timer timer = new Timer(new Duration(seconds: 1), () {
  //basic logic to change the color variable here
  setState(() {});
});

这很简单,每秒钟调用一次setState,然后再次创建小部件.

但它不工作,计时器只被调用一次.而且,除此之外,在Timer以内拨打setState对我来说似乎是错误的.

有没有更好的办法来解决这个问题?

推荐答案

您可以使用AnimationControllerFadeTransition小部件以一种简单的方式实现这一点,下面是代码:

  class MyBlinkingButton extends StatefulWidget {
    @override
    _MyBlinkingButtonState createState() => _MyBlinkingButtonState();
  }

  class _MyBlinkingButtonState extends State<MyBlinkingButton>
      with SingleTickerProviderStateMixin {
    AnimationController _animationController;

    @override
    void initState() {
      _animationController =
          new AnimationController(vsync: this, duration: Duration(seconds: 1));
      _animationController.repeat(reverse: true);
      super.initState();
    }

    @override
    Widget build(BuildContext context) {
      return FadeTransition(
        opacity: _animationController,
        child: MaterialButton(
          onPressed: () => null,
          child: Text("Text button"),
          color: Colors.green,
        ),
      );
    }

    @override
    void dispose() {
      _animationController.dispose();
      super.dispose();
    }
  }

用法:

main() {
  runApp(
    MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Material(
        child: Center(
          child: MyBlinkingButton(),
        ),
      ),
    ),
  );
}

DartPad example

结果:

enter image description here

Flutter相关问答推荐

如何让GridView.builder用另外两个小部件来占据屏幕的剩余部分

类型int不是可迭代动态tmdbapi类型的子类型<>

允许冻结在初始化时使用工厂

在创建肘部并使用冻结时,无法使用中的Copy With方法

TextFormfield无法与自动路由一起正常工作

在Flutter 中实现中小型应用程序栏标题

Flutter API请求BadState响应

为什么用户界面不会在Flight中的复选框中更改?

Flutter卡内容未在水平列表视图中居中

Flutter:注册 UI 出现 UI 问题(将注册框提升到顶部并向电话号码 pin 码添加一个框)

模块是使用不兼容的 kotlin 版本编译的.其元数据的二进制版本是1.8.0,预期版本是1.6

围绕父组件旋转位置组件

我可以在列表图块下方添加其他小部件吗

小部件堆栈未显示顶层

如何使用 riverpod_annotation 创建非自动处置提供程序?

如何建立最近的文件列表?

通过点击缩略图加载全屏图像

我无法从 Cloud firestore 访问文档字段并在 statefulwidget 类中显示它

在 Flutter 中,您什么时候应该更喜欢Widget继承而不是组合?

如何在 Flutter 中创建类似箭头标签的设计