Метод не определен в другом классе

Поскольку я хочу вызвать метод setState в классе "EditProfilePage", мне пришлось изменить его на 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', похоже, пропускает метод "applyChanges()" из "EditProfilePage" и выдает следующую ошибку:

Метод «applyChanges» не определен для класса «EditProfilePage».

Вот метод в 'Profile_Page', который вызывает applyChanges() из 'EditProfilePage':

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

Любые предложения о том, как решить эту проблему? Не забыл импортировать.

Кстати, я очень новичок в флаттере и просто пытаюсь понять дартс. Наилучшие пожелания!


person Martin Seubert    schedule 25.03.2019    source источник
comment
Возможный дубликат метода вызова в одном виджете с отслеживанием состояния из другой виджет с состоянием — Flutter   -  person mirkancal    schedule 25.03.2019


Ответы (1)


Вы должны внести существенные изменения в свою структуру 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);

Но вы должны сделать свои объекты TextEditingController, содержащие name и bio, видимыми для контекста, из которого вы звоните. Я бы предложил сделать их глобальными, определив их в разделе импорта вашего кода, что позволит любому внутреннему классу использовать их.

person Mazin Ibrahim    schedule 25.03.2019