Fluter-导航器不返回(黑屏)

时间:2019-05-07 23:14:17

标签: dart flutter

我是扑朔迷离的新手,我有一个主页,其中有一个“抽屉”菜单和正文列表内容。

DRAWER MENU =>在抽屉菜单的点击项目列表中,我正在加载PAGE网站网址,在点击BACK时,它将返回我的主页。因此效果很好。

主体列表内容=>在点击项列表中,它很好地加载了网页网址,但是当我想返回首页时,它会返回黑屏:(

Homepage.dart

class HomePage extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _HomePage();
  }

}

class _HomePage extends State<HomePage>{

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    var globalContext = context;
    return Scaffold(

      appBar: AppBar(
        title: Text(
            'Benvenuto',
            style: TextStyle(color: Colors.white)
        ),
        backgroundColor: Color(0xFF4035b1),
      ),
      drawer: Drawer(
        child: new Column(
          children: <Widget>[
            new UserAccountsDrawerHeader(
                accountName: Text('VIA ALBERTO POLIO 54'),
                decoration: BoxDecoration(
                    gradient: LinearGradient(
                        colors: [
                          Color(0xFF4268D3),
                          Color(0xFF584CD1)
                        ],
                        begin: FractionalOffset(0.2, 0.0),
                        end: FractionalOffset(1.0, 0.6),
                        stops: [0.0, 0.6],
                        tileMode: TileMode.clamp
                    )
                ),
                accountEmail: Text('ORARI: LUNEDI - VENERDI 9:30 / 19:30'),
                currentAccountPicture: new CircleAvatar(
                  radius: 50.0,
                  backgroundColor: const Color(0xFF778899),
                  backgroundImage: AssetImage("assets/img/icon_logo.jpg"),
                )
            ),
            // This list work well! 
            ListTile(
                leading: new Icon(Icons.arrow_forward_ios),
                title: new Text("TEST"),
                onTap: () {
                  Navigator.of(context).pop();
                  Navigator.of(context).push(MaterialPageRoute(
                      builder: (BuildContext context) => Page("title", "www.google.com")));
                }
            )
          ],
        ),
      ),
      // The menu on my body load well the page web url but doesn't return back to my homepage. 
      body: new Column(
          children: <Widget>[
            ListTile(
                leading: new Icon(Icons.arrow_forward_ios),
                title: new Text("TEST"),
                onTap: () {
                  Navigator.of(context).pop();
                  Navigator.of(context).push(MaterialPageRoute(
                      builder: (BuildContext context) => Page("title", "www.google.com")));
                }
            )
          ])
    );
  }
}

Page.dart

class Page extends StatelessWidget{

  final String titleText;
  final String urlSource;

  Page(this.titleText, this.urlSource);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new WebviewScaffold(
      url: urlSource,
      appBar: new AppBar(
        title: Text(titleText),
      ),
      withZoom: true,
      withLocalStorage: true,
      hidden: true,
    );
  }
}

main.dart

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: HomePage()
    );
  }
}

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您不应仅在Navigator.push()之前使用Navigator.pop()。

如果要用新页面替换当前页面,则可以使用Navigator.of(context).pushReplacement()。

如果您只想导航到新路线,请删除pop方法并仅使用push

答案 1 :(得分:0)

这里的真正问题是,当您使用Navigator.pop()时,您正在从“页面堆栈”中将其删除。当您在Drawer()上使用Navigator.pop()时,“。pop”函数将删除Drawer并保留主页。

但是,当您将它与页面的“主体”的一部分ListTile()一起使用时,只需将其删除。

无论在按下时折叠主页的任何内容,例如抽屉,对话框或什至是键盘,都将使用Navigator.pop()删除,实现“ Navigator.pop()”的页面上的任何其他内容也将被删除。而是删除页面。

答案 2 :(得分:0)

Navigator.of(context).pop();

这是扑扑屏幕。 您也可以参考此文档https://api.flutter.dev/flutter/widgets/Navigator/pop.html 您的主页后面没有任何堆栈,因此当您编写Navigator.of(context).pop();时,然后它将弹出没有任何内容的主页,并且始终显示空白屏幕。 当您尝试过Navigator.of(context).pop();在抽屉中,然后它的主页作为扑扑中的一叠即是您的情况下的主页,它将弹出到主页并显示空白页。