方法未在其他 class 中定义
Method is not defined in other class
因为要调用class"EditProfilePage"中的setState方法,只好改成statefulWidget:
class EditProfilePage extends StatefulWidget {
@override
_EditProfilePageState createState() => _EditProfilePageState();
}
class _EditProfilePageState extends State<EditProfilePage> {
TextEditingController nameController = new TextEditingController();
TextEditingController bioController = new TextEditingController();
File file;
.
.
.
applyChanges() {
Firestore.instance
.collection('insta_users')
.document(currentUserModel.id)
.updateData({
"displayName": nameController.text,
"bio": bioController.text
});
}
}
但是现在,我的 class 'Profile_page' 似乎错过了 "EditProfilePage" 的方法 "applyChanges()" 并抛出以下错误:
The method 'applyChanges' isn't defined for the class
'EditProfilePage'.
这是'Profile_Page'中的方法,它从[=39调用applyChanges() =]:
editProfile() {
EditProfilePage editPage = new EditProfilePage();
Navigator.of(context)
.push(new MaterialPageRoute<bool>(builder: (BuildContext context) {
return new Center(
child: new Scaffold(
appBar: new AppBar(
leading: new IconButton(
icon: new Icon(Icons.close),
onPressed: () {
Navigator.maybePop(context);
},
),
title: new Text('Edit Profile',
style: new TextStyle(
color: Colors.black, fontWeight: FontWeight.bold)),
elevation: 1.0,
backgroundColor: Colors.white,
actions: <Widget>[
new IconButton(
icon: new Icon(
Icons.check,
color: Colors.blueAccent,
),
onPressed: () {
editPage.applyChanges();
Navigator.maybePop(context);
})
关于如何解决这个问题有什么建议吗?我没有忘记导入。
顺便说一句,我对 flutter 还很陌生,只是想了解 dart。最好的问候!
您应该通过将 applyChanges
函数从 _EditProfilePageState
class:
移开来对 EditProfilePage
结构进行重大更改
class EditProfilePage extends StatefulWidget {
@override
_EditProfilePageState createState() => _EditProfilePageState();
static void applyChanges(TextEditingController nameController, TextEditingController bioController) {
Firestore.instance.collection('insta_users').document(currentUserModel.id).updateData({
"displayName": nameController.text,
"bio": bioController.text
});
}
}
然后从函数 editProfile()
内部调用 applyChanges()
函数 :
EditProfilePage.applyChanges(nameController, bioController);
但是您必须使包含 name
和 bio
的 TextEditingController
对象对您调用的上下文可见。我建议的一种方法是通过在代码的导入部分下定义它们来使它们成为全局的,这将使任何内部 class 能够使用它们。
因为要调用class"EditProfilePage"中的setState方法,只好改成statefulWidget:
class EditProfilePage extends StatefulWidget {
@override
_EditProfilePageState createState() => _EditProfilePageState();
}
class _EditProfilePageState extends State<EditProfilePage> {
TextEditingController nameController = new TextEditingController();
TextEditingController bioController = new TextEditingController();
File file;
.
.
.
applyChanges() {
Firestore.instance
.collection('insta_users')
.document(currentUserModel.id)
.updateData({
"displayName": nameController.text,
"bio": bioController.text
});
}
}
但是现在,我的 class 'Profile_page' 似乎错过了 "EditProfilePage" 的方法 "applyChanges()" 并抛出以下错误:
The method 'applyChanges' isn't defined for the class 'EditProfilePage'.
这是'Profile_Page'中的方法,它从[=39调用applyChanges() =]:
editProfile() {
EditProfilePage editPage = new EditProfilePage();
Navigator.of(context)
.push(new MaterialPageRoute<bool>(builder: (BuildContext context) {
return new Center(
child: new Scaffold(
appBar: new AppBar(
leading: new IconButton(
icon: new Icon(Icons.close),
onPressed: () {
Navigator.maybePop(context);
},
),
title: new Text('Edit Profile',
style: new TextStyle(
color: Colors.black, fontWeight: FontWeight.bold)),
elevation: 1.0,
backgroundColor: Colors.white,
actions: <Widget>[
new IconButton(
icon: new Icon(
Icons.check,
color: Colors.blueAccent,
),
onPressed: () {
editPage.applyChanges();
Navigator.maybePop(context);
})
关于如何解决这个问题有什么建议吗?我没有忘记导入。
顺便说一句,我对 flutter 还很陌生,只是想了解 dart。最好的问候!
您应该通过将 applyChanges
函数从 _EditProfilePageState
class:
EditProfilePage
结构进行重大更改
class EditProfilePage extends StatefulWidget {
@override
_EditProfilePageState createState() => _EditProfilePageState();
static void applyChanges(TextEditingController nameController, TextEditingController bioController) {
Firestore.instance.collection('insta_users').document(currentUserModel.id).updateData({
"displayName": nameController.text,
"bio": bioController.text
});
}
}
然后从函数 editProfile()
内部调用 applyChanges()
函数 :
EditProfilePage.applyChanges(nameController, bioController);
但是您必须使包含 name
和 bio
的 TextEditingController
对象对您调用的上下文可见。我建议的一种方法是通过在代码的导入部分下定义它们来使它们成为全局的,这将使任何内部 class 能够使用它们。