Why do I need to declare a variable of type int called "idx" if it does not serve any purpose in the generate funciton below?
Random r2 = new Random();
var list = List<int>.generate(5, (int idx) => r2.nextInt(100));
If I do not declare it dart gives me the following error
The argument type 'int Function()' can't be assigned to the parameter type 'int Function(int)'
CodePudding user response:
The List.generate
has been defined as
List.generate(int length, E generator(int index),
{bool growable = true});
So you need to provide a function to use List.generate
.
If you like to ignore it you can use _
.
List<int>.generate(5, (_) => r2.nextInt(100));
CodePudding user response:
Dart is type-safe, so it expects that the type signatures of arguments match. You can't pass a int Function()
where an int Function(int)
is expected.
Must it be that way? No. Since the int
argument is clearly unused, the compiler conceivably could automatically transform () => r2.nextInt(100)
into (_) => (() => r2.nextInt(100))()
. However, doing so might hide mistakes where a wrong function is passed. Dart often favors being explicit.