パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v3.0.0

no_context_navigation

BuildContext を使用せずに画面(ルート)間をナビゲートするように設計されたFlutterパッケージ。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
845
いいね数
20
Pub ポイント
150

パッケージをインストール

flutter pub add no_context_navigation

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

no_context_navigation パッケージは、BuildContext を必要とせずに Flutter 開発者が画面間をナビゲートできるようにします。これは、コンテキストが利用できない状況(たとえば非同期処理中やグローバルメソッドを使用している場合)において特に役立ちます。シンプルで静的なナビゲーション API を提供することで、アプリ全体でのルート管理を簡素化します。このパッケージは Android、iOS、Web、macOS、Windows、Linux といった主要プラットフォームすべてをサポートしており、クロスプラットフォームアプリに適しています。

用途

  • バックグラウンドタスクからのナビゲーション
  • グローバルエラーハンドラー
  • 非同期コールバック
  • ステート管理の統合
  • アプリの初期化フロー

主な機能

  • BuildContext が不要です
  • 静的ナビゲーションメソッド
  • クロスプラットフォーム対応
  • シンプルな API
  • あらゆる状態管理と互換性があります

適している対象

  • 開発者がコンテキスト依存を避ける
  • 複雑な状態論理を持つアプリ
  • グローバルナビゲーションユーティリティ
  • 大規模なFlutterプロジェクト
  • ウィジェット以外のコンテキストナビゲーション

注意事項

  • 適切な初期化が必要です
  • 適切に管理されていない場合、ルートガードをバイパスする可能性があります
  • ウィジェット固有のナビゲーションには適していません
  • 基本的なルート遷移に限定
  • ルーティング構成と併用するのが最適です

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

No Context Navigation

No Context Navigation Package - pub.dev

Instead of using Navigator.of(context).pushNamed or some other method like pop() or pushReplacementNamed() USING context. With this package you don't need to anymore.

This service use a GlobalKey of type NavigatorState which can be used across the entire applicaton.

Now, you only need to this:

navService.pushNamed('/detail_screen', args: 'From Home Screen');

But first, add the navigationKey to your MaterialApp's navigationKey property:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      //Over here
      navigatorKey: NavigationService.navigationKey,
      onGenerateRoute: (RouteSettings settings) {
        switch (settings.name) {
          case '/':
            return MaterialPageRoute(builder: (_) => HomeScreen());
          case '/detail_screen':
            return MaterialPageRoute(builder: (_) => DetailScreen(message: settings.arguments));
          default:
            return null;
        }
      },
    );
  }
}

Use navService object to be able to acess those methods:

import 'package:flutter/material.dart';

final NavigationService navService = NavigationService();

class NavigationService<T, U> {
  static GlobalKey<NavigatorState> navigationKey = GlobalKey<NavigatorState>();

  Future<T> pushNamed(String routeName, {Object args}) async =>
      navigationKey.currentState.pushNamed<T>(
        routeName,
        arguments: args,
      );

  Future<T> push(Route<T> route) async =>
      navigationKey.currentState.push<T>(route);

  Future<T> pushReplacementNamed(String routeName, {Object args}) async =>
      navigationKey.currentState.pushReplacementNamed<T, U>(
        routeName,
        arguments: args,
      );

  Future<T> pushNamedAndRemoveUntil(
    String routeName, {
    Object args,
    bool keepPreviousPages = false,
  }) async =>
      navigationKey.currentState.pushNamedAndRemoveUntil<T>(
        routeName,
        (Route<dynamic> route) => keepPreviousPages,
        arguments: args,
      );

  Future<T> pushAndRemoveUntil(
    Route<T> route, {
    bool keepPreviousPages = false,
  }) async =>
      navigationKey.currentState.pushAndRemoveUntil<T>(
        route,
        (Route<dynamic> route) => keepPreviousPages,
      );

  Future<bool> maybePop([Object args]) async =>
      navigationKey.currentState.maybePop<bool>(args);

  bool canPop() => navigationKey.currentState.canPop();

  void goBack({T result}) => navigationKey.currentState.pop<T>(result);
}

Hope you enjoy!

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。