老师视频里的MaterialApp之间路由时,为什么Pop 是黑色呢,具体啥原因
来源:6-7 如何创建和使用Flutter的路由与导航?【边学边做】
北京小爷儿
2019-04-25
老师视频里的MaterialApp之间路由时,为什么Pop 是黑色呢,具体啥原因
写回答
1回答
-
最初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
142020-05-17
相似问题