import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Center(
child: RaisedButton(
child: Text("Test"),
onPressed: () {
print('click-OK');
Navigator.push(context,
MaterialPageRoute(builder: (context) => SecondPage()));
},
),
),
);
}
}

根据错误信息,错误原因是因为使用的context不包含Navigator实例作为父widget。
也就是在所有的当前用到过的widget中,都没有以Navigator作为父widget的widge。

首先,MaterialApp作为根widget,判断是会能响应跳转页面事件的,其次查看官方文档,看到其中是有navigation相关的,判断MaterialApp是包含Navigator子widget的,能响应跳转事件

那说明在找widget的时候没有在MaterialApp中去找。

查找资料发现

This happens because when you do Navigator.of(context), it will start from the widget associated to the context used. And then go upward in the widget tree until it either find a Navigator or there's no more widget.
这是因为当您执行Navigator.of(context)时,它将从与所使用的context关联的小部件开始。然后在窗口小部件树中向上移动,直到找到导航器或者不再有窗口小部件。

再回到关键性的跳转代码

Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondPage())
);

context 上下文 是MyApp的Context,所以直接根本不会在MyApp下的子widget中去找,所以也不可能找到MaterialApp和下面的子widget,而在MyApp上面是没有widget的,MyApp又是咱们自己创建的并没有包含Navigator,所以无法实现跳转。

问题解决
    • 方式一:
      在MaterialApp下引入一个widget,让Navigator调用该widget的context去找响应跳转的widget
 import 'package:flutter/material.dart';

 void main() => runApp(MyApp());

 class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MainApp',
home: MainPage(),
);
}
} class MainPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: RaisedButton(
child: Text("Test"),
onPressed: () {
print('click-OK');
Navigator.push(context,
MaterialPageRoute(builder: (context) => SecondPage()));
},
),
);
}
}

方式二:
使用Builder

mport 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Builder(
builder: (context) => Center(
child: RaisedButton(
child: Text("Test"),
onPressed: () {
print('click-OK');
Navigator.push(context,
MaterialPageRoute(builder: (context) => SecondPage()));
},
),
),
),
);
}
}

  

最新文章

  1. Open Xml 读取Excel中的图片
  2. SQL语句 分页实现
  3. mysql mybatis-generator plugin 有page实体类的分页
  4. 3秒后自动跳转页面【js】
  5. 剑指Offer 连续子数组的最大和
  6. C#完成最简单的WebService创建及使用
  7. URAL 1066 Garland 二分
  8. LINUX 内核2
  9. cocos2d-x 纹理研究
  10. Codeforces2B - The least round way(DP)
  11. CodeForces 710B Optimal Point on a Line
  12. Social Network Analysis的Centrality总结,以及networkx实现EigenCentrality,PageRank和KatzCentrality的对比
  13. DotNetCore跨平台~linux上还原自主nuget包需要注意的问题
  14. Linux之命令的组合
  15. IntelliJ Idea 第一次使用
  16. Ansible配置免密登陆
  17. yd的汇总
  18. oracle-pl/sql之二
  19. 禅道在docker上部署与迁移
  20. 用select模拟一个socket server成型版

热门文章

  1. es6 实现双链表
  2. MATLAB学习(八)神经网络拟合工具箱 Neural Net Fitting使用示例
  3. JAVA 基础编程练习题9 【程序 9 求完数】
  4. 深入解读TCP/IP
  5. mysql8修改密码问题
  6. CentOS下Hive搭建
  7. ImportError: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
  8. 【JAVA开发】eclipse最新版本Eclipse Neon
  9. iptables 命令
  10. 初识WSGI接口