Flutter 重构:基于 PopupRoute 的极简弹窗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter 重构:基于 PopupRoute 的极简弹窗相关的知识,希望对你有一定的参考价值。

参考技术A 这可能是颗粒度最好的 PopupRoute 弹窗封装。

Flutter 需要自定义各式各样的弹窗视图,总是有些场景系统提供的无法满足需求,随使用弹出路由 PopupRoute 进行封装;核心是继承 PopupRoute 进行容器化封装,将 视图 child 抽出,用户可以传入任意 Widget, 通过 Alignment 调整 child 视图显示位置;

NNPopupRoute.dart

NNAlertDialog.dart

在 Flutter 和 Dart 中重构小部件的最优雅/高效的方式

【中文标题】在 Flutter 和 Dart 中重构小部件的最优雅/高效的方式【英文标题】:Most elegant/efficient way to refactor widgets in Flutter and Dart 【发布时间】:2020-04-17 22:28:56 【问题描述】:

在网上搜索“如何重构 Flutter 小部件”,我发现存在两种可能的方式,根据我的测试,它们都可以正常工作,但从结构的角度来看仍然非常不同。第二种方法,确实包含了额外的构建指令,应该会给应用性能带来更大的负担吧?

这是我要重构的代码:

Container(
    child: Column(
        children: <Widget> [
            [long code to create a button with many properties],
            [long code to create a button with many properties],
            [long code to create a button with many properties],
            [long code to create a button with many properties],
        ],),);

这些是我发现的主要方式:

1):

Widget MyButton(Color color, String text) 
    return [long code to create a button with many properties];

2):

class MyButton extends StatelessWidget 
    MyButton(this.color, this.text);

    final Color color;
    final String text;

    @override
    Widget build(BuildContext context) 
        return [long code to create a button with many properties];
    

哪种方法最好?

【问题讨论】:

【参考方案1】:

请查看并考虑这个其他问题:

What is the difference between functions and classes to create reusable widgets?

简答:第二种方法更好(既高效又优雅)。


第一种方法(提取到函数)中,您只是创建了一个返回封装小部件的函数。

第二种方法(提取到类)中,您将小部件提取到从StatelessWidget 扩展的新类。这种差异为 Flutter 框架提供了一种优化方式。

【讨论】:

以上是关于Flutter 重构:基于 PopupRoute 的极简弹窗的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 无法在路线之间保持焦点

Flutter新锐专家之路:工程研发体系篇

无法在 Flutter 中用阴影重构颜色

如何在 Flutter 中重构一个函数

在 Flutter 和 Dart 中重构小部件的最优雅/高效的方式

从零学习Fluter:Flutter仿boss直聘v1.0重构