在初始化器中只能访问静态成员.Dart2.0 [英] Only static members can be accessed in initializer. Dart2.0

查看:53
本文介绍了在初始化器中只能访问静态成员.Dart2.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在有状态的小部件中使用银行清单.使用 List< Bank>将列表传递到 pageState bankLists = this.widget.bankLists;

队列1.为什么在 gradientcolor:gradientBankCard("FFB74093","FFB74093"))上出现错误,为什么只能在初始化程序中访问静态成员?/p>

队列2.如何将const数据传递给 gradientBankCard 方法.例如,我想将 Color.fromRGBO(220,132,58,1.0)传递给给错误的参数.我

  List< Bank>bankLists = [银行(id:"1",名称:"B1",贷款额:₹250000",emi:₹11732",intrest_rate:"11.69%",processing_fee:"1.29%",任期:"2年",gradientcolor:gradientBankCard('#e48634','#e48634')),////错误:只能在初始化程序中访问静态成员银行(id:"2",名称:"B2",贷款额:₹250000",emi:₹11732",intrest_rate:"11.69%",processing_fee:"1.29%",任期:"2年",gradientcolor:gradientBankCard('#e48634','#e48634'))//错误:初始化器中只能访问静态成员]; 

现在我在列表屏幕中使用.

  LinearGradient梯度银行卡(字符串startColor,字符串endColor){返回LinearGradient(开始:Alignment.topLeft,end:Alignment.bottomRight,颜色:[Color(hexToInt(startColor)),Color(hexToInt(endColor))]);} 

Bank Model.dart

  import'package:flutter/material.dart';班级银行{最终的字符串ID;最终的字符串名称;最终的String loanAmount;最终String emi;最后的字符串intrest_rate;最终的String processing_fee;最后的字符串使用权;LinearGradient渐变色;银行({this.id,this.name,this.loanAmount,this.emi,this.intrest_rate,this.processing_fee,this.tenure,this.gradientcolor});} 

解决方案

代码

  gradientcolor:gradientBankCard('#e48634','#e48634')), 

在类完全初始化之前执行.字段的初始化器

  List< Bank>bankLists = [...]; 

是在执行超级构造函数之前执行的,在那时,显式或隐式访问 this.是不允许的,因为它将允许访问未完全初始化的状态.

如果您更改

  LinearGradient gradientBankCard(String startColor,String endColor){... 

 静态LinearGradient梯度BankCard(字符串startColor,字符串endColor){ 

然后无法访问 this.,因此很安全.

I am using banklist in stateful widget. passing list to pageState using List<Bank> bankLists = this.widget.bankLists;

Que 1. Why I am getting error at gradientcolor: gradientBankCard("FFB74093","FFB74093")) that only static members can be accessed in initializer?

Que 2. How to pass const Data to gradientBankCard method . for Example I want to pass Color.fromRGBO(220, 132, 58, 1.0) to Arguments that gives error to. I

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
];

Now I am using in my listing screen .

LinearGradient gradientBankCard(String startColor, String  endColor){

return LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(hexToInt(startColor)),Color(hexToInt(endColor))]
);
}

Bank Model.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});

}

解决方案

The code

gradientcolor: gradientBankCard('#e48634', '#e48634')),

is executed before the class is fully initialized. Initializers of fields like

List<Bank> bankLists = [...];

is executed before the super constructors are executed and at that point explicit or implict access to this. is not allowed because it would allow access to incompletely initialized state.

If you change

LinearGradient gradientBankCard(String startColor, String  endColor){ ...

to

static LinearGradient gradientBankCard(String startColor, String  endColor){

then there is no way to access this. and is therefore safe.

这篇关于在初始化器中只能访问静态成员.Dart2.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆