Flutter   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了dart – 错误:在初始化程序中只能访问静态成员,这是什么意思?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有类似的东西.我很难理解这个错误.
为什么在这里访问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 = ...

…是一个初始化程序,此时无法访问它.
初始化器在构造@L_801_11@之前执行,但只有在完成对超级构造@L_801_11@(在您的示例中隐式)的调用之后才允许访问它.
因此,只有在构造@L_801_11@体(或更高版本)中才允许访问它.

这就是您收到错误消息的原因:

controller: filterController,

访问this.filterController(如果你不明确地写它,这是隐式的).

解决您的问题(假设电子邮件需要最终),您可以使用工厂构造@L_801_11@和构造@L_801_11@初始化列表:

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;

或者当电子邮件字段不需要是最终电子邮件时,可以在构造@L_801_11@初始化列表中初始化:

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,请注明来意。