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

パッケージ詳細v0.7.1

flutter_redux_navigation

Flutter の redux ライブラリ用のシンプルなリアクティブナビゲーションミドルウェア。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
443
いいね数
13
Pub ポイント
160

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

flutter pub add flutter_redux_navigation

パッケージ概要

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

Redux を使用して Flutter アプリでリアクティブなナビゲーションを可能にする軽量なミドルウェアです。ナビゲーション状態を Redux ストアと同期することで、アプリの状態変更に基づいてルートを宣言的かつリアクティブに管理できます。このパッケージはナビゲーションロジックを Redux フローに統合することで、ボイラープレートを減らし、テストのしやすさを向上させます。すべての主要プラットフォームをサポートしており、Flutter の Redux エコシステムとシームレスに連携します。

用途

  • 宣言的ルート管理
  • 状態に基づくリアクティブなナビゲーション
  • コンポーネント間の同期ナビゲーション
  • ナビゲーションロジックのテスト
  • 状態駆動型ルーティングの最適化

主な機能

  • Redux ストアとの統合
  • リアクティブなルート更新
  • 最小限のボイラープレート
  • クロスプラットフォーム対応
  • 簡単なテスト
  • 状態駆動型ナビゲーション

適している対象

  • Redux をベースとした Flutter アプリ
  • 状態に依存するナビゲーションを必要とするアプリ
  • 明確なナビゲーションパターンを探している開発者
  • リアクティブな状態管理を使用する Teams
  • 予測可能なナビゲーションフローを必要とするプロジェクト

注意事項

  • Redux の設定が必要です
  • Reduxアーキテクチャに限定
  • シンプルなアプリに複雑さを加える可能性がある
  • Redux以外のプロジェクトには適していません
  • ナビゲーションには慎重な状態設計が必要です

元の README

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

Build Status codecov

Flutter Navigation for redux

Navigation Middleware for Flutter's redux library.

Basic classes that enables page navigation through by utilizing Redux Store middleware facility.

This package is built to work with Redux.dart 4.0.0+.

Redux Middleware

  • NavigationMiddleware<T> - The Middleware that reacts to NavigateToActions.

Examples

Take a look in the examples directory.

How to setup navigation

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

class AppState {
  final String name;
  
  const AppState(this.name);
  
  factory AppState.initial() => AppState(null);
  factory AppState.changeName(String name) => AppState(name);
}

class AppNameChangedAction {
  final String name;

  AppNameChangedAction(this.name);
}

AppState _onAppNameChanged(AppState state, AppNameChangedAction action) =>
    state.changeName(action.name);

final appReducer = combineReducers<AppState>([
  TypedReducer<AppState, AppNameChangedAction>(_onAppNameChanged),
]);


final store = new Store<AppState>(combineReducers<AppState>([appReducer]),
    initialState: AppState.initial(),
    middleware: [
      NavigationMiddleware<AppState>(),
    ]);

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StoreProvider<AppState>(
        store: store,
        child: MaterialApp(
          title: 'My App',
          navigatorKey: NavigatorHolder.navigatorKey,
        )
    );
  }
}

void main() => runApp(MyApp());

How to navigate

Let's say you wish to navigate from a LoginPage to some dashboard page, you only need to dispatch a NavigateToAction.replace action with the appropriate path, which is registered to the dashboard page.

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

class LoginPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => LoginPageState();
}

class LoginPageState extends State<LoginPage> {
  @override
  Widget build(BuildContext context) {
    return StoreConnector<AppState, AuthBloc>(
      converter: (store) {
        return store;
      },
      builder: (BuildContext context, Store<AppState> store) {
        return Scaffold(body: Builder(
          builder: (BuildContext context) {
            return Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                RaisedButton(
                onPressed: () {
                  store.dispatch(NavigateToAction.replace('/dashboard'));
                },
                child: Text('Login'),
              )
              ],
            );
          },
        ));
      },
    );
  }
}

How to use pre and post navigation hooks

Let's use the same example as before, but now let's assume that you want to start a loader whilst navigating to the dashboard and stop it once you have navigated.

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

class LoginPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => LoginPageState();
}

class LoginPageState extends State<LoginPage> {
  @override
  Widget build(BuildContext context) {
    return StoreConnector<AppState, AuthBloc>(
      converter: (store) {
        return store;
      },
      builder: (BuildContext context, Store<AppState> store) {
        return Scaffold(body: Builder(
          builder: (BuildContext context) {
            return Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                RaisedButton(
                onPressed: () {
                  store.dispatch(
                    NavigateToAction.replace(
                      '/dashboard',
                      preNavigation: () => store.dispatch(StartLoadingAction()),
                      postNavigation: () => store.dispatch(StopLoadingAction()),
                    ),
                  );
                },
                child: Text('Login'),
              )
              ],
            );
          },
        ));
      },
    );
  }
}

カテゴリー

依存関係

依存関係一覧 1 件

ソースリポジトリ

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