我试图在下面的代码中在 ClassTwo 中创建 ClassOne 的实例,但是我Invalid constructor name
和Undefined class 'instOne .person
错误我如何以正确的方式执行此操作
class ClassOne extends StatefulWidget {
@override
ClassOneState createState() => ClassOneClassState();
}
class ClassOneState extends State<ClassOneClass> {
var person= 'myname';
hey(){
print('hey hello');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: ListView(
children: <Widget>[
],
),
);
}
}}
// the file is in main.dart
import 'package:cloud_fs_demo/main.dart' ;
class ClassTwo extends StatefulWidget {
@override
ClassTwoState createState() => ClassTwoClassState();
}
class ClassTwoState extends State<ClassTwoClass> {
ClassOne instOne = ClassOne();
//Undefined class 'instOne .person'
instOne .person;
//error:Invalid constructor name
instOne .hey() ;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: ListView(
children: <Widget>[
],
),
);
}
}}
您可以在ClassTwo
中创建ClassOne
实例,因为您正在定义一个字段,但请考虑一下:此代码何时执行?instOne.person;
.现在要解决问题,您必须在构造函数或小部件的 initstate 中执行此代码,以及它们之间的区别,即首先执行构造函数方法。
在构造函数中
var instone= ClassOne();
_ClassTwoState(){
instone.person="test";
}
在小部件的初始化状态中
@override
void initState() {
instone.person="test";
super.initState();
}
此外,您还必须声明您将在其中使用的字段和函数ClassTwo
而不是ClassTwoState
class ClassOne extends StatefulWidget {
var person= 'myname';
hey(){
print('hey hello');
}
@override
ClassOneState createState() => ClassOneState();
}
完整示例