搜尋套件、儲存庫與 APP 分類

套件詳情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 項

原始碼儲存庫

使用此套件的專案