欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Flutter基于DartUnwrappingMultipleOptional小技巧,

来源: 开发者 投稿于  被查看 3238 次 评论:267

Flutter基于DartUnwrappingMultipleOptional小技巧,


目录
  • 正文
  • withAll函数
    • 测试一下

正文

接收到这样一个需求,就是英文名字中firstName和lastName,其中任何一个为null,就返回Empty。

刚拿到需求,这不简单,if判断不就可以了

if (firstName == null || lastName == null) {
    return 'Empty';
} 
return '$firstName $lastName';

确实,30秒搞定了。

withAll函数

自己想能不能再有更好一点的思路呢?可以更拓展一点的, 例如说三个字符串呢? 例如不是字符串,而是Object类型的呢?

于是就有了下面的代码

提供一个withAll函数,这个函数检查整个列表的空值,如果发现任何空值,回调将不会被调用,如果列表没有空值,回调将调用整个列表转换为非可选项列表T

T? withAll<T>(
    List<T?> optionals,
    T Function<List<T>> callback,
) => optionals.any((e) => e == null)
        ? null
        : callback(optionals.cast<T>());

然后添加一个方法,调用withAll函数,为他提供可选值列表,只有当列表不包含任何空值的时候才会调用回调

String getFullName(
    String? firstName,
    String? lastName,
) => withAll([
        firstName,
        lastName,
    ], (names) => names.join(' ')) ?? 'Empty';

测试一下

void main(List<String> args) {
    print(getFullName(null, null));// Empty
    print(getFullName('John', null));// Empty
    print(getFullName(null, 'Deo'));// Empty 
    print(getFullName('John', 'Deo'));// John Deo
}

哈哈,这代码可拓展性一下子就上来了,而且特别像官方API。

今天增加了一个让别人看不懂代码的小思考。

以上就是Flutter基于Dart Unwrapping Multiple Optional小技巧的详细内容,更多关于Flutter Dart Multiple Optional的资料请关注3672js教程其它相关文章!

您可能感兴趣的文章:
  • SafeList in Flutter and Dart小技巧
  • Flutter入门学习Dart语言变量及基本使用概念
  • 详解Flutter中Dart集合使用教程
  • 详解Flutter和Dart取消Future的三种方法
  • Flutter Recovering Stream Errors小技巧
  • Flutter Reusable Lottie Animations技巧
  • Presenting Streams in Flutter小技巧

用户评论