标签: gorouter

Flutter firebase 身份验证事件处理程序和热重载

关注此博客文章:https://blog.ishangavidusha.com/flutter-authentication-flow-with-go-router-and-provider

我已经使用 go router 实现了一个 flutter 应用程序。我已在我的 flutter 应用程序中添加了 firebase 身份验证处理程序initState()

 @override
  void initState() {
    appService = AppService(widget.sharedPreferences);
    authService = AuthService();
    authSubscription = authService.onAuthStateChange.listen(onAuthStateChange);
    super.initState();
  } 
Run Code Online (Sandbox Code Playgroud)

在我的 authservice 类中,我有一个如下的构造函数:

 AuthService() {
    authSubscription =
        FirebaseAuth.instance.authStateChanges().listen((User? user) {
      if (user == null) {
        //appService.loginState = false;
        print('User is currently signed out!');
        _onAuthStateChange.add(false);
      } else {
        //appService.loginState = true;
        print('User is signed in!');
        _onAuthStateChange.add(true);
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

一切正常。当我在应用程序中更改某些内容并保存更改时,应用程序会执行热重新加载。似乎热重载使前一个事件处理程序保持活动状态,因为每次热重载后,authStateChanges当我执行登录任务时,我都会再调用一次事件处理程序。热重载后,print('User is signed in!');登录后我会得到两个打印语句。每次热重载后还会有一个。

这是可以接受的开发行为还是我的应用程序架构不正确?

dart firebase firebase-authentication flutter gorouter

5
推荐指数
1
解决办法
464
查看次数

如何通过 go_router 使用 Flutter Firebase 动态链接

我已经firebase dynamic links在我的应用程序中集成并工作正常,后来我改为使用go_router,现在我不知道应该做什么才能让它工作或如何处理它。

我想象的方式是 FB 动态链接将与 中的页面path相同,并且 go_router 将自动转到该页面,但我不认为这就是它的工作原理,而且我找不到任何资源为了这。pathGoRouter routesredirect

那么问题是如何使用Firebase DynamicLinkswith go_router

flutter firebase-dynamic-links gorouter

5
推荐指数
1
解决办法
2089
查看次数

如何使用GoRouter保留底部导航栏和应用栏?

我正在尝试实现一个底部导航和应用栏已修复的页面。但是,当我按下按钮时,它将转到另一个页面,而无需重新创建应用程序栏和底部导航栏。对于路由,我使用go_router包。

这里有一个使用 Navigator 的答案。但是有什么办法可以使用go_router来实现它吗?

示例页面:

例子

主页示例:

主页示例

dart flutter gorouter flutter-go-router

5
推荐指数
1
解决办法
2149
查看次数

是否可以使用GoRouter包实现导航栏?

我正在尝试使用新的 Material You API 来实现 NavigationBar。

https://api.flutter.dev/flutter/material/NavigationBar-class.html

我只是想知道我们是否可以使用 Go_Router 包实现相同的功能。

dart flutter gorouter material-you

4
推荐指数
1
解决办法
3638
查看次数

Flutter:如何在 Riverpod 提供商中监听 GoRouter 的路线/位置变化?

我正在使用 go_router 和 Riverpod 开发 Flutter 应用程序,分别用于导航和状态管理。该应用程序有一个小部件,可以显示实时摄像头源,我想“关闭它”并在其他页面堆叠在其顶部时释放摄像头。

这是没有这样逻辑的GoRouter 代码示例。

GoRouter(
  routes: [
    GoRoute(
      path: '/',
      builder: (context, state) => CameraWidget(),
      routes: [
        GoRoute(
          path: 'page1',
          builder: (context, state) => Page1Screen(),
        ),
      ],
    ),
  ],
)
Run Code Online (Sandbox Code Playgroud)

我的第一次尝试是在 GoRoute 构建器中添加一些逻辑:

GoRouter(
  routes: [
    GoRoute(
      path: '/',
      builder: (context, state) {
        if (state.location == "/") {
          return CameraWidget();
        }
        return Center(child: Text("Camera not visible");
      },
      routes: [
        GoRoute(
          path: 'page1',
          builder: (context, state) => Page1Screen(),
        ),
      ],
    ),
  ],
)
Run Code Online (Sandbox Code Playgroud)

但这显然不起作用 …

flutter gorouter riverpod flutter-riverpod routemaster

4
推荐指数
1
解决办法
1万
查看次数

使用 go_router 时如何从子路由推送到根导航器

我在 flutter 上使用 go_router,并且有一个根路由和一个 shell 路由,其中​​所有子路由上都包含一个底部导航栏。我想推送一个位于 shell 路由之外的页面,并且我希望将其推送到根导航器上,因为它必须位于底部导航栏上方。

我已经检查了无数的 go_router 文档,但没有选项可以做到这一点。

我已经实现了一种方法来删除所有路由并在根导航器上推送页面,但是当弹出该页面时,它会转到一个空页面。但我希望它转到 shell 路由上的页面时所在的位置。

flutter gorouter flutter-navigation flutter-go-router

4
推荐指数
1
解决办法
1289
查看次数

“无法多次设置 URL 策略。” 在 Flutter Web 中使用 go_router 时出错

我正在为 Flutter Web 使用 go_router flutter 包。我在重新加载网站时收到此错误。后退按钮工作得很好,但重新加载会导致这种情况。

断言失败:org-dartlang-sdk:///flutter_web_sdk/lib/_engine/engine/window.dart:25:10 !_isUrlStrategySet“无法多次设置 URL 策略。”

下面是我的 main.dart 的代码:

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:navigator_2/some_app.dart';

import 'details_page.dart';

void main() {
runApp( MyApp());
}


class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
  final GoRouter _router = GoRouter(
    urlPathStrategy: UrlPathStrategy.path,
    routes: [
  GoRoute(path: '/',builder: (context,state)=> const SomeAppPage()),
  GoRoute(path: '/details',builder: (context,state){
    final query = state.queryParams['index'];
    return DetailsPage(index: int.parse(query!));
  }),
]);
return  MaterialApp.router(
  routeInformationParser: _router.routeInformationParser,
    routerDelegate: _router.routerDelegate ,
    title: 'Go Router Example',
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ), …
Run Code Online (Sandbox Code Playgroud)

deep-linking dart flutter gorouter flutter-web

3
推荐指数
1
解决办法
3770
查看次数

如何使用 Go Router 获取之前的路线位置?

我想做的是,例如,如果路由器从登录到验证屏幕执行某些操作,但是当注册但未登录的上一个位置时,则不执行某些操作。

所以我想获取上一个位置对其进行一些逻辑,我知道我可以将参数传递到页面,然后从中执行逻辑,例如传递一个 bool 并在 true 或 false 时执行逻辑,但我想要更好或正确的方式,如果你知道我想要的话。谢谢。

我在 go router 中遇到了这个方法,它的作用是什么?它仅用于记录目的吗?我尝试在参数中添加路线名称或位置,但它会引发错误。我需要在这里输入什么参数,我不知道在哪里可以找到路线,谢谢。

context.didPush(Route<dynamic> route, Route<dynamic>? previousRoute);
Run Code Online (Sandbox Code Playgroud)

navigation dart flutter gorouter

3
推荐指数
1
解决办法
4610
查看次数

没有上下文的导航 go_router flutter

我有我的路由的配置类,我通过模块使用它,如下代码所示:

class RouterRegister {
  static RouterRegister? _instance;

  static RouterRegister getIntance() {
    return _instance ??= RouterRegister();
  }

  final RouterConfig<Object> router = GoRouter(
    navigatorKey: GlobalKey<NavigatorState>(),
    initialLocation: '/',
    observers: [
      FirebaseAnalyticsObserver(analytics: FirebaseAnalytics.instance)
    ],
    routes: <RouteBase>[
      ShellRoute(
        builder: (context, __, child) => child,
        
        routes: [
          ...MicroAuthRoutes.getIntance().routes,
        ],
      )
    ],
  );
}
Run Code Online (Sandbox Code Playgroud)

我的 MicroAuthRoutes 类是这样的:

class MicroAuthRoutes {
  static const splash = '/';
  static const login = '/login';
  static const forgot = '/forgot';
  static const signup = '/signup';
  static const token = '/token';

  static MicroAuthRoutes? …
Run Code Online (Sandbox Code Playgroud)

navigation dart flutter gorouter flutter-go-router

3
推荐指数
1
解决办法
584
查看次数

Flutter Go Router 中 Navigator 参数的等效项

就 Go Router 而言,下面的 Flutter Navigator 相当于什么?

    Navigator.pushNamed(
       context,
       Routes.CHANNEL_PAGE,
       arguments:ChannelPageArgs(
         channel:channel,
          initialMessage:message,
        ),
    );
Run Code Online (Sandbox Code Playgroud)

通常 Go Router 基于路径中的参数。但上面的例子是基于对象而不是原始参数。

        GoRoute(
          path: '/profile/:id',
          builder: (context, state) => ProfilePage(id: state.params['id']!),
        ),
Run Code Online (Sandbox Code Playgroud)

routes dart flutter gorouter flutter-go-router

2
推荐指数
1
解决办法
4236
查看次数