簡體   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