【问题标题】:Invalid constructor name and Undefined class无效的构造函数名称和未定义的类
【发布时间】:2018-12-14 11:52:10
【问题描述】:

我试图在下面的代码中在 ClassTwo 中创建 ClassOne 的实例,但是我收到错误 Invalid constructor nameUndefined 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>[
            ],
          ),
        );
      }
    }}

【问题讨论】:

    标签: mobile dart flutter


    【解决方案1】:

    您可以在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();
    }
    

    full example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多