gpt4 book ai didi

dart - 错误 : Only static members can be accessed in initializers what does this mean?

转载 作者:IT老高 更新时间:2023-10-28 12:29:15 27 4
gpt4 key购买 nike

我有这样的东西。我很难理解这个错误。为什么在此处访问 filterController 会在此处出现此错误,但如果我在构建中移动当前整个 TextFormField 创建(在注释 A 和 B 之间),则不会出现此错误方法?如何在 build 方法中移动整个 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 = ...

... 是一个初始化器,此时无法访问 this。初始化程序在构造函数之前执行,但 this 只允许在调用 super 构造函数(在您的示例中隐含)完成后访问。因此,仅允许在构造函数主体(或更高版本)中访问 this

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

controller: filterController,

访问 this.filterController(this 是隐含的,如果你不写明确的话)。

要解决您的问题(假设 email 需要是 final),您可以使用工厂构造函数和构造函数初始化程序列表:

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;

或者当email字段不需要为final时email可以在构造函数初始化列表中初始化:

class AppHomeState extends State<AppHome> with SingleTickerProviderStateMixin {

SingleTickerProviderStateMixin() {
email = new TextFormField(
keyboardType: TextInputType.emailAddress,
controller: filterController,
);
}

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,
controller: filterController,
);
}

TabController _tabController;
final filterController = new TextEditingController(text: "Search");
TextFormField email;

关于dart - 错误 : Only static members can be accessed in initializers what does this mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50145150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com