飞镖 – 如何在颤动中制作全屏幕对话框?
发布时间:2020-12-14 14:56:16 所属栏目:百科 来源:网络整理
导读:我想制作一个全屏对话框.对话框背景必须是不透明的. 这是一个例子: 如何在Flutter中制作这样的? 解决方法 您可以使用导航器推送半透明的 ModalRoute : import 'package:flutter/material.dart';class TutorialOverlay extends ModalRoutevoid { @override
我想制作一个全屏对话框.对话框背景必须是不透明的.
这是一个例子: 如何在Flutter中制作这样的? 解决方法
您可以使用导航器推送半透明的
ModalRoute :
import 'package:flutter/material.dart'; class TutorialOverlay extends ModalRoute<void> { @override Duration get transitionDuration => Duration(milliseconds: 500); @override bool get opaque => false; @override bool get barrierDismissible => false; @override Color get barrierColor => Colors.black.withOpacity(0.5); @override String get barrierLabel => null; @override bool get maintainState => true; @override Widget buildPage( BuildContext context,Animation<double> animation,Animation<double> secondaryAnimation,) { // This makes sure that text and other content follows the material style return Material( type: MaterialType.transparency,// make sure that the overlay content is not cut off child: SafeArea( child: _buildOverlayContent(context),),); } Widget _buildOverlayContent(BuildContext context) { return Center( child: Column( mainAxisSize: MainAxisSize.min,children: <Widget>[ Text( 'This is a nice overlay',style: TextStyle(color: Colors.white,fontSize: 30.0),RaisedButton( onPressed: () => Navigator.pop(context),child: Text('Dismiss'),) ],); } @override Widget buildTransitions( BuildContext context,Widget child) { // You can add your own animations for the overlay content return FadeTransition( opacity: animation,child: ScaleTransition( scale: animation,child: child,); } } // Example application: void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Playground',home: TestPage(),); } } class TestPage extends StatelessWidget { void _showOverlay(BuildContext context) { Navigator.of(context).push(TutorialOverlay()); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Test')),body: Padding( padding: EdgeInsets.all(16.0),child: Center( child: RaisedButton( onPressed: () => _showOverlay(context),child: Text('Show Overlay'),); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容