如何解决如何在颤动中打开底页时设置状态?
这个想法是我想显示一个底部工作表并在底部工作表显示时删除我的底部导航栏。无论如何,我已经创建了一个名为 sheetopen 的布尔值,它最初设置为 false 并且想法是将其设置为 true 以便在工作表弹出时关闭底部导航栏。 在不使用 setstate 的情况下这样做不会反映对 UI 的任何更改。但是,如果我在显示底部表单功能中使用设置状态,应用程序就会崩溃,并且我收到以下消息:“查找停用的小部件的祖先是不安全的。此时小部件的元素树的状态不再稳定。要在其 dispose() 方法中安全地引用小部件的祖先,请通过调用小部件的 didChangeDependencies() 方法中的 DependOnInheritedWidgetofExactType() 来保存对祖先的引用。 我尝试了多种解决方案(Stateful Builder,调用 _controller.setstate ..)但没有任何效果。 卡在这3天了。。 无论如何,我将展示我编写的代码,我非常感谢任何可以提供帮助的人。
class FeedScreen extends StatefulWidget {
static bool sheetopen = false;
static int selectedindex = 0;
const FeedScreen();
@override
_FeedScreenState createState() => _FeedScreenState();
}
class _FeedScreenState extends State<FeedScreen> {
late final GlobalKey<ScaffoldState> _key;
late PersistentBottomSheetController _controller;
void _showPreview(
final BuildContext context,) {
//this is what's causing the issue
setState(() {
FeedScreen.sheetopen = true;
});
_controller = _key.currentState!.showBottomSheet(
(ctx) {
//etc....
}
@override
void initState() {
super.initState();
_key = GlobalKey<ScaffoldState>();
}
Widget build(BuildContext context) {
return Scaffold(
//....
bottomNavigationBar: FeedScreen.sheetopen
? null
: BottomNavBar(
FeedScreen.selectedindex,_changeTab,),
解决方法
https://api.flutter.dev/flutter/widgets/StatefulBuilder-class.html?
你可以用Bottomsheet包装Stateful builder来使用setState。
,用 statefulbuilder 包装它
StatefulBuilder(
builder: (BuildContext context,StateSetter setState) {
return BottomNavBar(
FeedScreen.selectedIndex,_changeTab,);}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。