标签: flutter-routes

Flutter Navigation:将先前的路线置于堆栈顶部

在颤振中,我有一个用例,我想在屏幕顶部返回相同的路线(如果它已经存在),否则推送新路线。

例如,当前堆栈:(A -> B -> C -> D最顶层)

如果我推 B,我只想A -> C -> D -> B。我想将 B 及其状态带到前面。

我浏览了文档,但找不到执行此操作的方法。有人想出办法做到这一点吗?

flutter flutter-navigation flutter-routes

7
推荐指数
0
解决办法
822
查看次数

flutter 自动路由构建运行器错误路由必须有页面或重定向目标

当我将新路由添加到 router.dart 并运行构建运行程序时,我得到 Route必须有一个页面或一个重定向目标错误

下面是我在 router.drat 中的代码:

 
@MaterialAutoRouter(
  replaceInRouteName: 'Page,Route',
  routes: <AutoRoute>[
    AutoRoute(
      path: '/',
      page: SplashPage,
    ),
    AutoRoute(
      path: 'signInPage',
      name: 'SignInRouter',
      page: SignInPage,
    ),
    AutoRoute(
      path: 'noteOverviewPage',
      name: 'NoteOverviewRouter',
      page: NoteOverviewPage,
    ),
    AutoRoute(
      path: 'todoFormPage',
      name: 'todoFormRouter',
      page: TodoFormPage,
    ),
  ],
)
class $AppRouter {}
Run Code Online (Sandbox Code Playgroud)

router dart flutter flutter-dependencies flutter-routes

7
推荐指数
2
解决办法
4761
查看次数

go_router - 有没有办法将同一页面推送两次?

我正在使用go_router构建一个执行“虚拟”路由推送的应用程序(有点像 Twitter)。可以从一个页面开始/a,推送/b,然后/c,...然后再次推送/a

当页面被推送两次时,会assert失败:assert(!keyReservation.contains(key));这确保了密钥在Navigator.

有没有办法能够使用 go_router 推送两次同一页面?

这是一个小代码片段:

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

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

final router = GoRouter(
  initialLocation: '/a',
  routes: [
    GoRoute(
      path: '/a',
      builder: (_, __) => const MyWidget(path: '/a'),
    ),
    GoRoute(
      path: '/b',
      builder: (_, __) => const MyWidget(path: '/b'),
    ),
  ],
);

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-navigation flutter-routes

7
推荐指数
1
解决办法
2268
查看次数

Flutter:自动路由:RouteGuard 在 AutoTabsScaffold 中不起作用

我正在尝试为我的 AutoTabsScaffold [bottom nav] 添加身份验证防护,但它不起作用,它可以在其他导航页面中工作,但不仅仅在我的登陆页面内 [其中 AutoTabsScaffold| 底部导航位于]我在这里遗漏了什么吗?

使用:auto_route: ^3.2.4 [pub.dev]

类登陆页面

   return AutoTabsScaffold(

      backgroundColor: Theme
          .of(context)
          .scaffoldBackgroundColor,
        routes: const [
          HomeRouter(),
          CategoryRouter(),
          OrderRouter(),
          ProfileRoute(),
      ],
      bottomNavigationBuilder: (_, tabsRouter) {return}
Run Code Online (Sandbox Code Playgroud)

类授权守卫:

class RouteGuard extends AutoRedirectGuard {
  final AuthService authService;

  RouteGuard(this.authService) {
    authService.addListener(() {
      if (!authService.authenticated) {
        // should be called when the logic effecting this guard changes
        // e.g when the user is no longer authenticated
        reevaluate();
      }
    });
  }

  @override
  void onNavigation(NavigationResolver resolver, StackRouter router) {
    if (authService.authenticated) …
Run Code Online (Sandbox Code Playgroud)

routes flutter flutter-routes

6
推荐指数
1
解决办法
2146
查看次数

颤动检查是屏幕堆栈顶部的页面

我有一个页面 A,它在每个时间间隔执行一些任务。我只想仅当页面 A 处于活动状态并显示在屏幕上时才执行这些任务。

如果屏幕显示页面 B,则不会执行任务。

我应该如何解决这个问题?

flutter flutter-routes

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

Flutter Navigator 2.0 通过 Navigator() 路由

我目前正在尝试使用新的 Flutter web beta 构建一个 web 应用程序。问题是能够拥有历史记录,处理浏览器中的前进和后退按钮,并能够处理用户输入到需要新 Navigator 2.0 API 的 URL(至少从我的理解)。

目前只有少数可用资源,我正在尝试基于这些资源构建我的导航器。我使用的资源:

我设法让后退和前进按钮,以及历史工作。但是,我很难处理页面切换(在 Navigator() 中)。在 John 的示例中,他管理 Navigator 小部件的 'page:' 数组中的不同站点(在 routeDelegater 中)。这对我来说似乎很奇怪,但我像这样尝试过,但它并没有真正起作用(代码进一步向下)

在“页面:[]”中,我首先尝试让布尔值触发(如 show404),但这不是很干净,所以我的下一次尝试是按如下方式获取当前页面(在数组中):

if(_currentPage.name == 'pages[0]') pageBuilds[0]
Run Code Online (Sandbox Code Playgroud)

这有点奏效,因为我可以输入段 /matchit/0 并加载正确的页面,但是由于某种原因,“/”路由不再起作用,我收到了错误

Navigator.onGenerateRoute was null, but the route named "/" was referenced 
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用 'ongenerateRoute' 但这只是抛出了一堆错误。我有点新,所以也许我在那里做错了什么。但在我看来这不是正确的方法。这就是我目前陷入困境的地方。我不知道接下来该尝试什么,希望你们中的一些人可以帮助我。

我的 Route-Delegater 如下所示(我将在代码中包含我的注释,也许它可以帮助你们中的一些人,他们也希望了解 Navigator 2.0,了解正在发生的事情):

/**
 * The RouteDelegate defines application specific behavious of how the router
 * …
Run Code Online (Sandbox Code Playgroud)

navigator flutter flutter-navigation flutter-web flutter-routes

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

Flutter web无法访问url

在flutter web中,如何通过完整地址打开特定页面?

场景是:

  1. 打开教室页面路线,例如 await Navigator.pushNamed(context, "classroom/detail/$id", arguments: {"data": someData});
  2. 课堂页面打开,地址栏将包含如下 URLhttp://localhost/myschoolweb/classroom/detail/1
  3. 我按F5刷新页面 -> ERROR 404
  4. 打开新选项卡并访问上述地址 -> ERROR 404

这是我的onGenerateRoute代码:

onGenerateRoute: (RouteSettings settings) {
  List<String> routes = settings.name?.split("/") ?? [];
  final routeName = routes.isNotEmpty ? routes.first : null;
  final routeSub1 = routes.length > 1 ? routes[1] : null;
  final routeSub2 = routes.length > 2 ? routes[2] : null;

  final args = {
    ...(settings.arguments as Map<String, dynamic>? ?? {}),
    "sub1": routeSub1,
    "sub2": routeSub2,
  };

  Widget …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-web flutter-routes

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

Flutter 上从静态路由到动态路由的优势

我可以看到该MaterialApp应用程序可以接收路线。

1.静态路由

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: {
        '/page1': (context) => Page1(title: "Main page"),
...
Run Code Online (Sandbox Code Playgroud)

并从小部件显示它们,例如:

myKey.currentState.pushNamed("/page1");
Run Code Online (Sandbox Code Playgroud)

还有其他参数,例如onGenerateRouteinitialRoute使我更加困惑。

2. 动态页面

onPressed: () {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondRoute()),
  );
}
Run Code Online (Sandbox Code Playgroud)

我想知道这是什么参数的含义,让这个“责任”的MaterialApp,为什么我们应该这样做,或许真的与内存管理或如何在Widget生命周期内的作品,还是什么?

1. 和 2. 之间有什么区别?

flutter flutter-routes

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

使用 page_transition 更改 Navigator.pop() 动画持续时间

为了在改变屏幕时有动画,我正在使用page_transition: ^1.1.5

\n

这是一个例子:

\n
Navigator.push(context, PageTransition(type: PageTransitionType.rightToLeft, child: HandymanDocumentsOverview(), duration: Duration(milliseconds: 150)));\n
Run Code Online (Sandbox Code Playgroud)\n

昨天我安装firebase_core: ^0.5.0并更新了所有其他 Firebase 依赖项。不知何故,感觉动画速度Navigator.pop(context);比以前慢了很多,甚至与第一个动画速度不匹配。\n有人知道如何解决这个问题吗?

\n

这里编辑的是我的flutter doctor -v

\n
[\xe2\x9c\x93] Flutter (Channel stable, 1.22.0, on Mac OS X 10.15.4 19E287, locale de-DE)\n    \xe2\x80\xa2 Flutter version 1.22.0 at /Users/bastianmeyer/flutter\n    \xe2\x80\xa2 Framework revision d408d302e2 (3 days ago), 2020-09-29 11:49:17 -0700\n    \xe2\x80\xa2 Engine revision 5babba6c4d\n    \xe2\x80\xa2 Dart version 2.10.0\n\n \n[\xe2\x9c\x93] Android toolchain - develop for Android devices (Android SDK version 29.0.3)\n    \xe2\x80\xa2 Android …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-dependencies flutter-routes

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

当前小部件加载完成后如何执行方法?

我有一个带有 2 个小部件/页面的 flutter 应用程序,即:
- 加载小部件/页面(在应用程序启动时立即出现
- 主页小部件/页面

我想在加载页面完成加载后启动主页。基本上我的问题是 -我如何知道我的小部件何时完成加载?

以下是我的代码:

// My main.dart
import 'package:flutter/material.dart';
import 'package:routes/pages/home.dart';
import 'package:routes/pages/loading.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      routes: {
        '/': (context) => Loading(),
        '/home': (context) => Home(),
      },
    );
  }
}

class Loading extends StatefulWidget {
  @override …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-widget flutter-routes

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

Get.to(MyPage()) - 如何删除所有以前的路由 - Flutter GetX

我有一个简单的 Flutter 应用程序,我想删除所有以前的路由,但我想使用 GetX,该怎么做?

现在它与

Navigator.of(context).pushNamedAndRemoveUntil('/home', (Route<dynamic> route) => false);
Run Code Online (Sandbox Code Playgroud)

但我想知道正确的方法Get.to或类似的

dart flutter flutter-routes getx

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

Flutter GetX 将数据传递到另一个页面

我有一个 flutter 应用程序,可以使用屏幕中的文本表单字段捕获数据。我有第二个屏幕,我想在其中显示从第一个屏幕的文本表单字段捕获的数据。

但首先我想从第二个屏幕控制器将其打印到终端,并查看已传递的内容。我尝试使用 GetX naviagtion 并传递,但出现此错误

The method '[]' was called on null.
Receiver: null
Tried calling: [](0)
Run Code Online (Sandbox Code Playgroud)

这是我用来获取数据作为输入的文本表单字段

TextFormField(
                      controller: controller._phoneNumberController,
                      keyboardType: TextInputType.text,
                      validator: (value) => validatePhoneNumber(value!),
                      style: TextStyle(
                        color: accentColor,
                        fontSize: 15,
                        fontFamily: 'PoppinsRegular',
                      ),
                      decoration: InputDecoration(
                        hintText: "Phone Number",
                        hintStyle: TextStyle(
                            fontSize: 14,
                            color: Colors.black45,
                            fontWeight: FontWeight.w500),
                        fillColor: Color(0xffEBEDF4),
                        filled: true,
                        border: InputBorder.none,
                        focusedBorder: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(8.0),
                          borderSide: BorderSide(
                            color: Color(0xff1D275C),
                          ),
                        ),
                        enabledBorder: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(8.0),
                          borderSide: BorderSide(
                            color: formFieldColor,
                            width: 2.0,
                          ),
                        ),
                      ), …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-navigation flutter-routes flutter-getx

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

如何在flutter中使用bottomnavigationbar移动到新页面?

在颤动中使用底部导航栏中的三个图标时,我想移动到三个新页面(根据下面的代码)。我尝试了多种方法,但代码不起作用,也无法按照我的要求弄清楚。

在这种情况下,最重要的是使用现有代码并使用底部导航栏更改移动到新页面所需的更改。

如果有人知道如何使用底部导航栏(使用我现有的代码)导航到新页面,请告诉我。

先感谢您。

代码:

class dashboard extends StatefulWidget {
  @override
  _dashboardState createState() => _dashboardState();
}

// ignore: camel_case_types
class _dashboardState extends State<dashboard> {
  int currentIndex = 1;

  changeIndex(index) {
    setState(() {
      currentIndex = index;
    });
  }

  @override
  Widget build(BuildContext context) {
    final authService = Provider.of<AuthService>(context);
    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.only(top: 80.0, right: 250),
              child: Center(
                child: Container(
                  width: 200.0,
                  height: 20.0,
                  decoration:
                      BoxDecoration(borderRadius: BorderRadius.circular(15.0)),
                  child: (const Text(
                    'Hello',
                    textAlign: TextAlign.center,
                    style: TextStyle( …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-bottomnavigation flutter-routes

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