Flutter : 创建一个覆盖进度条

Posted

技术标签:

【中文标题】Flutter : 创建一个覆盖进度条【英文标题】:Flutter : create an overlay progress bar 【发布时间】:2020-02-05 05:36:54 【问题描述】:

如何在 Flutter 中创建覆盖页面。

基本上,今天我的页面中心有一个微调器。现在,我希望当前页面淡出(90% 不透明度)并在我按下按钮时显示动画点

不知道该怎么做。

感谢您的帮助

【问题讨论】:

见api.flutter.dev/flutter/widgets/Overlay-class.html 您可以使用堆栈小部件并将背景颜色不透明度设置为堆栈中的最后一个小部件。 【参考方案1】:

试试这个。

        class SamplePage extends StatefulWidget 
        @override
        _SamplePageState createState() => _SamplePageState();
        

        class _SamplePageState extends State<SamplePage> 
        ProgressBar _sendingMsgProgressBar;

        @override
        void initState() 
            super.initState();
            _sendingMsgProgressBar = ProgressBar();
        

        @override
        void dispose() 
            _sendingMsgProgressBar.hide();
            super.dispose();
        

        void showSendingProgressBar() 
            _sendingMsgProgressBar.show(context);
        

        void hideSendingProgressBar() 
            _sendingMsgProgressBar.hide();
        

        @override
        Widget build(BuildContext context) 
            return Scaffold(
            appBar: AppBar(
                title: Text('Progress Demo'),
            ),
            body: Center(
                child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                    RaisedButton(
                    child: Text("Start Progress"),
                    onPressed:()
                        showSendingProgressBar();
                        Future.delayed(const Duration(milliseconds: 3000), () 
                        setState(() 
                            hideSendingProgressBar();
                        );
                        );
                    ,
                    )
                ],
                ),
            ),
            );
        
        

进度条类

        import 'package:flutter/material.dart';

        class ProgressBar 
        
        OverlayEntry _progressOverlayEntry;
        
        void show(BuildContext context)
            _progressOverlayEntry = _createdProgressEntry(context);
            Overlay.of(context).insert(_progressOverlayEntry);
        
        
        void hide()
            if(_progressOverlayEntry != null)
            _progressOverlayEntry.remove();
            _progressOverlayEntry = null;
            
        
        
        OverlayEntry _createdProgressEntry(BuildContext context) =>
            OverlayEntry(
                builder: (BuildContext context) =>
                    Stack(
                        children: <Widget>[
                        Container(
                            color: Colors.lightBlue.withOpacity(0.5),
                        ),
                        Positioned(
                            top: screenHeight(context) / 2,
                            left: screenWidth(context) / 2,
                            child: CircularProgressIndicator(),
                        )

                        ],

                    )
            );

        double screenHeight(BuildContext context) =>
            MediaQuery.of(context).size.height;

        double screenWidth(BuildContext context) =>
            MediaQuery.of(context).size.width;
        
        

【讨论】:

我可以在未来的构建器中使用它吗? 我已经尝试过未来的建设者,但没有成功。 您需要为不可为空的变量更新代码

以上是关于Flutter : 创建一个覆盖进度条的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 进度条

Flutter学习日记之进度条的使用

Flutter Web 多部分formdata文件上传进度条

Flutter 自定义实现时间轴侧边进度条

iOS 制作个圆形进度条

如何在 wpf 中制作多色分段进度条?