在初始化程序中只能访问静态成员。 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的主要内容,如果未能解决你的问题,请参考以下文章

03 Java static 和 final

C++面向对象-static、const

C++面向对象:静态成员和静态成员函数

C++类中的静态成员函数以及静态成员变量

C++类中的静态成员函数以及静态成员变量

代码块