simple_navigator 1.0.0-beta.4 copy "simple_navigator: ^1.0.0-beta.4" to clipboard
simple_navigator: ^1.0.0-beta.4 copied to clipboard

This package comes with a simpler alternative to use than the go_router. If your project requires more complex routing, use the go_router.

example/lib/main.dart

import 'package:example/feed_page.dart';
import 'package:example/home_page.dart';
import 'package:example/login_page.dart';
import 'package:example/main_page.dart';
import 'package:example/profile_page.dart';
import 'package:example/settings_page.dart';
import 'package:example/splash_page.dart';
import 'package:example/sub_page.dart';
import 'package:example/tabs_page.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:simple_navigator/simple_navigator.dart';

void main() {
  SN.setRoutes(
    urlStrategy: true,
    splash: (_) => SplashPage(),
    observers: [
      TestObs(),
    ],
    routes: [
      SimpleNavigatorTabRoute(
        path: "/",
        builder: (_, child) => HomePage(
          child: child,
        ),
        tabs: ["/main", "/settings", "/profile"],
        guard: (path) async {
          await Future.delayed(const Duration(milliseconds: 2000));
          return path;
        },
      ),
      SimpleNavigatorTabRoute(
        path: "/tabs",
        builder: (_, child) => TabsPage(
          child: child,
        ),
        tabs: ["/main", "/settings", "/profile"],
        guard: (path) async {
          await Future.delayed(const Duration(milliseconds: 20));
          return path;
        },
      ),
      SimpleNavigatorRoute(
        path: "/login",
        builder: (_) => const LoginPage(),
        guard: (path) async {
          await Future.delayed(const Duration(milliseconds: 2000));
          return path;
        },
      ),
      SimpleNavigatorRoute(
        path: "/feed",
        builder: (_) => const FeedPage(),
      ),
      SimpleNavigatorRoute(
        path: "/main",
        builder: (_) => const MainPage(),
      ),
      SimpleNavigatorRoute(
        path: "/settings",
        builder: (_) => const SettingsPage(),
      ),
      SimpleNavigatorRoute(
        path: "/profile",
        builder: (_) => const ProfilePage(),
        guard: (path) async {
          await Future.delayed(const Duration(milliseconds: 50));
          return path;
        },
        guardLoadingBuilder: (context) => const Center(
          child: CircularProgressIndicator(),
        ),
      ),
      SimpleNavigatorRoute(
        path: "/sub/:number",
        builder: (_) => const SubPage(),
        guard: (path) async {
          await Future.delayed(const Duration(milliseconds: 50));
          return path;
        },
      )
    ],
  );
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      theme: Theme.of(context).copyWith(
        scaffoldBackgroundColor: Colors.amber,
      ),
      routerDelegate: SN.delegate,
      routeInformationParser: SN.parser,
    );
  }
}

class TestObs extends NavigatorObserver {
  @override
  void didPush(Route route, Route? previousRoute) {
    if (kDebugMode) {
      print("didPush ${route.settings.name}");
    }
    super.didPush(route, previousRoute);
  }

  @override
  void didPop(Route route, Route? previousRoute) {
    if (kDebugMode) {
      print("didPop ${route.settings.name}");
    }
    super.didPush(route, previousRoute);
  }
}
0
likes
140
pub points
0%
popularity

Publisher

unverified uploader

This package comes with a simpler alternative to use than the go_router. If your project requires more complex routing, use the go_router.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

collection, flutter, flutter_web_plugins, path_to_regexp, queue, uuid

More

Packages that depend on simple_navigator