Flutter - 使用extension-methods

我已经转为Flutter的专业Flutter开发人员,并且我很喜欢它,但我来自Android背景并且也很喜欢Kotlin语言,确实错过了Dart中Kotlin语言的某些功能。

其中之一是“ extension methods”。

随着Dart 2.6的到来,它具有实现类似于Kotlin一样的extension methods的功能。

在本文中,我将解释如何在Flutter应用程序中使用“extension methods”。

extension methods

让我们看看什么是extension methods以及它们的作用。

简而言之,如果我向您解释,那么“它将摆脱您一直在创建的许多静态方法中的Utility类的使用。”

概括地说,“ extension methods是在原始对象编译后添加到对象的方法。”

让我们看一下我们当前正在使用的实用工具类的示例代码。

void main() {
  print(Util.firstLetterToUpperCase('someString'));
}

class Util {
  static String firstLetterToUpperCase(String someString) {
    if (someString != null)
      return someString[0].toUpperCase() + someString.substring(1);
    else
      return null;
  }
}

在上面的代码中,我将的第一个字母转换String为大写。

让我们看看extension methods如何帮助我们摆脱这种静态方法。

void main() {
  print('someString'.firstLetterToUpperCase());
}

extension StringExtension on String{
  get firstLetterToUpperCase {
    if (this != null)
      return this[0].toUpperCase() + this.substring(1);
    else
      return null;
  }
}

我们在这里所做的是,不是创建Util类,而是在类型上创建了一个extensionnamed ,然后用于获取当前实例。StringExtension``String``this

您还可以为double/ 等任何类型创建扩展方法,int或者我应该说一个num

但是Flutter呢? 是否可以为小部件创建“extension methods”?

答案是肯定的...

让我们看看如何...

我们要创建一个Text窗口小部件的一些paddingmargin和背景color以及这样做,我们将使用一个Container小部件的父部件Text

代码将如下所示:

    Container(
      padding: const EdgeInsets.all(16),
      margin: const EdgeInsets.all(16),
      color: Colors.yellow,
      child: Text('Extended Text'),
    )

现在,让我们尝试Text使用extension methods来创建它。

为此,我们要创建一个extension名为ExtendedTextWidget类型和代码看起来像下面,也将努力同我们正常的代码。

Text('Extended Text').addContainer();

extension ExtendedText on Widget {
  addContainer(){
    return Container(
      padding: const EdgeInsets.all(16),
      margin: const EdgeInsets.all(16),
      color: Colors.yellow,
      child: this,
    );
  }
}

现在,您可以仅用一行代码包装Text小部件,Container这将使您的代码更具可读性。

注意:在Flutter for the Stable 通道中,extension methods仅作为实验提供,因此您需要在analysis_options.yaml文件中启用它。如果您没有此文件,请在Flutter应用的根目录中创建,然后添加以下代码,然后开始使用。

analyzer:
  enable-experiment:
    - extension-methods

另外,Dart可能会遇到一些问题,因为它无法启用或采用实验中的扩展方法,但它的工作原理devmasterFlutter 的魅力一样。

就是这样,我们可以在另一篇文章中深入讨论“ extension methods”。

祝您有个愉快而有趣的一天。

翻译自:https://medium.com/flutter-community/using-extension-methods-in-flutter-612b8db532ae

你可能感兴趣的:(Flutter - 使用extension-methods)