gpt4 book ai didi

dart - Flutter 自定义动画对话框

转载 作者:IT老高 更新时间:2023-10-28 12:35:04 31 4
gpt4 key购买 nike

我正在尝试为 dart 中的自定义对话框设置动画,以便在弹出时创建一些动画。 Android 中有一个带有动画对话框的库,Flutter 中有没有类似的库 Sweet Alert Dialog

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

最佳答案

要创建对话框,您可以使用 Overlay Dialog类。如果你想在给定的框架中添加动画,你可以使用 AnimationController就像下面的例子一样。 CurvedAnimation类用于在动画上创建弹跳效果。

更新: 一般情况下,最好使用 showDialog 显示对话框。函数,因为关闭和手势是由 Flutter 处理的。我已经更新了示例,它现在使用 showDialog 运行,您可以通过点击背景关闭对话框。

Bouncing Dialog Animation

您可以将以下代码复制并粘贴到新项目中并进行调整。它可以自己运行。

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!"),
),
),
),
),
);
}
}

关于dart - Flutter 自定义动画对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52408610/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com