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

Posted

技术标签:

【中文标题】在 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 和 Dart 中重构小部件的最优雅/高效的方式的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个 dart 文件中调用有状态小部件(有表单)方法?- Flutter

从原生 Android 主屏幕小部件调用 Flutter (Dart) 代码

Dart/flutter 小部件测试,无论是按键还是文本都找不到文本小部件

Flutter/Dart:将参数传递给有状态的小部件?

Flutter/Dart 如何将索引从 Listview.builder 传递到项目小部件

VS Code 和 Flutter/Dart,小部件自动完成功能不起作用