在初始化程序中只能访问静态成员。 Dart2.0
Posted
技术标签:
【中文标题】在初始化程序中只能访问静态成员。 Dart2.0【英文标题】:Only static members can be accessed in initializer. Dart2.0 【发布时间】:2019-01-23 04:12:03 【问题描述】:我在有状态小部件中使用银行列表。使用List<Bank> bankLists = this.widget.bankLists;
将列表传递给pageState
问题 1. 为什么我在 gradientcolor: gradientBankCard("FFB74093","FFB74093"))
收到错误,即只能在初始化程序中访问静态成员?
阙2.如何将 const 数据传递给gradientBankCard
方法。例如,我想将Color.fromRGBO(220, 132, 58, 1.0)
传递给导致错误的参数。
我
List<Bank> bankLists = [
Bank(
id: "1",
name: "B1",
loanAmount: "₹ 250000",
emi: "₹11732",
intrest_rate: "11.69 % ",
processing_fee: "1.29 %",
tenure: "2 years",
gradientcolor: gradientBankCard('#e48634', '#e48634')), // //Error : Only static members can be accessed in initializers
Bank(
id: "2",
name: "B2",
loanAmount: "₹ 250000",
emi: "₹11732",
intrest_rate: "11.69 % ",
processing_fee: "1.29 %",
tenure: "2 years",
gradientcolor: gradientBankCard('#e48634', '#e48634')) //Error : Only static members can be accessed in initializers
];
现在我在我的列表屏幕中使用。
LinearGradient gradientBankCard(String startColor, String endColor)
return LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [Color(hexToInt(startColor)),Color(hexToInt(endColor))]
);
银行模型.dart
import 'package:flutter/material.dart';
class Bank
final String id;
final String name;
final String loanAmount;
final String emi;
final String intrest_rate;
final String processing_fee;
final String tenure;
LinearGradient gradientcolor;
Bank(this.id, this.name, this.loanAmount, this.emi, this.intrest_rate,
this.processing_fee, this.tenure,this.gradientcolor);
【问题讨论】:
【参考方案1】:代码
gradientcolor: gradientBankCard('#e48634', '#e48634')),
在类完全初始化之前执行。 像
这样的字段的初始化器List<Bank> bankLists = [...];
在超级构造函数执行之前执行,此时不允许显式或隐式访问this.
,因为它会允许访问未完全初始化的状态。
如果你改变了
LinearGradient gradientBankCard(String startColor, String endColor) ...
到
static LinearGradient gradientBankCard(String startColor, String endColor)
那么就无法访问this.
,因此是安全的。
【讨论】:
所以在这种情况下我必须为此使用静态?如果我想在创建正文容器之前创建或键入任何小部件。该怎么做? 您可以将初始化移动到构造函数主体,那里已经允许引用this.
。如果你想让字段final
更复杂。
非常感谢。以上是关于在初始化程序中只能访问静态成员。 Dart2.0的主要内容,如果未能解决你的问题,请参考以下文章