【问题标题】:Only static members can be accessed in initializer. Dart2.0在初始化程序中只能访问静态成员。 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});

}

【问题讨论】:

    标签: dart flutter dart-2


    【解决方案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 更复杂。
    • 非常感谢。
    猜你喜欢
    • 2020-01-05
    • 2018-11-13
    • 1970-01-01
    • 2020-08-31
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多