加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

飞镖 – 如何在颤动中制作全屏幕对话框?

发布时间:2020-12-14 14:56:16 所属栏目:百科 来源:网络整理
导读:我想制作一个全屏对话框.对话框背景必须是不透明的. 这是一个例子: 如何在Flutter中制作这样的? 解决方法 您可以使用导航器推送半透明的 ModalRoute : import 'package:flutter/material.dart';class TutorialOverlay extends ModalRoutevoid { @override
我想制作一个全屏对话框.对话框背景必须是不透明的.
这是一个例子:

enter image description here

如何在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'),);
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读