有没有什么办法可以通过 Flutter 中的条件返回到以前的路线?
Is there any way to pop back to previous route by a condition in Flutter?
我目前正在我的应用程序上执行购买功能。每当免费用户点击高级功能时,它将弹出到上一个屏幕,用户现在可以使用高级功能。
这是我当前的代码:
检查高级功能:
if (!PremiumUtils.checkLifetimePremium(user?.premiumStatus) &&
!PremiumUtils.checkSubscriptionPremium(user?.premiumExpireDate)) {
Navigator.push(context, _createUpgradeRoute());
}
如果用户是免费用户,则显示升级UI。我使用 PremiumUtils
检查购买是否完成,在路线之间导航:
part of pages;
class Upgrade extends StatelessWidget {
const Upgrade({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
UserModel? user = context.watch<AppViewModel>().userModel;
return ChangeNotifierProvider(
create: (context) => UpgradeViewModel(),
child: Builder(
builder: (context) {
return Consumer<UpgradeViewModel>(
builder: (context, provider, child) {
if (PremiumUtils.checkLifetimePremium(user?.premiumStatus) ||
PremiumUtils.checkSubscriptionPremium(user?.premiumExpireDate)) {
Navigator.pop(context);
}
return the UI;
}
}
));
}
}
这显然导致了 setState() or markNeedsBuild() called during build
异常。我想不出任何办法。
请给我一些关于这个问题的想法!
将其包装在 Future.microtask
中。这将安排它在下一个异步任务周期发生(即在 build
完成后)。
Future.microtask(() => Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginView())
))
我目前正在我的应用程序上执行购买功能。每当免费用户点击高级功能时,它将弹出到上一个屏幕,用户现在可以使用高级功能。
这是我当前的代码:
检查高级功能:
if (!PremiumUtils.checkLifetimePremium(user?.premiumStatus) &&
!PremiumUtils.checkSubscriptionPremium(user?.premiumExpireDate)) {
Navigator.push(context, _createUpgradeRoute());
}
如果用户是免费用户,则显示升级UI。我使用 PremiumUtils
检查购买是否完成,在路线之间导航:
part of pages;
class Upgrade extends StatelessWidget {
const Upgrade({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
UserModel? user = context.watch<AppViewModel>().userModel;
return ChangeNotifierProvider(
create: (context) => UpgradeViewModel(),
child: Builder(
builder: (context) {
return Consumer<UpgradeViewModel>(
builder: (context, provider, child) {
if (PremiumUtils.checkLifetimePremium(user?.premiumStatus) ||
PremiumUtils.checkSubscriptionPremium(user?.premiumExpireDate)) {
Navigator.pop(context);
}
return the UI;
}
}
));
}
}
这显然导致了 setState() or markNeedsBuild() called during build
异常。我想不出任何办法。
请给我一些关于这个问题的想法!
将其包装在 Future.microtask
中。这将安排它在下一个异步任务周期发生(即在 build
完成后)。
Future.microtask(() => Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginView())
))