我正在try 在dart中制作一个自定义对话框的动画,这样当它弹出时,就可以创建一些动画.Android中有一个有动画对话框的库,Flutter Sweet Alert Dialog中有没有类似的库

我们如何在Flutter 中实现相同的功能?

推荐答案

要创建对话框,可以使用Overlay or Dialog类.如果您想要添加类似于给定框架中的动画,您可以使用AnimationController,如下例所示.CurvedAnimation类用于在动画上创建反弹效果.

Update:一般来说,最好用showDialog函数来显示对话框,因为关闭和手势都是由FIFTH处理的.我已经更新了示例,它现在以showDialog运行,您可以通过点击背景来打开close对话框.

Bouncing Dialog Animation

您可以将以下代码复制粘贴到新项目中并对其进行调整(&;P).它可以自己运行.

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(title: 'Flutter Demo', theme: ThemeData(), home: Page());
  }
}

class Page extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton.icon(
            onPressed: () {
              showDialog(
                context: context,
                builder: (_) => FunkyOverlay(),
              );
            },
            icon: Icon(Icons.message),
            label: Text("PopUp!")),
      ),
    );
  }
}

class FunkyOverlay extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => FunkyOverlayState();
}

class FunkyOverlayState extends State<FunkyOverlay>
    with SingleTickerProviderStateMixin {
  AnimationController controller;
  Animation<double> scaleAnimation;

  @override
  void initState() {
    super.initState();

    controller =
        AnimationController(vsync: this, duration: Duration(milliseconds: 450));
    scaleAnimation =
        CurvedAnimation(parent: controller, curve: Curves.elasticInOut);

    controller.addListener(() {
      setState(() {});
    });

    controller.forward();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Material(
        color: Colors.transparent,
        child: ScaleTransition(
          scale: scaleAnimation,
          child: Container(
            decoration: ShapeDecoration(
                color: Colors.white,
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(15.0))),
            child: Padding(
              padding: const EdgeInsets.all(50.0),
              child: Text("Well hello there!"),
            ),
          ),
        ),
      ),
    );
  }
}

Flutter相关问答推荐

ListView内的ListView正在一次构建所有项目

Cupertino Buttino SheetAction on按下可触发加载指示器,然后勾选并延迟

在Flutter中,有没有一种方法可以点击页面到后面的页面?

如何在不使用NULL-check(!)的情况下缩小`FutureBuilder.Builder()`内部的`Snaphot`范围

DART 3.3:为什么扩展类型不起作用?

悬停时打开Flutter 下拉按钮

在Flutter 中创建自定义形状

如何在 Flutter 中创建具有渐变背景色的自定义 Snackbar?

Flutter:我的应用程序是否需要包含退款购买?

在 Dart 中按土耳其语字母顺序对字符串进行排序

仅在获取(读取)、Provider 时,Firestore 中的数据为空

Riverpod中stateNotiferProvider和notifierProvider的区别

使 Row 中的元素保持在中间的空间,如果它们太大,则将它们包裹起来

如何正确地将 PageView 设置为 AppBar 的标题?

是否有可能减少代码的编写,例如:ref.read(countProvider.notifier) - 在构建方法中?

如何在 flutter 中使用带有有效负载数据的重定向来执行 firebase 推送通知.?

如何在 flutter 中使用 tabbar 作为底部导航栏?

Getx Flutter 在更新值时抛出空错误

无法列出 com.facebook.android:facebook-login -Facebook 登录问题的版本

将容器扩展到安全区域 - Flutter