list - Flutter:我如何在列表中实现列表?错误:只能在initializers.dart中访问静态成员(implicit_this_reference_in_initializer)

标签 list flutter dart static-initialization

我想要一个包含卖方,买方和卖方产品的应用程序。

我有一个带有名称产品的类,一个带有名称卖方的类和一个带有名称产品提供者的类,在这两个类中都记录了下来。我把所有的课都写在那里。

类产品:

import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';

class Product with ChangeNotifier {
  final String id;
  final String rubric;
  final Color rubricColor;
  final String title;
  final String imagePath;
  final String description;
  final double price;
  bool isFavouriteProduct;

  Product({
    @required this.id,
    @required this.title,
    @required this.rubric,
    @required this.rubricColor,
    this.imagePath = 'assets/images/defaultpicture.png',
    this.description,
    @required this.price,
    this.isFavouritProduct = false,
  });
}

类卖方:
import 'package:flutter/material.dart';
import '**/providers/product.dart';

class Seller with ChangeNotifier {
  final String id;
  final String title;
  bool isFavourite;

  final List<Product> items;


  Seller({this.id, this.isFavourite, this.items, this.title});
}

类产品提供者:
import 'package:flutter/material.dart';
import '***/providers/seller.dart';
import './product.dart';

class ProductsProvider with ChangeNotifier{

  List<Seller> _profile = [
    Seller(id: '1', isFavourite: false, title: 'Blabla-store', items: _items)
  ];

  List<Product> _items = [
  Product(
    id: 'a1',
    title: 'blablastore',
    rubric: '',
    rubricColor: Colors.orange,
    description: 'blablabla',
    imagePath: 'assets/images/***.jpeg',
    price: 200000.00,
  ),
  Product(
    id: 'a2',
    title: 'blablastore2',
    rubric: '',
    rubricColor: Colors.blue,
    description:
        'blablabla,
    imagePath: 'assets/images/nah.jpg',
    price: 49.99,
  ),
  Product(
    id: 'a3',
    title: 'Mir fällt nix ein',
    rubric: '',
    rubricColor: Colors.redAccent,
    description: 'weiß nicht',
    price: 22.22,
  )
];

  List<Product> get items{
    return [..._items];
  }

  Product findById(String id){
    return _items.firstWhere((product)=> product.id == id);
  }

  void addProduct(){
    notifyListeners();
  }
}

但是在ProductsProvider类中,我通过items属性收到此错误->“只有静态成员可以在initializers.dart(implicit_this_reference_in_initializer)中访问”

所以我写下“静态”,错误是这样修复的:
import 'package:flutter/material.dart';
import '***/providers/seller.dart';
import './product.dart';

class ProductsProvider with ChangeNotifier{

  List<Seller> _profile = [
    Seller(id: '1', isFavourite: false, title: 'Blabla-store', items: _items)
  ];

  static List<Product> _items = [
  Product(
    id: 'a1',
    title: 'blablastore',
    rubric: '',
    rubricColor: Colors.orange,
    description: 'blablabla',
    imagePath: 'assets/images/turkitchdoener.jpeg',
    price: 200000.00,
  ),
  Product(
    id: 'a2',
    title: 'blablastore2',
    rubric: '',
    rubricColor: Colors.blue,
    description:
        'blablabla,
    imagePath: 'assets/images/nah.jpg',
    price: 49.99,
  ),
  Product(
    id: 'a3',
    title: 'Mir fällt nix ein',
    rubric: '',
    rubricColor: Colors.redAccent,
    description: 'weiß nicht',
    price: 22.22,
  )
];

  List<Product> get items{
    return [..._items];
  }

  Product findById(String id){
    return _items.firstWhere((product)=> product.id == id);
  }

  void addProduct(){
    notifyListeners();
  }
}

但是我担心通过静态更改,卖方将无法再添加新项目,编辑项目或删除项目。我错了吗?

最佳答案

我认为您在错误的变量(_profile)的字体中添加了static,它应该在_items的前面,因为您正在使用_items来初始化其他变量,例如_profile。

静态变量表示类变量,表示您为该类创建的任何数量的对象(但该变量)将在所有该对象之间共享。您可以执行所有操作,例如additem,deleteitem或edit。

此外,您不能使用object访问_items变量。您可以使用类名来访问它。

进一步了解Static

关于list - Flutter:我如何在列表中实现列表?错误:只能在initializers.dart中访问静态成员(implicit_this_reference_in_initializer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61487760/

相关文章:

python - 给定两个列表,没有得到创建元组列表的正确输出

python - 如何对项目 :value list using another list with just items? 进行子集化

flutter - 有没有可以在 IOS 和 Android 设备上使用的 flutter-bluetooth-serial 包的替代方案?

flutter - 在 Flutter 中有条件地锁定设备方向

flutter - Flutter-如何在streambuilder中使用await?

java - 如何检查无效输入并循环直到输入有效?

python - 将列表的列表转换为对象

android - 如何使用singleWhere .. flutter访问列表内的项目

flutter - flutter :使页面导航手势与自定义手势共存

dart - 使用 source_gen 如何使用扩展注释调用生成器?