导航器没有要替换的活动路线

mra*_*api 2 dart flutter

我有一个运行良好的项目,但在最新的 flutter core 更新之后却没有,我得到了:

E/flutter (4510): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] 未处理的异常:'package:flutter/src/widgets/navigator.dart':断言失败:第 3582 行 pos 12:'_history .any(_RouteEntry.isPresentPredicate)':导航器没有要替换的活动路由。E/flutter (4510): #0
_AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:46:39) E/flutter (4510): #1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart: 36:5)

  Future<void> _submit() async {
    if (!_formKey.currentState.validate()) {
      return;
    }
    _formKey.currentState.save();

    final pref = await SharedPreferences.getInstance();
    pref.setString('ip', _ip);
    pref.setBool('isTablet', isTablet);
   pref.setBool('setting1', isActivated);

     
// error on next part of the code

      Navigator.of(context).pop(); 
      Navigator.of(context).pushReplacementNamed('/');

      Provider.of<Auth>(context, listen: false).logout();
  }
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 5

根据您的问题,我假设您有 2 条路线。1 表示包含您的提交功能的当前屏幕,然后另一个 1 是“/”。

Navigator.of(context).pop(); // closes the current screen
Navigator.of(context).pushReplacementNamed('/') // replaces the current screen
Run Code Online (Sandbox Code Playgroud)

因此,如果您确实弹出当前屏幕,则代码中的下一行会出现错误,因为堆栈上没有您的代码段将替换的路由。删除 Navigator.of(context).pop(); 它会解决你的问题。