我正在尝试将容器插入叠加层,但是此代码出现错误。
class _MyHomePageState extends State<MyHomePage> {
@override
void didChangeDependencies() {
super.didChangeDependencies();
final entry = OverlayEntry(builder: (BuildContext overlayContext) {
return Container(
height: 50.0,
width: 50.0,
color: Colors.blue,
);
});
_addOverlay(entry);
}
void _addOverlay(OverlayEntry entry) async {
Overlay.of(context).insert(entry);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter'),
),
body: Center(),
);
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误
在构建期间调用setState()或markNeedsBuild()。不能将此Overlay小部件标记为需要构建,因为框架已在构建小部件的过程中。仅当其某个祖先当前正在构建窗口小部件时,才可以将其标记为需要在构建阶段中构建。允许使用此异常是因为该框架在子代之前构建父窗口小部件,这意味着将始终构建脏后代。否则,框架可能在此构建阶段无法访问此小部件。
先感谢您。
自从上次更新为0.8.1以来,我也注意到了这一变化。我修复了此问题,以在最小延迟后添加叠加层
Timer.run(() { Overlay.of(context).insert(calendarOverlay);});
现在可以用了,但是感觉就像是被黑客入侵了...
所以在我的构建中,当叠加层应该显示自己时,我使用此代码。
如果有人有更好的解决方案,我很感兴趣;-)
约翰
更新:我发现此代码也正在工作:
final overlay = Overlay.of(context);
WidgetsBinding.instance.addPostFrameCallback((_) => overlay.insert(entry));
Run Code Online (Sandbox Code Playgroud)
它使我免于加入计时器...
| 归档时间: |
|
| 查看次数: |
1391 次 |
| 最近记录: |