If we create a 2d/3d list by this way:
List recipes = List.generate(
999,
(i) => List.generate(
999,
(i) => List<Ingredient>.filled(
0,
Ingredient(
name: '',
carbohydrates: 0,
proteins: 0,
lipids: 0,
fibers: 0),
growable: true)));
Please assume that Ingredient is a simple Class.
When we try to access it:
print(recipes[0][0][0].name);
Arriving at this point:
print(recipes[0][0][0].
We need to see (access) the Class properties (like kcal, name, carbohydrates…); exactly as in a one dimension list.
However, at least in VS Code, the code editor display this only: hashCode, runtimeType, toString(), noSuchMethod(…)
When I try to create the list by this way:
List<List<List<Ingredient>>> ingredient =
List.generate(999, (index) => [[]], growable: true);
This bug does not exists, but I have no idea on how to fill (give a dimension and class) the first and the second list…
My first goal is not to lose the autocomplete function (by the editor) because it’s too hard to remember every List.properties/funcions by mind.
The Ingredient Class:
class Ingredient {
String? name;
int? kcal;
int? carbohydrates;
int? proteins;
int? lipids;
int? fibers;
Ingredient(
{this.name,
this.kcal,
this.carbohydrates,
this.proteins,
this.lipids,
this.fibers});
}
2
Answers
Found the correct way (and tested). I leave it here as for other people:
The editor works as expected and the List is really multi dimensional and iterable.
This type of list is:
List[int][int][Ingredient(int)].classProperties
You can use
var
orfinal
, and it’ll automatically know type of list from assigned value. But explicitly writing only a List will not work.