簡體   English   中英

Dart(/ Flutter):在初始化列表中創建函數

[英]Dart(/Flutter): Create function in initializer list

我正在用多個構造函數實現一個類,該類在內部圍繞IndexedWidgetBuilder(一個函數對象)構建

typedef IndexedWidgetBuilder = Widget Function(BuildContext context, int index);

現在,一個MyWidget.list的構造MyWidget.list將收到一個列表myListmyList創建IndexedWidgetBuilder myBuilder

IndexedWidgetBuilder myBuilder
  = (BuildContext context, int index) => list[index % list.length];

雖然僅此代碼段即可完美工作,但我無法在構造函數的初始化列表中使用此代碼段。 一個最小的工作示例如下

class MyApp {
  // Default constructor goes here

  MyApp.list(List<int> myList) :
    myBuilder = (BuildContext context, int index) => list[index % list.length];

  final IndexedWidgetBuilder myBuilder;
}

在Android Studio中,此代碼段會產生錯誤:

初始化類型'Type'不能分配給字段類型'(BuildContext,int)→Widget'。

我沒有在Google上找到任何相關信息,語言文檔也未提供有用的信息。 刪除final關鍵字並將所有內容移到構造函數的代碼塊中將是一個解決方案,盡管我只考慮萬不得已。


注意:這不是直接的抖動問題,因為它發生在每個功能對象上。

將函數括在括號中似乎可以消除警告。 雖然將其改為說括號是多余的!

  MyApp.list(List<Widget> list)
      : myBuilder =
            ((_, int index) => list[index % list.length]);

注意上下文是如何未使用的。 這意味着您的預構建窗口小部件無法訪問它,這意味着它們不能將其用於任何.of()派生用途。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM