首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >navigator.push在颤振,没有错误,但它不能移动到另一个页面

navigator.push在颤振,没有错误,但它不能移动到另一个页面
EN

Stack Overflow用户
提问于 2022-02-09 14:55:03
回答 2查看 756关注 0票数 1
代码语言:javascript
复制
 class _MyHomePageState extends State<MyHomePage> 
    @override
     Widget build(BuildContext context) {
     return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: Text("Main page"),
          backgroundColor: Colors.black,
        ),
        body: Center(
          child: Column(
            children: [
              Text(
                'this is main page',
                textAlign: TextAlign.center,
                style: TextStyle(
                  fontSize: 50,
                ),
              ),
              RaisedButton(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) {
                      return TestPage();
                    }),
                  );
                },
                child: Text('go to test page'),
              ),
           
            ],
          ),
        ),
       ),
     );
    }
   }

导航器不会出现错误,但它不会转到另一个页面,只是在控制台中提供了很多信息。

代码语言:javascript
复制
======== Exception caught by gesture 
The following assertion was thrown while handling a gesture:
Navigator operation requested with a context that does not include a Navigator.

The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget.
When the exception was thrown, this was the stack: 
#0      Navigator.of.<anonymous closure> (package:flutter/src/widgets/navigator.dart:2741:9)
#1      Navigator.of (package:flutter/src/widgets/navigator.dart:2748:6)
#2      Navigator.push (package:flutter/src/widgets/navigator.dart:2137:22)
#3      _MyHomePageState.build.<anonymous closure> (package:navigator_push_route/main.dart:43:29)
#4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:989:21)
#5      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:193:24)
#6      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:608:11)
#7      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
#8      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:230:7)
#9      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:558:9)
#10     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:94:12)
#11     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:139:9)
#12     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:400:8)
#13     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:137:18)
#14     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:123:7)
#15     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:440:19)
#16     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:420:22)
#17     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:278:11)
#18     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:374:7)
#19     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:338:5)
#20     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:296:7)
#21     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:279:7)
#25     _invoke1 (dart:ui/hooks.dart:185:10)
#26     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:293:7)
#27     _dispatchPointerDataPacket (dart:ui/hooks.dart:98:31)
(elided 3 frames from dart:async)
Handler: "onTap"
Recognizer: TapGestureRecognizer#b9e3b
  debugOwner: GestureDetector
  state: possible
  won arena
  finalPosition: Offset(194.0, 253.0)
  finalLocalPosition: Offset(66.0, 24.0)
  button: 1
  sent tap down
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-09 15:09:23

你使用了错误的上下文。

将您的RaisedButton移动到另一个具有新上下文的页面,或者用如下的构建器包装它:

代码语言:javascript
复制
 Builder(
             builder: (context) {
               return RaisedButton(
                 onPressed: () {
                   Navigator.push(
                     context,
                     MaterialPageRoute(builder: (context) {
                       return TestPage();
                     }),
                   );
                 },
                 child: Text('go to test page'),
               );
             }
           ),

这应该能行

票数 1
EN

Stack Overflow用户

发布于 2022-02-09 15:08:15

将父部件上的MaterialApp分开。

代码语言:javascript
复制
void main() {
  runApp(
    const MaterialApp(    
      home: MyHomePage(),
    ),
  );
}

或者上下文创建一个小部件,

代码语言:javascript
复制
void main() {
  runApp(
    const MyApp(),
  );
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return  MaterialApp(
      home: MyHomePage(),
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71051801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档