方法未在其他类别中定义

时间:2019-03-25 11:21:43

标签: flutter statefulwidget

因为我想在类“ 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

    });
  }
 }

但是现在,我的班级'Profile_page'似乎错过了“ EditProfilePage”的方法“ applyChanges()”,并引发了以下错误:

  

未为该类定义方法'applyChanges'   “ EditProfilePage”。

这是'Profile_Page'中的方法,该方法从'EditProfilePage'中调用 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);
                    })

有关如何解决此问题的任何建议?我没有忘记导入。

顺便说一句,我对扑扑非常陌生,只是想了解飞镖。最好的问候!

1 个答案:

答案 0 :(得分:0)

您应该通过将EditProfilePage函数移离applyChanges类来对_EditProfilePageState结构进行重大更改:

   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
      });
     }

   }

然后从函数applyChanges()内部调用editProfile()函数:

  EditProfilePage.applyChanges(nameController, bioController);

但是您必须使包含TextEditingControllername的{​​{1}}对象对您从其调用的上下文可见。我建议的一种方法是通过在代码的import部分下定义它们来使它们全局化,这将使任何内部类都可以使用它们。