是的,您可以使用PageRouteBuilder 来实现,也可以使用AlertDialog 小部件来避免所有对话框自定义,如下所示:
class SamplePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AlertDialog(
content: SizedBox(
//HERE THE SIZE YOU WANT
height: MediaQuery.of(context).size.height / 2,
width: MediaQuery.of(context).size.width / 2,
//your content
child: Center(
child: RaisedButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text("Hello world"),
),
),
),
);
}
}
并以这种方式打开您的对话框:
Navigator.push(
context,
PageRouteBuilder(
barrierDismissible: true,
opaque: false,
pageBuilder: (_, anim1, anim2) => SamplePage(),
),
);
当然,您可以通过非常简单的方式使用过渡添加一些额外的动画:
淡出
Navigator.push(
context,
PageRouteBuilder(
barrierDismissible: true,
opaque: false,
pageBuilder: (_, anim1, anim2) =>
FadeTransition(
opacity: anim1,
child: SamplePage(),
),
),
);
幻灯片
Navigator.push(
context,
PageRouteBuilder(
barrierDismissible: true,
opaque: false,
pageBuilder: (_, anim1, anim2) =>
SlideTransition(
position: Tween<Offset>(
begin: Offset(0.0, 1.0),
end: Offset.zero)
.animate(anim1),
child: SamplePage(),
),
),
);
或者创建您自己的过渡。