RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 918401
Accepted
Leksor
Leksor
Asked:2020-12-11 16:34:38 +0000 UTC2020-12-11 16:34:38 +0000 UTC 2020-12-11 16:34:38 +0000 UTC

Flutter 中的导航

  • 772

我正在学习使用颤振并决定处理路线(路线)。面临以下问题:

我有几个屏幕:Screen_1,Screen_2,Screen_3。从Screen_1我去Screen_2,从那里到Screen_3,从那里回到Screen_1。现在,当我按下“返回”键时,它会从 Screen_1 返回到Screen_3 ,然后返回到Screen_2 ,依此类推。问题是如何做到这一点,如果我从Screen_3返回到Screen_1,那么当我按下“返回”键时,我无法返回到Screen_3?以及如何去掉这个箭头“返回”的显示在屏幕顶部?

示例: 视频

动图:

gif

路线代码:

import 'package:flutter/material.dart';
import 'package:quest/Screens/Endings/endings.dart';
import 'package:quest/Screens/NewGame/levelChoice.dart';
import 'package:quest/Screens/NewGame/newGame.dart';
import 'package:quest/Screens/Settings/settings.dart';
import 'package:quest/main.dart';

final routes = {
  '/': (BuildContext context) => new MyApp(),
  '/Endings': (BuildContext context) => new EndingsScreen(),
  '/LevelChoice': (BuildContext context) => new LevelChoiceScreen(),
  '/NewGame': (BuildContext context) => new NewGameScreen(),
  '/Settings': (BuildContext context) => new SettingsScreen()
};

main.dart 代码

import 'package:flutter/material.dart';
import 'package:quest/Config/Routes.dart';
import 'package:quest/Config/UiData.dart';

void main() {
  runApp(MaterialApp(
    title: UiData.AppName,
    debugShowCheckedModeBanner: false,
    initialRoute: '/',
    routes: routes,
  ));
}

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {

    UiData.deviceSize = MediaQuery.of(context).size;

    return Scaffold(
      appBar: AppBar(
        title: Text(UiData.AppName + " " + UiData.AppVersion),
      ),

      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[

            Container(
              height: UiData.deviceSize.height / 5,
              width: UiData.deviceSize.width,

              child: Center(
                child: Text(UiData.AppName,
                  style: new TextStyle(
                    fontSize: 100.0,
                    fontFamily: 'MainFonts',
                    color: Colors.black,
                  ),
                ),
              )
            ),

            Container(
              height: UiData.deviceSize.height / 10,
              width: UiData.deviceSize.width / 2,
              padding: EdgeInsets.all(5.0),

              child: MaterialButton(
                height: UiData.deviceSize.height / 10,
                minWidth: UiData.deviceSize.width / 2,
                color: Theme.of(context).primaryColor,
                textColor: Colors.white,
                child: new Text(
                  "Новая игра",
                  style: new TextStyle(
                    fontSize: 25.0,
                    fontFamily: 'ButtonFonts',
                    color: Colors.yellow,
                  ),
                ),
                onPressed: () {
                  Navigator.pushNamed(context, '/LevelChoice');
                },
                splashColor: Colors.redAccent,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

等级选择代码:

import 'package:flutter/material.dart';
import 'package:quest/Config/UiData.dart';

class LevelChoiceScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Выбор уровня"),
      ),
      body: Center(
        child: ListView(
          children: <Widget>[

            Container(
              height: UiData.deviceSize.height / 10,
              width: UiData.deviceSize.width / 2,
              padding: EdgeInsets.all(5.0),

              child: MaterialButton(
                height: UiData.deviceSize.height / 10,
                minWidth: UiData.deviceSize.width / 2,
                color: Theme.of(context).primaryColor,
                textColor: Colors.white,
                child: new Text(
                  "Акт 1",
                  style: new TextStyle(
                    fontSize: 25.0,
                    fontFamily: 'ButtonFonts',
                    color: Colors.yellow,
                  ),
                ),
                onPressed: () {
                  Navigator.pushNamed(context, '/NewGame');
                },
                splashColor: Colors.redAccent,
              ),
            ),

            RaisedButton(
              onPressed: () {
                Navigator.pop(context);
              },
              child: Text('Go back!'),
            ),
          ],
        ),
      ),
    );
  }
}

新游戏代码:

import 'package:flutter/material.dart';

class NewGameScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Новая игра"),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () {
            Navigator.pushNamed(context, '/');
          },
          child: Text('Go back!'),
        ),
      ),
    );
  }
}
route
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Leksor
    2020-12-11T16:56:31Z2020-12-11T16:56:31Z

    在这里找到了答案

    选择关卡时,我必须使用以下导航:

    Navigator.pushReplacementNamed(context, '/route')
    

    这是它在代码中的样子:

    Container(
      height: UiData.deviceSize.height / 10,
      width: UiData.deviceSize.width / 2,
      padding: EdgeInsets.all(5.0),
    
      child: MaterialButton(
        height: UiData.deviceSize.height / 10,
        minWidth: UiData.deviceSize.width / 2,
        color: Theme.of(context).primaryColor,
        textColor: Colors.white,
        child: new Text(
          "Акт 1",
          style: new TextStyle(
            fontSize: 25.0,
            fontFamily: 'ButtonFonts',
            color: Colors.yellow,
          ),
        ),
        onPressed: () {
          Navigator.pushReplacementNamed(context, '/NewGame');
        },
        splashColor: Colors.redAccent,
      ),
    ),
    

    那么从游戏画面返回主画面的代码是这样的:

    import 'package:flutter/material.dart';
    
    class NewGameScreen extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("Новая игра"),
          ),
          body: Center(
            child: RaisedButton(
              onPressed: () {
                Navigator.pop(context);
              },
              child: Text('Go back!'),
            ),
          ),
        );
      }
    }
    
    • 2

相关问题

  • SIOCDDRT:网络不可用

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5