未处理的异常:不良状态:未来已经扑朔迷离

时间:2019-12-01 18:34:13

标签: flutter dart flutter-dependencies

您好,当我导航到应用程序中的另一个页面时出现此错误

我不知道为什么出现此错误

#0      _AsyncCompleter.complete  (dart:async/future_impl.dart:39:31)
#1      Route.didComplete 
package:flutter/…/widgets/navigator.dart:203
#2      NavigatorState.pushReplacement.<anonymous closure> 
package:flutter/…/widgets/navigator.dart:1861
#3      TickerFuture.whenCompleteOrCancel.thunk 
package:flutter/…/scheduler/ticker.dart:389
#4      _rootRunUnary  (dart:async/zone.dart:1132:38)
#5      _CustomZone.runUnary  (dart:async/zone.dart:1029:19)
#6      _FutureListener.handleValue  (dart:async/future_impl.dart:137:18)
#7      Future._propagateToListeners.handleValueCallback  (dart:async/future_impl.dart:678:45)
#8      Future._propagateToListeners  (dart:async/future_impl.dart:707:32)
#9      Future._completeWithValue  (dart:async/future_impl.dart:522:5)
#10     Future._asyncComplete.<anonymous closure>  (dart:async/future_impl.dart:552:7)
#11     _rootRun  (dart:async/zone.dart:1124:13)
#12     <…> 

导航代码为

Navigator.pop(context);
Navigator.pushReplacementNamed(context, '/NavigationBar');

路线就是这样

 routes: {
        "/": (BuildContext context) => LoginPage(),
        "/NavigationBar": (BuildContext context) => NavigationBarPage(),

      },

1 个答案:

答案 0 :(得分:2)

我已通过官方示例重现了此错误
删除Navigator.pop(context);可以正常使用

在演示中,第一屏单击按钮转到第二屏。
您不需要Navigator.pop(context);
只需Navigator.pushReplacementNamed(context, '/second');就可以使用
代码段

onPressed: () {
            //Navigator.pop(context); remove this line
            // Navigate to the second screen using a named route.
            Navigator.pushReplacementNamed(context, '/second');
          },

完整代码

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: 'Named Routes Demo',
    // Start the app with the "/" named route. In this case, the app starts
    // on the FirstScreen widget.
    initialRoute: '/',
    routes: {
      // When navigating to the "/" route, build the FirstScreen widget.
      '/': (context) => FirstScreen(),
      // When navigating to the "/second" route, build the SecondScreen widget.
      '/second': (context) => SecondScreen(),
    },
  ));
}

class FirstScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Screen'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Launch screen'),
          onPressed: () {
            //Navigator.pop(context); remove this line
            // Navigate to the second screen using a named route.
            Navigator.pushReplacementNamed(context, '/second');
          },
        ),
      ),
    );
  }
}

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Second Screen"),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () {
            // Navigate back to the first screen by popping the current route
            // off the stack.
            Navigator.pop(context);
          },
          child: Text('Go back!'),
        ),
      ),
    );
  }
}

如果有Navigator.pop(context),则会出现错误消息;在Navigator.pushReplacementNamed

之前

enter image description here