我正在使用firebase并且需要在我的initState()方法中获取用户的ID,因为我正在构建一个需要用户ID的小部件,来自firebase。firebase使用的currentUser方法是一个Future。目前,我将其作为我的初始状态和getUser函数:FuturegetUser()async{FirebaseUseruser=awaitFirebaseAuth.instance.currentUser();returnuser;}voidinitState(){getUser().then((result){stream=Firestore.instance.collect
我有一个StatefulWidget,我想在命名路由中使用它。我必须按照https://flutter.dev/docs/cookbook/navigation/navigate-with-arguments中的建议传递一些我正在做的论点即Navigator.pushNamed(context,routeName,arguments:,);现在,我需要在状态的initState方法中访问这些参数,因为需要参数来订阅一些外部事件。如果我将args=ModalRoute.of(context).settings.arguments;调用放在initState中,我会得到一个运行时异常。20
我想在页面上做一些启动工作,我决定把它放在initState中页面的方法但是我注意到每次切换选项卡时initStateTabBarView中包含的各种其他页面的方法即使没有请求这些页面也会被调用。这是正常行为吗?目前,我处理确定是否实际请求显示页面的方法是读取TabController的索引值。然后在需要时执行必要的initState工作。我的问题是我是否正确处理了这个机制,每个页面的initState是否都进入了TabBarView每当标签更改时被调用? 最佳答案 不太确定,但我认为Flutter试图做的是准备好附近的选项卡Vie
我有一个StatefulWidget,它在其initState()中执行异步调用,以构建一个Widget。当我手动运行它时,小部件确实会快速构建。但是,在我的测试中,即使我使用awaittester.pump()或awaittester.pumpAndSettle(),小部件似乎也没有构建,直到测试运行结束。小部件代码:Widget_coolWidget;@overridevoidinitState(){super.initState();_coolWidget=Container();//IfIsetthistoOverflowBox()mytestpasses_buildWidge
我想将新的小部件(StatefulWidget)添加到ListView到列表的顶部items.insert(0,listItem),但是当我这样做时,列表的所有元素都是再次初始化(initState()钩子(Hook)每次都在调用)如果我将项目添加到列表底部items.add(listItem)-一切都按预期工作(initState()仅在新添加元素。)演示代码ListItem小部件代码classListItemextendsStatefulWidget{finalStringlabel;constListItem({Keykey,@requiredthis.label}):super
我目前正在尝试将Provider作为状态管理解决方案,我知道它不能在initState函数内部使用。我见过的所有示例都会根据用户操作(例如,用户单击按钮)在派生的ChangeNotifier类中调用一个方法,但是如果我需要在初始化我的时调用一个方法怎么办?状态?动机:创建一个加载Assets(异步)并显示进度的屏幕ChangeNotifier类的示例(无法从initState调用add):import'package:flutter/foundation.dart';classProgressDataextendsChangeNotifier{double_progress=0;dou
我正在尝试使用showDialog(context,builder)在用户导航到特定页面时显示问候消息。我通过调用该页面上有状态小部件的initState方法中的showDialog来尝试此操作。虽然它确实有效,但我似乎无权访问实际上下文。Flutter有没有办法在initState()方法中访问context?如果没有,是否有另一种更好的方式来实现这种行为?@overridevoidinitState(){super.initState();newFuture.delayed(Duration.zero,(){showDialog(context:context,builder:(B
与有状态小部件中的build()相比,我对何时将我的代码放入initState()感到困惑。我正在做一个关于flutter的udacity类(class)的测验thistodo项,即将一段代码从build()移动到initState()。但我不知道这样做的目的或好处。为什么不将所有代码都放在build()中?是不是build()只被调用一次,而initState()在每次状态改变时被调用?谢谢。 最佳答案 这实际上是相反的。build可以在很多情况下再次调用。例如状态更改或父级重建。而initState只被调用一次。build应该只
我想在我的Flutter应用程序中从SQLite数据库加载一些数据,并在ListView中显示结果。我目前正在使用FutureBuilder小部件从数据库中异步获取数据,然后构建ListView。但是,如果我想对数据进行一些操作-例如修改一些信息并将其保存到数据库-然后在ListView中显示更新的数据,我想我必须先将数据存储在局部变量中,然后调用setState()方法来更改数据并重新构建页面。在不使用FutureBuilder的情况下,还有其他更好/首选的方法来实现相同的目标吗? 最佳答案 initState在您的小部件第一次初
是否应该在StatefullWidget的initState()方法中调用setState()方法?我的理解是initState()方法会自动应用状态。下面的代码不起作用。post对象被评估为null。@overridevoidinitState(){ItemService.getItemById(widget.postId).then((DocumentSnapshotdoc){post=ItemService.getPostFromDocument(doc);});}但下面的工作。@overridevoidinitState(){ItemService.getItemById(wi