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

问题描述 投票:0回答:1

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

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

#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(),

      },

flutter dart flutter-dependencies
1个回答
0
投票

我已通过官方示例重现了此错误删除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

© www.soinside.com 2019 - 2024. All rights reserved.