Как мгновенно перейти на новый экран - PullRequest
0 голосов
/ 18 июня 2020

Я хочу создать переход сразу с одного экрана на другой (без анимации). Однако isInitialRoute генерирует ошибку из-за обновления виджета Router. Предлагается использовать onGenerateInitialRoutes, но я не уверен, как это реализовать.

Дизайн флаттера c рекомендует следующее: Routes & RouteSettings В настоящее время единственный способ добавить маршрут в стек истории без воспроизведения его входная анимация должна пометить его как начальный маршрут в его RouteSettings. Декларативный API требует, чтобы маршруты можно было добавлять без анимации в любое время. Это полезно, когда маршрут проходит по другому маршруту, и воспроизведение анимации просто не имеет смысла. Для поддержки этого в интерфейс Route добавлен метод didAdd. Этот метод вызывается навигатором вместо didPu sh, когда маршрут нужно просто добавить без обычной анимации входа. Чтобы упростить задачу, этот новый метод также будет использоваться для вывода на экран начального маршрута. Это делает параметр 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(),
                ],
              ),
            ),
          ),
        ),
      },
    ),
  );
}

1 Ответ

0 голосов
/ 19 июня 2020

Если вы хотите просто перемещаться по экрану, добавьте это в свой код

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