使用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窗口小部件的一些padding,margin和背景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名为ExtendedText的Widget类型和代码看起来像下面,也将努力同我们正常的代码。

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可能会遇到一些问题,因为它无法启用或采用实验中的扩展方法,但它的工作原理dev和masterFlutter 的魅力一样。

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

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

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


分享到:


相關文章: