The instance member 'params' can't be accessed in an initializer
You can't access params
before you've initialized the object. To fix your example, move your myTest
initialization into a constructor.
Also, I don't believe you should have a period before [comLevel]
.
class LevelUp extends GetxController {
Map<String, String> params = Get.arguments;
String myTest;
LevelUp() {
myTest = params[comLevel];
}
}
Although this question has been answered for the OP's case, I want to offer a solution to those receiving this error in a StatefulWidget
scenario.
Consider a situation where you would want to have a list of selectable items that dictate which category to display. In this case, the constructor might look something like this:
CategoryScrollView({
this.categories,
this.defaultSelection = 0,
});
final List<String> categories;
final int defaultSelection;
Note the property defaultSelection
is responsible for specifying which category should be selected by default. You would probably also want to keep track of which category is selected after initialization, so I will create selectedCategory
. I want to assign selectedCategory
to defaultSelection
so that the default selection takes effect. In _CategoryScrollViewState
, you cannot do the following:
class _CategoryScrollViewState extends State<CategoryScrollView> {
int selectedCategory = widget.defaultSelection; // ERROR
@override
Widget build(BuildContext context) {
...
}
}
The line, int selectedCategory = widget.defaultSelection;
will not work because defaultSelection
it hasn't been initialized yet (mentioned in other answer). Therefore, the error is raised:
The instance member 'widget' can't be accessed in an initializer.
The solution is to assign selectedCategory
to defaultSelection
inside of the initState
method, initializing it outside of the method:
class _CategoryScrollView extends State<CategoryScrollView> {
int selectedCategory;
void initState() {
selectedCategory = widget.defaultSelection;
super.initState();
}
Null safety update:
Use late
keyword: Dart 2.12 comes with late
keyword which helps you do the lazy initialization which means until the field bar
is used it would remain uninitialized.
class Test {
int foo = 0;
late int bar = foo; // No error
}