class LevelUp extends GetxController {
Map<String, String> params = Get.arguments;
var myTest = params.[comLevel];
}
错误报告-“实例成员'params'无法在初始化程序中访问。”我是编程新手,可以直接从小部件中调用它。我检查了LevelUp地图,它具有内容。我尝试将参数值分配给myTest时发生错误。我将密钥放在引号中还是提供整数都没有关系。任何建议将不胜感激。
答案 0 :(得分:7)
在初始化对象之前,您无法访问params
。要修正示例,请将myTest
初始化移到构造函数中。
此外,我认为您不应该在[comLevel]
前加句点。
class LevelUp extends GetxController {
Map<String, String> params = Get.arguments;
String myTest;
LevelUp() {
myTest = params[comLevel];
}
}
答案 1 :(得分:7)
尽管已针对 OP 的案例回答了此问题,但我想为在 StatefulWidget
情况下收到此错误的人提供解决方案。
考虑这样一种情况,您希望有一个可选择项目的列表来指示要显示的类别。在这种情况下,构造函数可能看起来像这样:
CategoryScrollView({
this.categories,
this.defaultSelection = 0,
});
final List<String> categories;
final int defaultSelection;
请注意,属性 defaultSelection
负责指定默认情况下应选择哪个类别。您可能还想跟踪初始化后选择的类别,因此我将创建 selectedCategory
。我想将 selectedCategory
分配给 defaultSelection
,以便默认选择生效。在 _CategoryScrollViewState
中,您不能执行以下操作:
class _CategoryScrollViewState extends State<CategoryScrollView> {
int selectedCategory = widget.defaultSelection; // ERROR
@override
Widget build(BuildContext context) {
...
}
}
行,int selectedCategory = widget.defaultSelection;
将不起作用,因为 defaultSelection
它尚未初始化(在其他答案中提到)。因此,引发了错误:
无法在初始化程序中访问实例成员“widget”。
解决办法是将selectedCategory
赋值给defaultSelection
inside initState
方法,对其进行初始化外部方法:
class _CategoryScrollView extends State<CategoryScrollView> {
int selectedCategory;
void initState() {
selectedCategory = widget.defaultSelection;
super.initState();
}
答案 2 :(得分:1)
一个简单的例子,它展示了我们如何解决上述问题, 例子:创建一个类B的实例,并在它的参数中传入一个类A的实例
错误(初始化程序的编译时错误):
* def input = ' 46.8,16.600001 023,16.600035 -46.2000,16.60004 46,164 47.400044,-14.1 47.400043,13.8 47.400043,0 47.400024,-3.9 '
* def temp = input.trim().split(' ')
* match each temp == '#regex .*'
显示错误:无法在初始化程序中访问实例成员“_a”。
右:
final A _a = A();
final B _b = B(_a);
答案 3 :(得分:0)
在空安全之前:
在实例化类之前您无法访问实例成员(除非它们被声明为 static
),因此以下代码有错误。
class Test {
int foo = 0;
int bar = foo; // Error
}
空值安全后:
Dart 2.12 带有 late
关键字,它可以帮助您进行延迟初始化,这意味着在使用字段 bar
之前,它将保持未初始化状态。
class Test {
int foo = 0;
late int bar = foo; // OK, no error
}