Флаттер устанавливает переходы для пользовательских маршрутов - PullRequest
0 голосов
/ 31 марта 2020

в нашем приложении мы реализуем пользовательскую навигацию по маршруту, и я хочу установить переход для этого, например, это наш пользовательский маршрут, который работает без проблем

Navigator(
  key: navigatorKey,
  initialRoute: Page.screenDashboard.route,
  onGenerateRoute: (settings) {
    final pageName = settings.name;

    final page = _fragments.keys.firstWhere(
            (element) => describeEnum(element) == pageName);

    return MaterialPageRoute(
        builder: (context) => FadeAndSlideRightTransition(page: _fragments[page]));
  },
),

в том, как я могу установить переход для MaterialPageRoute?

например:

class SlideRightRoute extends PageRouteBuilder {
  final Widget page;
  SlideRightRoute({this.page})
      : super(
          pageBuilder: (
            BuildContext context,
            Animation<double> animation,
            Animation<double> secondaryAnimation,
          ) =>
              page,
          transitionsBuilder: (
            BuildContext context,
            Animation<double> animation,
            Animation<double> secondaryAnimation,
            Widget child,
          ) =>
              SlideTransition(
                position: Tween<Offset>(
                  begin: const Offset(-1, 0),
                  end: Offset.zero,
                ).animate(animation),
                child: child,
              ),
        );
}    

этот тест не работает и я получаю ошибку:

return MaterialPageRoute(builder: (context) => SlideRightRoute (page: _fragments[page]));    

ошибка

error: The return type 'SlideRightRoute ' isn't a 'Widget', as required by the closure's context. (return_of_invalid_type_from_closure at [fluttersamples] lib\screens.dart:62)

1 Ответ

0 голосов
/ 31 марта 2020

используя

return SlideRightRoute(page: _fragments[page]);

вместо

return MaterialPageRoute(builder: (context) => _fragments[page]);

решил мою проблему

...