Неверное имя конструктора и неопределенный класс - PullRequest
0 голосов
/ 06 июля 2018

я пытаюсь создать экземпляр ClassOne в ClassTwo в приведенном ниже коде, однако я получаю ошибки 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>[
            ],
          ),
        );
      }
    }}

1 Ответ

0 голосов
/ 06 июля 2018

вы можете создать экземпляр ClassOne в ClassTwo, потому что вы определяете поле, но подумайте над этим: когда этот код будет выполняться? 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();
}

полный пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...