老师视频里的MaterialApp之间路由时,为什么Pop 是黑色呢,具体啥原因

来源:6-7 如何创建和使用Flutter的路由与导航?【边学边做】

北京小爷儿

2019-04-25

老师视频里的MaterialApp之间路由时,为什么Pop 是黑色呢,具体啥原因

写回答

1回答

CrazyCodeBoy

2019-04-25

最初PluginUse页面之所以pop时出现黑屏是由于下面的代码导致的:

import 'package:flutter/material.dart';
import 'package:flutter_color_plugin/flutter_color_plugin.dart';

///如何使用Flutter包和插件?
class PluginUse extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '如何使用Flutter包和插件?',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}
class MyHomePage extends StatefulWidget {

  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('如何使用Flutter包和插件?'),
        leading: GestureDetector(
          onTap: () {
            Navigator.pop(context);
          },
          child: Icon(Icons.arrow_back),
        ),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
              style: TextStyle(color: ColorUtil.color('#a9ee00')),
            ),
          ],
        ),
      ),
    );
  }
}
  • 在上述代码中我们用到了MaterialApp,我们所说的路由是MaterialApp级别的,也就是说如果当前页面用了MaterialApp那么在当前页面使用pop返回上一个页面时,会从当前页面的MaterialApp中查找上一个页面,如果没有则返回到一个黑屏的空白页面。

  • 另外,我们想要实现的是在PluginUse返回到main.dart页面,main.dart页面中已经有了MaterialApp,所以这里需要将PluginUse页面中的MaterialApp去掉才能通过pop返回到上一个main.dart页面


问题分析清楚后,解决这个pop黑屏的问题除了视频中所讲的方式之外,还可以通过:

///如何使用Flutter包和插件?
class PluginUse extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MyHomePage();
  }
}
class MyHomePage extends StatefulWidget {
...

这种方式直接将PluginUse中的MaterialApp去掉即可。

另外关于MaterialApp的详细介绍可以参考:http://coding.imooc.com/learn/questiondetail/115956.html


1
4
iStream
回复
MRDaemon
老师的一个简单的路由进得如此复杂,能不能创建一个工程,来讲, 去掉无关多于的代码,这课听起来费劲, 到目前为止:没有讲到flutter app 的结构,感觉非常林乱 以我对慕课网的经验,如果flutter 越来越火,老师的视频会被删减,或者被换掉。
2020-05-17
共4条回复

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3270 问题

查看课程