有没有什么办法可以通过 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())
))