我在Flutter面前遇到了一些奇怪的问题。我对Flutter的了解很少。我正在学习。
class ViewOtherProfile extends StatefulWidget {
final String userName;
final int points;
const ViewOtherProfile({
@required this.userName,
@required this.points,
});
您可以看到我正在获取userName和Points数据作为参数。 我想在页面中打印此参数。像这样
class _ViewOtherProfileState extends State<ViewOtherProfile> {
..........
void initState(){
print(points);
deviceInfo();
super.initState();
print(userName);
]);
}
............
现在的问题是我遇到了错误。
Undefined name 'userName'.
Try correcting the name to one that is defined, or defining the name.
出现此错误以及如何解决该错误的任何原因。
感谢@jamesdlin
我试图这样说
print(ViewOtherProfile.userName);
但是现在我又遇到另一个错误。
Instance member 'userName' can't be accessed using static access.
答案 0 :(得分:0)
Flutter中有两种主要类型的小部件。 StatelessWidget
和StatefullWidget
。 StatelessWidget仅在构建UI时构建,并且永远不会重建。同时,如果调用setState
,则每次都可以重建StatefulWidget。
因此,对于StatefulWiget,需要通过使用State
类扩展主类来跟踪类的状态。
您必须注意,这两种类型的小部件中变量的范围可能有所不同。例如...
class ExampleStateless extends StatelessWidget {
final String userName;
final int points;
const ExampleStateless({
@required this.userName,
@required this.points,
});
@override
Widget build(BuildContext context){
print(userName); print(points);
return Something();
}
}
请注意,对于有状态窗口小部件,有两个类,每个类都有其范围。超类ExampleStateful
可以通过_ExampleStatefulState
widget
共享范围。
class ExampleStateful extends StatefulWidget {
final String userName;
final int points;
Static final string id = "exampleState";
const ExampleStatefull({
@required this.userName,
@required this.points,
});
// scope 1
@override
_ExampleStatefulState createState() => _ExampleStatefulState();
}
class _ExampleStatefulState extends State<ExampleStateful>{
// scope 2
final String userName2 = null;
@override
void initState(){
super.initState();
print(widget.userName);
print(userName2);
print(ExampleStateful.id); // you can do this only if variable is static.
}
}
可以通过小部件属性在范围2中访问范围1中的内容。例如print(widget.userName);
而不是print(userName);