class LevelUp extends GetxController {
Map<String, String> params = Get.arguments;
var myTest = params.[comLevel];
}
错误报告--";无法在初始值设定项中访问实例成员"params">
我是编程新手,这是从小部件直接调用的。我检查了LevelUp地图,里面有内容。当我试图将param值分配给myTest时,会发生错误。不管我是把键放在引号里还是提供一个整数。
在初始化对象之前,无法访问params
。要修复您的示例,请将myTest
初始化移到构造函数中。
此外,我认为你不应该在[comLevel]
之前有月经。
class LevelUp extends GetxController {
Map<String, String> params = Get.arguments;
String myTest;
LevelUp() {
myTest = params[comLevel];
}
}
空安全更新:
使用late
关键字:Dart 2.12附带了late
关键字,它可以帮助您进行延迟初始化,这意味着在使用字段bar
之前,它将保持未初始化状态。
class Test {
int foo = 0;
late int bar = foo; // No error
}
尽管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
分配给initState
方法内部的defaultSelection
,并在方法的外部初始化它:
class _CategoryScrollView extends State<CategoryScrollView> {
int selectedCategory;
void initState() {
selectedCategory = widget.defaultSelection;
super.initState();
}
一个简单的例子,它展示了我们如何解决上述问题,示例:创建一个类B的实例,并在其参数中传递一个类A的实例
错误(初始化程序的编译时错误(:
final A _a = A();
final B _b = B(_a);
显示错误:无法在初始值设定项中访问实例成员"_a"。
右侧:
final A _a = A();
late final B _b;
AppointmentRepository() {
_b = B(_a);
}
#100%工作解决方案:Juts放置变量myTest = params.[comLevel];
在您的Build方法下面。
例如。
class LevelUp extends GetxController {
Map<String, String> params = Get.arguments;
Widget build(BuildContext context) {
var myTest = params.[comLevel];
}
}
对我来说,发生这种情况是因为我试图访问一个类实例(比方说a类(的属性,并使用该属性初始化另一个类(B类(,该属性是整数,已定义
然而,由于我没有从";A类";我可以访问那些属于它的财产!我试图在";构建";方法,使得一个对象是";创建/建造";它成功了!
不能使用实例成员作为类中变量的初始化。如果可以使成员为静态,这是解决问题的最简单、最安全的方法。它也在Dart文档中介绍:链接
解决方案:
class LevelUp extends GetxController {
static Map<String, String> params = Get.arguments;
var myTest = params.[comLevel];
}
我也得到了类似的错误。我找到了如下的解决方案。
我的第一个代码:
final BuildContext mycontext = GlobalContextClass.navigatorKey.currentContext;
final PsValueHolder psValueHolder = Provider.of<PsValueHolder>(mycontext, listen: false);
接下来是修复错误的代码:
final PsValueHolder psValueHolder = Provider.of<PsValueHolder>(GlobalContextClass.navigatorKey.currentContext, listen: false);
我没有在一行中定义两个变量,而是直接将第一个变量放在第二个变量的位置。
另一个解决方案是使您的变量成为GetX参数。
int count_myProducts = cartItems.length; //The instance member 'cartItems' can't be accessed in an initializer. (Documentation)
int get count_myProducts => cartItems.length;
请在27:34观看此视频Flutter的GetX状态管理教程https://www.youtube.com/watch?v=ZnevdXDH25Q&ab_channel=CodeX
只携带
var myTest = params.[comLevel];
进入下面的Widget内部版本{}。
像这样:
class LevelUp extends GetxController {
Map<String, String> params = Get.arguments;
Widget build(BuildContext context) {
var myTest = params.[comLevel];
}
}