В инициализаторе доступны только статические члены. Dart2.0

Я использую банклист в виджете с отслеживанием состояния. список прохождения к pageState с помощью List<Bank> bankLists = this.widget.bankLists;

Que 1. Почему я получаю ошибку в gradientcolor: gradientBankCard("FFB74093","FFB74093")) что только статические члены могут быть доступны в инициализаторе?

Que 2. Как передать константные данные в 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))]
);
}

Банк Модель.дарт

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. и поэтому безопасно.

Другие вопросы по тегам