【发布时间】:2021-11-17 14:24:10
【问题描述】:
如果我使用 刷新指示器或按钮点击,此代码将完全正常工作。
但是如果在 SliverAppBar 中使用它来实现 onStretchTrigger 功能将不起作用。
onStretchTrigger: () async {
setState(() {
myVariable = myFutureData();
});
},
我得到的错误:
I/flutter (31102):在帧期间计划构建。
I/flutter (31102):在构建、布局小部件树时, 并绘制后,安排了一个新框架来重建小部件树。
I/flutter (31102):这可能是因为 setState() 是从 布局或绘制回调。如果需要对小部件树进行更改,它 应该在构建树时应用。安排更改 后续帧反而会导致界面滞后 一帧。如果这样做是为了使您的构建依赖于大小 在布局时测量,考虑使用 LayoutBuilder, CustomSingleChildLayout 或 CustomMultiChildLayout。
另一方面,如果一帧延迟是所需的效果,则 例如,因为这是一个动画,请考虑将帧安排在 使用 SchedulerBinding.addPostFrameCallback 或 使用 AnimationController 来触发动画。我/颤动 (31102):我/颤振(31102):#0
WidgetsBinding._handleBuildScheduled。 包:flutter/…/widgets/binding.dart:747I/flutter (31102):#1 WidgetsBinding._handleBuildScheduled 包:flutter/…/widgets/binding.dart:770
I/flutter (31102):#2 BuildOwner.scheduleBuildFor 包:flutter/…/widgets/framework.dart:2476
I/flutter (31102):#3 Element.markNeedsBuild 包:flutter/…/widgets/framework.dart:4324
I/flutter (31102): #4 State.setState 包:flutter/…/widgets/framework.dart:1108
I/flutter (31102):#5 _HomeScreenState.build。 包:fesale/screens/screen_home.dart:197
I/flutter (31102):#6 _HomeScreenState.build。 包:fesale/screens/screen_home.dart:195
I/flutter (31102): #7 RenderSliverPersistentHeader.layoutChild 包:flutter/…/rendering/sliver_persistent_header.dart:257
我/颤振 (31102):#8
RenderSliverFloatingPersistentHeader.performLayout 包:flutter/…/rendering/sliver_persistent_header.dart:708I/flutter (31102): #9 RenderObject.layout 包:flutter/…/rendering/object.dart:1858
I/flutter (31102): #10 RenderViewportBase.layoutChildSeq
请帮助找不到任何解决方案:(
【问题讨论】:
标签: flutter flutter-layout flutter-dependencies flutter-web flutter-animation