dart – 错误:在初始化程序中只能访问静态成员,这是什么意思?
发布时间:2020-12-14 14:57:52 所属栏目:百科 来源:网络整理
导读:我有类似的东西.我很难理解这个错误. 为什么在这里访问filterController会出现此错误?但是如果我在构建方法中移动当前的整个TextFormField创建(在注释A和B之间),它不会出现此错误?如何在构建方法中移动整个TextFormField使filterController成为静态然后解
我有类似的东西.我很难理解这个错误.
为什么在这里访问filterController会出现此错误?但是如果我在构建方法中移动当前的整个TextFormField创建(在注释A和B之间),它不会出现此错误?如何在构建方法中移动整个TextFormField使filterController成为静态然后解决此问题? class AppHomeState extends State<AppHome> with SingleTickerProviderStateMixin { TabController _tabController; final filterController = new TextEditingController(text: "Search"); //----A TextFormField email = new TextFormField( keyboardType: TextInputType.emailAddress,controller: filterController,------>ERROR : Error: Only static members can be accessed in initializers ); //----B @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar(..),); } } 我该如何解决这个问题? 解决方法class AppHomeState extends State<AppHome> with SingleTickerProviderStateMixin { TabController _tabController; final filterController = new TextEditingController(text: "Search"); TextFormField email = ... …是一个初始化程序,此时无法访问它. 这就是您收到错误消息的原因: controller: filterController, 访问this.filterController(如果你不明确地写它,这是隐式的). 要解决您的问题(假设电子邮件需要最终),您可以使用工厂构造函数和构造函数初始化列表: class AppHomeState extends State<AppHome> with SingleTickerProviderStateMixin { factory SingleTickerProviderStateMixin() => new SingleTickerProviderStateMixin._(new TextEditingController(text: "Search")); SingleTickerProviderStateMixin._(TextEditingController textEditingController) : this.filterController = textEditingController,this.email = new TextFormField( keyboardType: TextInputType.emailAddress,controller: textEditingController); TabController _tabController; final filterController; final TextFormField email; 或者当电子邮件字段不需要是最终电子邮件时,可以在构造函数初始化列表中初始化: class AppHomeState extends State<AppHome> with SingleTickerProviderStateMixin { SingleTickerProviderStateMixin() { email = new TextFormField( keyboardType: TextInputType.emailAddress,); } TabController _tabController; final filterController = new TextEditingController(text: "Search"); TextFormField email; 但是在Flutter小部件中,initState通常用于此 class AppHomeState extends State<AppHome> with SingleTickerProviderStateMixin { @override void initState() { super.initState(); email = new TextFormField( keyboardType: TextInputType.emailAddress,); } TabController _tabController; final filterController = new TextEditingController(text: "Search"); TextFormField email; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |