我已经转为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类,而是在类型上创建了一个extension
named ,然后用于获取当前实例。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
和master
Flutter 的魅力一样。
就是这样,我们可以在另一篇文章中深入讨论“ extension methods”。
祝您有个愉快而有趣的一天。
翻译自:https://medium.com/flutter-community/using-extension-methods-in-flutter-612b8db532ae
网友评论