繁体   English   中英

Flutter, Dart. 创建匿名class

[英]Flutter, Dart. Create anonymous class

也许这真的是个愚蠢的问题。 但我无法相信在描述的地方没有资源。 即使来自官方文档 我正在尝试做的是为下一个 function 创建匿名 class。

在此处输入图像描述

如何使用自定义 function 在 Dart 中创建匿名 class,例如 Kotlin 中的下一个?

Handler(Looper.getMainLooper()).post(Runnable() {
    @override
    open fun run() {
        //...
    }

    private fun local() {
       //....
    }
})

Dart 不支持创建匿名 class。

你试图做的事情是不可能的。

另一方面,您可以创建匿名函数。 所以你可以用它来模仿一个匿名的 class。

想法是添加抽象 class 的构造函数,将其实现推迟到回调。

abstract class Event {
  void run();
}

class _AnonymousEvent implements Event {
  _AnonymousEvent({void run()}): _run = run;

  final void Function() _run;

  @override
  void run() => _run();
}

Event createAnonymousEvent() {
  return _AnonymousEvent(
    run: () => print('run'),
  );
}

它与匿名的 class 并不完全相同,并且更接近于装饰器模式。 但它应该涵盖大多数用例。

这是另一种方法,但不完全等效:

问题,例如:我想在没有 class 的代码中内联实现 OnChildClickListener。对于此方法:

void setOnChildClickListener(OnChildClickListener listener) {
    ...
}

而不是这个:

abstract class OnChildClickListener {
  bool onChildClick(int groupPosition, int childPosition);
}

用这个:

typedef OnChildClickListener = Function(int groupPosition, int childPosition);

在代码中你可以这样实现它:

listView.setOnChildClickListener((int groupPosition, int childPosition) {
  // your code here
});

也就是说不要使用abstract class,而是使用typedef。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM