dart initState是如何访问上下文的?

yyhrrdl8  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(145)

有谁能告诉我为什么当我把CountProvider放在initState和build函数之外时,这会给我一个错误,当我把CountProvider放在initState内部时,它也在build函数enter image description here之外时,错误会发生
enter image description here
错误是[无法在初始化器中访问示例成员'context'。请尝试将对示例成员的引用替换为其他表达式]

ru9i0ody

ru9i0ody1#

正如我们在这里看到的
框架在使用StatefulWidget.NETState创建State对象之后和调用initState之前将它们与BuildContext关联
因此,initState可以访问Stateful Widget的context,因为在创建State和调用initState之间,已经可以传递BuildContext。
所以
1.状态由StatefulWidget创建。
State对象是由框架通过在膨胀StatefulWidget以将其插入树时调用StatefulWidget.tagState方法来创建的。
1.上下文与状态相关联。
1.调用initState,然后它也可以访问上下文。
然后在initState之后调用build,我们就有了render。
按照这种顺序,在调用构建之后,才调用任何其他方法,因此代码中的任何此类方法可能无法访问initStatebuild方法范围之外的上下文

dl5txlt9

dl5txlt92#

我想你是想声明一个变量,你想在initState方法和build方法中访问它。我想你可以全局声明这个变量,然后在initState方法中初始化它。

class_HomePageState extends State<HomePage>
var CountProvider; //Declare variable here

@override
void initState() {
// TODO: implement initState
    super.initState();
    CountProvider = Provider.of<countProvider>(context, listen: false); // Initialize the variable here

    Timer.periodic(Duration(seconds: 0), (timer) { 
        CountProvider.IncraceCount(); 
    }); // Timer.periodic
}
@override
Widget build(BuildContext context) {
...
}

字符串

相关问题