【发布时间】:2021-11-20 20:28:31
【问题描述】:
问题:从 CupertinoPageRoute 关闭新屏幕后,CupertinoTabScaffold 选项卡内容不刷新
应用: Listview 中有一个数据列表。 我打开一个数据集并删除收藏状态(选中=false)。 我关闭数据集并且列表视图应该刷新(FutureBuilder 到 SQL 数据库)。
详情: 我有一个具有两种布局(Material 和 Cupertino)的 Flutter App。 在每个布局中,我有四个选项卡,并且内容小部件是相同的。 在 Cupertino 应用程序上,每个选项卡都包含一个 CupertinoPageScaffold。 当我按下一个元素时,它会导航到带有 CupertinoPageRoute 的新屏幕。 关闭 CupertinoPageRoute 后,选项卡内容不会刷新。 当我在四个标签之间切换时,标签内容正在刷新。
如果一个 CupertinoPageRoute 是打开的,我从这里打开一个新的并再次关闭它 然后打开的 CupertinoPageScaffold 的内容令人耳目一新。 数据在没有回调等的情况下刷新,只需调用未来(我认为)。
表示 CupertinoTabScaffold 应该有问题。 Material App上没有问题。 关闭 MaterialPageRoute 时,Material App 的选项卡内容会刷新。
问题: 这个位置有问题吗? 您是否有同样的问题或者解决方案或解决方法?
代码: 我的代码并不真正具有代表性,所以我将为您创建一个新的干净项目。 请确认是否需要代码。
我尝试了什么: 我尝试了很多来自互联网的解决方案,例如路由的回调、setState、.then、.whencomplete。 似乎没有任何效果。
提前谢谢你。
EDIT 03.10.2021:当我打开或关闭新屏幕时,带有 SingleTickerProviderStateMixin 的 tabcontroller 会重新加载打开的选项卡。如果我只使用 DefaultTabController Widget 而不是。所以我必须编辑 CupertinoTabController。
class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
late TabController _tabController;
final CupertinoTabController _cuptabController = CupertinoTabController();
Future<void> _refreshdata() async {
downloadJSON1();
setState(() {
});
}
callback() {
_refreshdata();
}
@override
void initState() {
_refreshdata();
super.initState();
_tabController = TabController(vsync: this, length: 2, initialIndex: 0);
_cuptabController.index = widget.starttab;
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
...
}
【问题讨论】: