Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter init和provider的颤振问题_Flutter_Provider_State Management_Bloc - Fatal编程技术网

Flutter init和provider的颤振问题

Flutter init和provider的颤振问题,flutter,provider,state-management,bloc,Flutter,Provider,State Management,Bloc,我对provider模式有一个问题,我有一个解决方案,我只是想检查它是否是一个好方法,是否有更好的替代方法 我试图在文本控制器首次加载小部件时更新文本控制器文本,以便将值存储在我的提供程序状态中。最初,我只是在init中创建了文本控制器,并在build方法中加载了状态并设置了文本控制器 这一直在工作,直到我想对内容进行一些验证,以防止某些内容被传递到状态(例如防止空字符串) 问题出现在这里,因为他们的用户会删除他们的单词,这将不符合规则。重建将发生(因为他们按下了一个键),然后text.cont

我对provider模式有一个问题,我有一个解决方案,我只是想检查它是否是一个好方法,是否有更好的替代方法

我试图在文本控制器首次加载小部件时更新文本控制器文本,以便将值存储在我的提供程序状态中。最初,我只是在init中创建了文本控制器,并在build方法中加载了状态并设置了文本控制器

这一直在工作,直到我想对内容进行一些验证,以防止某些内容被传递到状态(例如防止空字符串)

问题出现在这里,因为他们的用户会删除他们的单词,这将不符合规则。重建将发生(因为他们按下了一个键),然后text.controller将重建到该状态(一个字母,因为它没有通过规则)。这有效地阻止了他们删除,这是我希望他们能够做的事情,但这不会更新状态

我发现这个库允许重写一个方法,该方法在构建后立即调用一次

我的解决方案通过在initstate中创建文本控制器来使用它。 将其分配给生成中的文本字段

然后创建一个本地字段来维护textField小部件字符串内容

然后在新的后构建方法中,我会将状态上的内容分配给变量,并更新文本控制器文本,使其具有此值

然后在text.controllers文本更改侦听器中,我使用我的规则仅在满足规则时更新此状态。因此,如果他们删除了内容,他们应该无法关闭/重新打开小部件,状态将重建为仍然具有有效值

使用这个库是解决这个问题的好方法还是有更好的方法

----------------编辑

对不起,我的第一部分太罗嗦了。我想我的主要问题是,如果我需要的数据必须来自构建中的状态,我应该如何初始化控制器

比如说

// This must go in the build as it requires state
myTabsController = TabController(length: myState.list.length, vsync: this);

我现在每次构建控制器时都初始化它。。。我怎么能把它放在init中,但仍然访问状态变量呢

(我尝试使用AfterLayoutMixin中的afterFirstLayout()回调,但这只会导致更多问题

请允许我进一步澄清。
谢谢你的帮助。

你能简化你的问题吗?只要告诉你想要实现什么。你知道程序员喜欢简洁的解释:)尽可能多分享代码,少评论。你能简化你的问题吗?只要说出你想要达到的目标。你知道程序员喜欢简洁的解释:)如果可能的话,多分享代码少评论。
// This must go in the build as it requires state
myTabsController = TabController(length: myState.list.length, vsync: this);