大佬教程收集整理的这篇文章主要介绍了dart – 错误:在初始化程序中只能访问静态成员,这是什么意思?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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;
以上是大佬教程为你收集整理的dart – 错误:在初始化程序中只能访问静态成员,这是什么意思?全部内容,希望文章能够帮你解决dart – 错误:在初始化程序中只能访问静态成员,这是什么意思?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。