【问题标题】:How to transition to a new screen instantly如何立即过渡到新屏幕
【发布时间】:2020-06-18 19:49:57
【问题描述】:

我想立即创建从一个屏幕到另一个屏幕的过渡(无动画)。然而 isInitialRoute 会由于 Router 小部件的更新而产生错误。建议是使用 onGenerateInitialRoutes 但我不知道如何实现它。

颤振设计文档建议这样做: 路线和路线设置 目前,在不播放其入口动画的情况下将 Route 添加到历史堆栈的唯一方法是在其 RouteSettings 中将其标记为初始路由。声明式 API 要求可以随时添加不带动画的路由。当该路线被另一条路线覆盖并且播放动画根本没有意义时,这很有用。为了支持这一点,在 Route 接口中添加了一个 didAdd 方法。这个方法由 Navigator 调用而不是 didPush 当 Route 应该被添加而没有它的常规入口动画时。为简化起见,这种新方法还将用于将初始路线显示在屏幕上。这使得 RouteSettings.initialRoute 参数无用,并将从 RouteSettings 中删除。这是一个小的重大更改。

这是在 isInitialRoute 上生成错误的代码:

import 'package:flutter/cupertino.dart'
show
    CupertinoApp,
    CupertinoButton,
    CupertinoPageRoute,
    CupertinoPageScaffold;
import 'package:flutter/widgets.dart'
show
    BuildContext,
    Center,
    Column,
    Navigator,
    Route,
    RouteSettings,
    SafeArea,
    Spacer,
    Text,
    runApp,
    Widget;

Widget makeButton(BuildContext context, String routeName) =>
new CupertinoButton(
  onPressed: () => Navigator.pushReplacementNamed(context, routeName),
  child: Text('Go to \'$routeName\''),
);

Route generateRoute(RouteSettings settings) {
    switch (settings.name) {
        case 'not-animated':
            return new CupertinoPageRoute(
                settings: RouteSettings(name: settings.name, isInitialRoute: true),
                builder: (context) => CupertinoPageScaffold(
                    child: SafeArea(
                        child: Center(
                            child: Column(
                                children: [
                                    Spacer(),
                                    Text('This is \'not-animated\''),
                                    makeButton(context, 'animated'),
                                    Spacer(),
                                ],
                            ),
                        ),
                    ),
                ),
            );
        default:
            return null;
    }
}

void main() {
runApp(
CupertinoApp(
    onGenerateRoute: generateRoute,
    initialRoute: 'animated',
    routes: {
    'animated': (context) => CupertinoPageScaffold(
          child: SafeArea(
            child: Center(
              child: Column(
                children: [
                  Spacer(),
                  Text('This is \'animated\''),
                  makeButton(context, 'not-animated'),
                  Spacer(),
                ],
              ),
            ),
          ),
        ),
      },
    ),
  );
}

【问题讨论】:

    标签: flutter


    【解决方案1】:

    如果您只想浏览屏幕,请将其添加到您的代码中

    onTap: (){
                    Navigator.push(
                      context,
                      MaterialPageRoute(builder: (context) => yoursecondscreenname()),
                    );
                  },
    

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 2018-08-12
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2015-08-04
      相关资源
      最近更新 更多