在 Flutter 中使用 Navigator.push() 时出现黑屏

Posted

技术标签:

【中文标题】在 Flutter 中使用 Navigator.push() 时出现黑屏【英文标题】:Black screen when using Navigator.push() in Flutter 【发布时间】:2020-07-23 04:25:47 【问题描述】:

我正在尝试使用 Navigator.push 导航到 Flutter 中的新页面。这是我到目前为止所得到的:

GestureDetector(
            onTap: () 
              print('Test');
//              Navigator.push(context,
//                  MaterialPageRoute(builder: (context) => ResultsPage()));
            ,
            child: Container(
              color: Color(0xFFff474b),
              child: Center(
                child: Text('CALCULATE', style: kButtonText),
              ),
              padding: EdgeInsets.only(bottom: 20.0),
              width: double.infinity,
              height: 80.0,
              margin: EdgeInsets.only(top: 10.0),
            ),
          ),

我想实现的代码被注释掉了,因为我一直在用 print 语句测试 onTap。

有趣的是,打印语句运行,但由于某种原因,我无法让 Navigator.push 工作。它只会导航到黑屏。

就上下文而言,这是结果页面 - 只是一个带有 App Bar 的简单脚手架。但是应用栏没有显示在下一页:

class ResultsPage extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text('Calculated Distance'),
      ),
    );
  

【问题讨论】:

【参考方案1】:

该错误可能是由于脚手架中存在两个或多个浮动操作按钮造成的。默认情况下,浮动动作按钮有一个 Hero 属性处于活动状态。通过 heroTag: null, 使其停用。

例如,

FloatingActionButton(
                    heroTag: null,
                    child: Icon(),
                    onPressed: () ,
                  ),

【讨论】:

【参考方案2】:

啊,事实证明问题是我在页面上有两个 FloatingActionButton,因此它与 Navigator 路由混淆了。

我发现的这篇 Medium 文章是解决方案的一个很好的指南:https://medium.com/@kaendagger/test-cef30fcb5c54

【讨论】:

【参考方案3】:

将 ResultsPage() 添加到您的路线中将其添加到您的 MaterialApp(

MaterialApp( 
  initialRoute: '/',
              routes: 
                '/': (_) => HOME(),
                '/home': (_) => ResultsPage(),
              , ) 

【讨论】:

以上是关于在 Flutter 中使用 Navigator.push() 时出现黑屏的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript--兼容问题总结

flutter系列之:在flutter中使用导航Navigator

Flutter - 无法在flutter web中使用动态链接

在 Flutter Web 中使用 Flutter 移动包

如何使用 flutter_webview 插件在 Flutter 中启用位置?

在flutter中使用Chopper网络库和flutter_bloc库