【发布时间】:2019-03-07 08:00:23
【问题描述】:
请看我的代码:
class HomePageState extends State<HomePage> {
bool _isLoading = false;
.....
@override
Widget build(BuildContext context) {
var drawerOptions = <Widget>[];
......
drawerOptions.add(new ListTile(
leading: new Icon(Icons.account_balance),
title: new Text(Strings.menu_change_city),
onTap: () => createDialog()
));
if(_isLoading) return buildBusyForm();
return Scaffold( .... //window content
}
}
所以我有导航抽屉。一项(“选择城市”)不关闭导航抽屉,它显示选择城市对话框:
createDialog() {
setState(() {_isLoading = true;});
fetchCities().then((response) {
setState(() {_isLoading = false;});
showDialog(
context: context,
builder: (context) => CityChoiceDialog<City>(
title: Text(Strings.menu_change_city),
items: response,
initialValue: response.firstWhere((c) => c.id == globals.cityId, orElse: () => new City()),
itemBuilder: (City city) => Text(city.name),
onSelected: _onSelected,
onSubmitted: _onSubmitted));
});
}
所以,基本上它的目的是显示繁忙的表格,加载城市,然后隐藏繁忙的表格并显示城市列表对话框。由于它似乎有效,但我遇到了异常:
I/flutter (10662): ══╡ 小部件库发现异常 ╞═════════════════════════════════════════════════ ══════════ I/颤振 (10662):在完成 小部件树:I/flutter (10662):调用 setState() 或 markNeedsBuild() 当小部件树被锁定时。我/颤振(10662):这个 _ModalScope 小部件无法标记为需要构建,因为框架是 I/flutter (10662):已锁定。我/颤振(10662): 调用 setState() 或 markNeedsBuild() 的小部件是: 我/颤振 (10662):
_ModalScope-[LabeledGlobalKey<_modalscopestate>#1f222](状态: 我/颤振(10662):_ModalScopeState#6c40b)
如何正确地做我想做的事?
【问题讨论】:
-
你到底是怎么关抽屉的?
-
我注意到如果我在尝试更改状态之前关闭抽屉可以解决问题。如果抽屉仍然打开并且我想更改状态,我会收到此异常。
-
这种异常只在调试器中发现,但是当你在实际设备上运行这个应用程序时,它不会有任何明显的影响。我试过了。
标签: exception dart flutter state