singlewhere print index from dartlang dart

print - ¿Cómo extiendo una lista en Dart?



print list flutter (2)

Quiero crear una lista más especializada en dardo. No puedo extender directamente la List . ¿Cuáles son mis opciones?


Hay una clase ListBase en dart: collection. Si extiendes esta clase, solo necesitas implementar:

  • get length
  • set length
  • []=
  • []

Aquí hay un ejemplo:

import ''dart:collection''; class FancyList<E> extends ListBase<E> { List innerList = new List(); int get length => innerList.length; void set length(int length) { innerList.length = length; } void operator[]=(int index, E value) { innerList[index] = value; } E operator [](int index) => innerList[index]; // Though not strictly necessary, for performance reasons // you should implement add and addAll. void add(E value) => innerList.add(value); void addAll(Iterable<E> all) => innerList.addAll(all); } void main() { var list = new FancyList(); list.addAll([1,2,3]); print(list.length); }


Para hacer una List implementos de clase hay varias maneras:

import ''dart:collection''; class MyCustomList<E> extends ListBase<E> { final List<E> l = []; MyCustomList(); void set length(int newLength) { l.length = newLength; } int get length => l.length; E operator [](int index) => l[index]; void operator []=(int index, E value) { l[index] = value; } // your custom methods }

import ''dart:collection''; class MyCustomList<E> extends Base with ListMixin<E> { final List<E> l = []; MyCustomList(); void set length(int newLength) { l.length = newLength; } int get length => l.length; E operator [](int index) => l[index]; void operator []=(int index, E value) { l[index] = value; } // your custom methods }

import ''package:quiver/collection.dart''; class MyCustomList<E> extends DelegatingList<E> { final List<E> _l = []; List<E> get delegate => _l; // your custom methods }

import ''package:collection/wrappers.dart''; class MyCustomList<E> extends DelegatingList<E> { final List<E> _l; MyCustomList() : this._(<E>[]); MyCustomList._(l) : _l = l, super(l); // your custom methods }

Dependiendo de su código, cada una de esas opciones tiene sus ventajas. Si envuelve / delega una lista existente, debe usar la última opción. De lo contrario, use una de las dos primeras opciones según su jerarquía de tipos (la mezcla permite extender otro objeto).