jonataslaw
Committed by GitHub

Add files via upload

  1 +## [1.0.0]
  2 +
  3 +- initial release
  4 +
  5 +## [1.0.1]
  6 +
  7 +- Doc changes
  8 +
  9 +## [1.0.2]
  10 +
  11 +- Add examples
  12 +
  13 +## [1.0.3]
  14 +
  15 +- Improve Performance
  16 +
  17 +## [1.1.0]
  18 +
  19 +- Add support to Push.named
1 MIT License 1 MIT License
2 2
3 -Copyright (c) 2019 jonataslaw 3 +Copyright (c) 2019 Jonny Borges
4 4
5 Permission is hereby granted, free of charge, to any person obtaining a copy 5 Permission is hereby granted, free of charge, to any person obtaining a copy
6 of this software and associated documentation files (the "Software"), to deal 6 of this software and associated documentation files (the "Software"), to deal
1 -# get 1 +# Get
  2 +
2 A consistent Flutter route navigation library that does not rebuild materialApp with each navigation. 3 A consistent Flutter route navigation library that does not rebuild materialApp with each navigation.
  4 +
  5 +## Getting Started
  6 +
  7 +Flutter's conventional navigation method has a route reconstruction bug that makes it inconsistent
  8 +for large applications with undefined routes.
  9 +Get came to solve this problem.
  10 +
  11 +Plus, get makes navigation much clearer and more concise for beginners. The nomenclatures u
  12 +sed by Flutter routes often confuse those who start with the framework.
  13 +Get is friendly to those who came from Web programming, and those who never programmed,
  14 +with a clearer navigation system.
  15 +
  16 +## How to use?
  17 +
  18 +To navigate to a new screen:
  19 +
  20 +```dart
  21 +Get.to(context, NextScreen());
  22 +```
  23 +
  24 +To return to previous screen
  25 +
  26 +```dart
  27 +Get.back(context);
  28 +```
  29 +
  30 +To go to the next screen and no option to go back to the previous screen (for use in SplashScreens, login screens and etc.)
  31 +
  32 +```dart
  33 +Get.off(context, NextScreen());
  34 +```
  35 +
  36 +To go to the next screen and cancel all previous routes (useful in shopping carts, polls, and tests)
  37 +
  38 +```dart
  39 +Get.offAll(context, NextScreen());
  40 +```
  41 +
  42 +Is possible used default namedRoutes from flutter?
  43 +Yes, and with no navigation bug
  44 +Example:
  45 +
  46 +```dart
  47 +void main() {
  48 + runApp(MaterialApp(
  49 + onGenerateRoute: Router.generateRoute,
  50 + initialRoute: "/",
  51 + title: 'Navigation',
  52 + ));
  53 +}
  54 +
  55 +class Router {
  56 + static Route<dynamic> generateRoute(RouteSettings settings) {
  57 + switch (settings.name) {
  58 + case '/':
  59 + return GetRoute(builder: (_) => FirstRoute());
  60 + case '/second':
  61 + return GetRoute(builder: (_) => SecondRoute());
  62 + default:
  63 + return GetRoute(
  64 + builder: (_) => Scaffold(
  65 + body: Center(
  66 + child: Text('No route defined for ${settings.name}')),
  67 + ));
  68 + }
  69 + }
  70 +}
  71 +
  72 +class FirstRoute extends StatelessWidget {
  73 + @override
  74 + Widget build(BuildContext context) {
  75 + return Scaffold(
  76 + appBar: AppBar(
  77 + title: Text('First Route'),
  78 + ),
  79 + body: Center(
  80 + child: RaisedButton(
  81 + child: Text('Open route'),
  82 + onPressed: () {
  83 + Navigator.pushNamed(context, "/second");
  84 + },
  85 + ),
  86 + ),
  87 + );
  88 + }
  89 +}
  90 +
  91 +class SecondRoute extends StatelessWidget {
  92 + @override
  93 + Widget build(BuildContext context) {
  94 + return Scaffold(
  95 + appBar: AppBar(
  96 + title: Text("Second Route"),
  97 + ),
  98 + body: Center(
  99 + child: RaisedButton(
  100 + onPressed: () {
  101 + Get.back(context);
  102 + },
  103 + child: Text('Go back!'),
  104 + ),
  105 + ),
  106 + );
  107 + }
  108 +}
  109 +```
  1 +import 'package:flutter/material.dart';
  2 +import 'package:get/get.dart';
  3 +
  4 +void main() {
  5 + runApp(MaterialApp(
  6 + title: 'Navigation Basics',
  7 + home: FirstRoute(),
  8 + ));
  9 +}
  10 +
  11 +class FirstRoute extends StatelessWidget {
  12 + @override
  13 + Widget build(BuildContext context) {
  14 + return Scaffold(
  15 + appBar: AppBar(
  16 + title: Text('First Route'),
  17 + ),
  18 + body: Center(
  19 + child: RaisedButton(
  20 + child: Text('Open route'),
  21 + onPressed: () {
  22 + Get.to(context, SecondRoute());
  23 + },
  24 + ),
  25 + ),
  26 + );
  27 + }
  28 +}
  29 +
  30 +class SecondRoute extends StatelessWidget {
  31 + @override
  32 + Widget build(BuildContext context) {
  33 + return Scaffold(
  34 + appBar: AppBar(
  35 + title: Text("Second Route"),
  36 + ),
  37 + body: Center(
  38 + child: RaisedButton(
  39 + onPressed: () {
  40 + Get.back(context);
  41 + },
  42 + child: Text('Go back!'),
  43 + ),
  44 + ),
  45 + );
  46 + }
  47 +}
  1 +# Generated by pub
  2 +# See https://dart.dev/tools/pub/glossary#lockfile
  3 +packages:
  4 + archive:
  5 + dependency: transitive
  6 + description:
  7 + name: archive
  8 + url: "https://pub.dartlang.org"
  9 + source: hosted
  10 + version: "2.0.10"
  11 + args:
  12 + dependency: transitive
  13 + description:
  14 + name: args
  15 + url: "https://pub.dartlang.org"
  16 + source: hosted
  17 + version: "1.5.2"
  18 + async:
  19 + dependency: transitive
  20 + description:
  21 + name: async
  22 + url: "https://pub.dartlang.org"
  23 + source: hosted
  24 + version: "2.3.0"
  25 + boolean_selector:
  26 + dependency: transitive
  27 + description:
  28 + name: boolean_selector
  29 + url: "https://pub.dartlang.org"
  30 + source: hosted
  31 + version: "1.0.5"
  32 + charcode:
  33 + dependency: transitive
  34 + description:
  35 + name: charcode
  36 + url: "https://pub.dartlang.org"
  37 + source: hosted
  38 + version: "1.1.2"
  39 + collection:
  40 + dependency: transitive
  41 + description:
  42 + name: collection
  43 + url: "https://pub.dartlang.org"
  44 + source: hosted
  45 + version: "1.14.11"
  46 + convert:
  47 + dependency: transitive
  48 + description:
  49 + name: convert
  50 + url: "https://pub.dartlang.org"
  51 + source: hosted
  52 + version: "2.1.1"
  53 + crypto:
  54 + dependency: transitive
  55 + description:
  56 + name: crypto
  57 + url: "https://pub.dartlang.org"
  58 + source: hosted
  59 + version: "2.1.3"
  60 + cupertino_icons:
  61 + dependency: "direct main"
  62 + description:
  63 + name: cupertino_icons
  64 + url: "https://pub.dartlang.org"
  65 + source: hosted
  66 + version: "0.1.2"
  67 + flutter:
  68 + dependency: "direct main"
  69 + description: flutter
  70 + source: sdk
  71 + version: "0.0.0"
  72 + flutter_test:
  73 + dependency: "direct dev"
  74 + description: flutter
  75 + source: sdk
  76 + version: "0.0.0"
  77 + get:
  78 + dependency: "direct main"
  79 + description:
  80 + name: get
  81 + url: "https://pub.dartlang.org"
  82 + source: hosted
  83 + version: "1.0.2"
  84 + image:
  85 + dependency: transitive
  86 + description:
  87 + name: image
  88 + url: "https://pub.dartlang.org"
  89 + source: hosted
  90 + version: "2.1.4"
  91 + matcher:
  92 + dependency: transitive
  93 + description:
  94 + name: matcher
  95 + url: "https://pub.dartlang.org"
  96 + source: hosted
  97 + version: "0.12.5"
  98 + meta:
  99 + dependency: transitive
  100 + description:
  101 + name: meta
  102 + url: "https://pub.dartlang.org"
  103 + source: hosted
  104 + version: "1.1.7"
  105 + path:
  106 + dependency: transitive
  107 + description:
  108 + name: path
  109 + url: "https://pub.dartlang.org"
  110 + source: hosted
  111 + version: "1.6.4"
  112 + pedantic:
  113 + dependency: transitive
  114 + description:
  115 + name: pedantic
  116 + url: "https://pub.dartlang.org"
  117 + source: hosted
  118 + version: "1.8.0+1"
  119 + petitparser:
  120 + dependency: transitive
  121 + description:
  122 + name: petitparser
  123 + url: "https://pub.dartlang.org"
  124 + source: hosted
  125 + version: "2.4.0"
  126 + quiver:
  127 + dependency: transitive
  128 + description:
  129 + name: quiver
  130 + url: "https://pub.dartlang.org"
  131 + source: hosted
  132 + version: "2.0.5"
  133 + sky_engine:
  134 + dependency: transitive
  135 + description: flutter
  136 + source: sdk
  137 + version: "0.0.99"
  138 + source_span:
  139 + dependency: transitive
  140 + description:
  141 + name: source_span
  142 + url: "https://pub.dartlang.org"
  143 + source: hosted
  144 + version: "1.5.5"
  145 + stack_trace:
  146 + dependency: transitive
  147 + description:
  148 + name: stack_trace
  149 + url: "https://pub.dartlang.org"
  150 + source: hosted
  151 + version: "1.9.3"
  152 + stream_channel:
  153 + dependency: transitive
  154 + description:
  155 + name: stream_channel
  156 + url: "https://pub.dartlang.org"
  157 + source: hosted
  158 + version: "2.0.0"
  159 + string_scanner:
  160 + dependency: transitive
  161 + description:
  162 + name: string_scanner
  163 + url: "https://pub.dartlang.org"
  164 + source: hosted
  165 + version: "1.0.5"
  166 + term_glyph:
  167 + dependency: transitive
  168 + description:
  169 + name: term_glyph
  170 + url: "https://pub.dartlang.org"
  171 + source: hosted
  172 + version: "1.1.0"
  173 + test_api:
  174 + dependency: transitive
  175 + description:
  176 + name: test_api
  177 + url: "https://pub.dartlang.org"
  178 + source: hosted
  179 + version: "0.2.5"
  180 + typed_data:
  181 + dependency: transitive
  182 + description:
  183 + name: typed_data
  184 + url: "https://pub.dartlang.org"
  185 + source: hosted
  186 + version: "1.1.6"
  187 + vector_math:
  188 + dependency: transitive
  189 + description:
  190 + name: vector_math
  191 + url: "https://pub.dartlang.org"
  192 + source: hosted
  193 + version: "2.0.8"
  194 + xml:
  195 + dependency: transitive
  196 + description:
  197 + name: xml
  198 + url: "https://pub.dartlang.org"
  199 + source: hosted
  200 + version: "3.5.0"
  201 +sdks:
  202 + dart: ">=2.4.0 <3.0.0"
  1 +name: profileweb
  2 +description: A new Flutter project.
  3 +
  4 +# The following defines the version and build number for your application.
  5 +# A version number is three numbers separated by dots, like 1.2.43
  6 +# followed by an optional build number separated by a +.
  7 +# Both the version and the builder number may be overridden in flutter
  8 +# build by specifying --build-name and --build-number, respectively.
  9 +# In Android, build-name is used as versionName while build-number used as versionCode.
  10 +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
  11 +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
  12 +# Read more about iOS versioning at
  13 +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
  14 +version: 1.0.0+1
  15 +
  16 +environment:
  17 + sdk: ">=2.1.0 <3.0.0"
  18 +
  19 +dependencies:
  20 + flutter:
  21 + sdk: flutter
  22 +
  23 + # The following adds the Cupertino Icons font to your application.
  24 + # Use with the CupertinoIcons class for iOS style icons.
  25 + cupertino_icons: ^0.1.2
  26 + get:
  27 +
  28 +dev_dependencies:
  29 + flutter_test:
  30 + sdk: flutter
  31 +
  32 +
  33 +# For information on the generic Dart part of this file, see the
  34 +# following page: https://dart.dev/tools/pub/pubspec
  35 +
  36 +# The following section is specific to Flutter.
  37 +flutter:
  38 +
  39 + # The following line ensures that the Material Icons font is
  40 + # included with your application, so that you can use the icons in
  41 + # the material Icons class.
  42 + uses-material-design: true
  43 +
  44 + # To add assets to your application, add an assets section, like this:
  45 + # assets:
  46 + # - images/a_dot_burr.jpeg
  47 + # - images/a_dot_ham.jpeg
  48 +
  49 + # An image asset can refer to one or more resolution-specific "variants", see
  50 + # https://flutter.dev/assets-and-images/#resolution-aware.
  51 +
  52 + # For details regarding adding assets from package dependencies, see
  53 + # https://flutter.dev/assets-and-images/#from-packages
  54 +
  55 + # To add custom fonts to your application, add a fonts section here,
  56 + # in this "flutter" section. Each entry in this list should have a
  57 + # "family" key with the font family name, and a "fonts" key with a
  58 + # list giving the asset and other descriptors for the font. For
  59 + # example:
  60 + # fonts:
  61 + # - family: Schyler
  62 + # fonts:
  63 + # - asset: fonts/Schyler-Regular.ttf
  64 + # - asset: fonts/Schyler-Italic.ttf
  65 + # style: italic
  66 + # - family: Trajan Pro
  67 + # fonts:
  68 + # - asset: fonts/TrajanPro.ttf
  69 + # - asset: fonts/TrajanPro_Bold.ttf
  70 + # weight: 700
  71 + #
  72 + # For details regarding fonts from package dependencies,
  73 + # see https://flutter.dev/custom-fonts/#from-packages
  1 +library get;
  2 +
  3 +export 'src/material.dart';
  4 +export 'src/routes.dart';
  5 +
  1 +import 'package:flutter/cupertino.dart';
  2 +import 'package:flutter/material.dart';
  3 +
  4 +/// A modal route that replaces the entire screen with a platform-adaptive
  5 +/// transition.
  6 +///
  7 +/// For Android, the entrance transition for the page slides the page upwards
  8 +/// and fades it in. The exit transition is the same, but in reverse.
  9 +///
  10 +/// The transition is adaptive to the platform and on iOS, the page slides in
  11 +/// from the right and exits in reverse. The page also shifts to the left in
  12 +/// parallax when another page enters to cover it. (These directions are flipped
  13 +/// in environments with a right-to-left reading direction.)
  14 +///
  15 +/// By default, when a modal route is replaced by another, the previous route
  16 +/// remains in memory. To free all the resources when this is not necessary, set
  17 +/// [maintainState] to false.
  18 +///
  19 +/// The `fullscreenDialog` property specifies whether the incoming page is a
  20 +/// fullscreen modal dialog. On iOS, those pages animate from the bottom to the
  21 +/// top rather than horizontally.
  22 +///
  23 +/// The type `T` specifies the return type of the route which can be supplied as
  24 +/// the route is popped from the stack via [Navigator.pop] by providing the
  25 +/// optional `result` argument.
  26 +///
  27 +/// See also:
  28 +///
  29 +/// * [PageTransitionsTheme], which defines the default page transitions used
  30 +/// by [MaterialPageRoute.buildTransitions].
  31 +class GetRoute<T> extends PageRoute<T> {
  32 + /// Construct a MaterialPageRoute whose contents are defined by [builder].
  33 + ///
  34 + /// The values of [builder], [maintainState], and [fullScreenDialog] must not
  35 + /// be null.
  36 + GetRoute({
  37 + @required this.builder,
  38 + RouteSettings settings,
  39 + this.opaque = true,
  40 + this.maintainState = true,
  41 + bool fullscreenDialog = false,
  42 + }) : assert(builder != null),
  43 + assert(maintainState != null),
  44 + assert(fullscreenDialog != null),
  45 + assert(opaque != null),
  46 + super(settings: settings, fullscreenDialog: fullscreenDialog);
  47 +
  48 + /// Builds the primary contents of the route.
  49 + final WidgetBuilder builder;
  50 +
  51 + @override
  52 + final bool maintainState;
  53 +
  54 + /// Allows you to set opaque to false to prevent route reconstruction.
  55 + @override
  56 + final bool opaque;
  57 +
  58 + @override
  59 + Duration get transitionDuration => const Duration(milliseconds: 300);
  60 +
  61 + @override
  62 + Color get barrierColor => null;
  63 +
  64 + @override
  65 + String get barrierLabel => null;
  66 +
  67 + @override
  68 + bool canTransitionFrom(TransitionRoute<dynamic> previousRoute) {
  69 + return previousRoute is GetRoute || previousRoute is CupertinoPageRoute;
  70 + }
  71 +
  72 + @override
  73 + bool canTransitionTo(TransitionRoute<dynamic> nextRoute) {
  74 + // Don't perform outgoing animation if the next route is a fullscreen dialog.
  75 + return (nextRoute is GetRoute && !nextRoute.fullscreenDialog)
  76 + || (nextRoute is CupertinoPageRoute && !nextRoute.fullscreenDialog);
  77 + }
  78 +
  79 + @override
  80 + Widget buildPage(
  81 + BuildContext context,
  82 + Animation<double> animation,
  83 + Animation<double> secondaryAnimation,
  84 + ) {
  85 + final Widget result = builder(context);
  86 + assert(() {
  87 + if (result == null) {
  88 + throw FlutterError.fromParts(<DiagnosticsNode>[
  89 + ErrorSummary('The builder for route "${settings.name}" returned null.'),
  90 + ErrorDescription('Route builders must never return null.')
  91 + ]);
  92 + }
  93 + return true;
  94 + }());
  95 + return Semantics(
  96 + scopesRoute: true,
  97 + explicitChildNodes: true,
  98 + child: result,
  99 + );
  100 + }
  101 +
  102 + @override
  103 + Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
  104 + final PageTransitionsTheme theme = Theme.of(context).pageTransitionsTheme;
  105 + return theme.buildTransitions<T>(this, context, animation, secondaryAnimation, child);
  106 + }
  107 +
  108 + @override
  109 + String get debugLabel => '${super.debugLabel}(${settings.name})';
  110 +}
  1 +import 'package:flutter/widgets.dart';
  2 +import 'material.dart';
  3 +
  4 +class Get {
  5 + static to(BuildContext context, Widget page, {bool rebuildRoutes = false}) {
  6 + return Navigator.push(
  7 + context,
  8 + GetRoute(
  9 + opaque: rebuildRoutes, builder: (BuildContext context) => page));
  10 + }
  11 +
  12 + static back(BuildContext context) {
  13 + return Navigator.pop(context);
  14 + }
  15 +
  16 + static off(BuildContext context, Widget page, {bool rebuildRoutes = false}) {
  17 + return Navigator.pushReplacement(
  18 + context,
  19 + GetRoute(
  20 + opaque: rebuildRoutes, builder: (BuildContext context) => page));
  21 + }
  22 +
  23 + static offAll(BuildContext context, Widget page, RoutePredicate predicate,
  24 + {bool rebuildRoutes = false}) {
  25 + return Navigator.pushAndRemoveUntil(
  26 + context,
  27 + GetRoute(
  28 + opaque: rebuildRoutes, builder: (BuildContext context) => page),
  29 + predicate);
  30 + }
  31 +}
  1 +name: get
  2 +description: A consistent Flutter route navigation library that does not rebuild materialApp with each navigation..
  3 +version: 1.1.0
  4 +author: Jonny Borges <jonataborges01@gmail.com>
  5 +homepage: https://github.com/jonataslaw/get
  6 +
  7 +environment:
  8 + sdk: ">=2.1.0 <3.0.0"
  9 +
  10 +dependencies:
  11 + flutter:
  12 + sdk: flutter
  13 +
  14 +dev_dependencies:
  15 + flutter_test:
  16 + sdk: flutter
  17 +
  18 +# For information on the generic Dart part of this file, see the
  19 +# following page: https://dart.dev/tools/pub/pubspec
  20 +
  21 +# The following section is specific to Flutter.
  22 +flutter:
  23 +
  24 + # To add assets to your package, add an assets section, like this:
  25 + # assets:
  26 + # - images/a_dot_burr.jpeg
  27 + # - images/a_dot_ham.jpeg
  28 + #
  29 + # For details regarding assets in packages, see
  30 + # https://flutter.dev/assets-and-images/#from-packages
  31 + #
  32 + # An image asset can refer to one or more resolution-specific "variants", see
  33 + # https://flutter.dev/assets-and-images/#resolution-aware.
  34 +
  35 + # To add custom fonts to your package, add a fonts section here,
  36 + # in this "flutter" section. Each entry in this list should have a
  37 + # "family" key with the font family name, and a "fonts" key with a
  38 + # list giving the asset and other descriptors for the font. For
  39 + # example:
  40 + # fonts:
  41 + # - family: Schyler
  42 + # fonts:
  43 + # - asset: fonts/Schyler-Regular.ttf
  44 + # - asset: fonts/Schyler-Italic.ttf
  45 + # style: italic
  46 + # - family: Trajan Pro
  47 + # fonts:
  48 + # - asset: fonts/TrajanPro.ttf
  49 + # - asset: fonts/TrajanPro_Bold.ttf
  50 + # weight: 700
  51 + #
  52 + # For details regarding fonts in packages, see
  53 + # https://flutter.dev/custom-fonts/#from-packages