Флаттер: Как мне реализовать список в списке? Ошибка: доступ к элементам stati c возможен в initializers.dart (implicit_this_reference_in_initializer) - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу приложение с продавцами, покупателями и продуктами продавцов.

У меня есть класс с именем product, класс с именем vendor и класс с поставщиком name name, в которые оба класса записаны. Я пишу все классы там.

класс Продукт:

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});
}

Класс ProductsProvider:

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 -> «Только члены stati c могут быть доступны в initializers.dart (implicit_this_reference_in_initializer)»

Поэтому я записываю «stati c» и ошибка исправлена ​​следующим образом:

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();
  }
}

но я боюсь, что при изменении с помощью stati c продавец больше не сможет добавлять новые элементы, редактировать элементы или удалять элементы. Я не прав?

1 Ответ

1 голос
/ 28 апреля 2020

Я думаю, что вы добавили stati c в шрифте неправильной переменной (_profile), он должен быть перед _items, потому что вы используете _items при инициализации другой переменной, такой как _profile.

Stati c переменная означает переменную класса, означает, что любое количество объектов, которые вы создаете для этого класса, но эта переменная будет распределена между всеми этими объектами. Вы можете делать все, например, additem, deleteitem или edit.

Более того, вы не можете получить доступ к переменной _items, используя object. Вы можете получить доступ к этому, используя имя класса.

оформить заказ о Stati c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...