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

redux_remote_devtools のカバー
パッケージ詳細v3.0.0

redux_remote_devtools

Redux.dart用のリモートDevTools。このパッケージはDart ReduxストアをリモートDevToolsサーバーに接続し、実行時におけるReduxストアの変更を検査できるようにします。

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

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

flutter pub add redux_remote_devtools

パッケージ概要

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

Flutter/Dartパッケージで、リモートDevToolsサーバーに接続してReduxストアのリモートデバッグを可能にします。開発者は複数のプラットフォーム上でリアルタイムでステートの変更、アクション、ミドルウェアの振る舞いを確認できます。開発中の複雑な状態管理フローのデバッグに最適であり、Redux.dartとの完全統合をサポートし、Android、iOS、Web、macOS、Windows、Linuxでスムーズな体験を提供します。このツールはアプリケーションの状態の進化に関するリアルタイムのインサイトを提供することで、開発者の生産性を向上させます。

用途

  • リアルタイム状態の検査
  • 複雑な Redux ロジックのデバッグ
  • クロスプラットフォームデバッグ
  • ライブアクショントラッキング
  • 開発ワークフローの向上

主な機能

  • リモート DevTools サーバーに接続します
  • リアルタイム状態監視
  • すべての主要プラットフォームをサポートしています
  • Redux.dart との統合
  • アクションおよびステート履歴のトラッキング

適している対象

  • Redux.dart 開発者
  • 状態管理を使用するフロントエンドチーム
  • プロダクションに類似したシナリオのデバッグ
  • 状態論理に関するチームの協働
  • 詳細な実行時インサイトが必要な開発者

注意事項

  • リモート DevTools サーバーのセットアップが必要です
  • 本番環境での使用を想定していません
  • デバッグ中にパフォーマンスに影響を与える可能性があります
  • リモート接続のためにネットワークアクセスが必要です
  • Redux.dart エコシステムに限定

元の README

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

Redux Remote Devtools for Dart and Flutter

Build Status Coverage Status

Redux Remote Devtools support for Dart and Flutter.

Devtools Demo

Installation

Add the library to pubspec.yaml:

dependencies:
  redux_remote_devtools: ^2.0.0

Middleware configuration

Add the middleware to your Redux configuration:

  var remoteDevtools = RemoteDevToolsMiddleware('192.168.1.52:8000');
  final store = new DevToolsStore<AppState>(searchReducer,
      middleware: [
        remoteDevtools,
      ]);
  remoteDevtools.store = store;
  await remoteDevtools.connect();

:warning: Using mutliple middleware?

If you use other middleware, RemoteDevTools must be put last. Otherwise, actions and state updates will be out of sync

What's going on here?
  1. Create a new instance of the devtools middleware. Specify the host and port to connect to.

  2. Wait for devtools to connect to the remotedev server

  3. Initialise your store. To take advantage of time travel, you should use a DevToolsStore. Pass in remoteDevTools with the rest of your middlware

  4. The middleware needs a reference to the store you just created, so commands from devtools can be dispatched. So as a final step, set the reference.

Using remotedev

Use the Javascript Remote Devtools package. Start the remotedev server on your machine

npm install -g remotedev-server
remotedev --port 8000

Run your application. It will connect to the remotedev server. You can now debug your redux application by opening up http://localhost:8000 in a web browser.

Encoding Actions and State

In the Javascript world, Redux follows a convention that your redux state is a plain Javascript Object, and actions are also Javascript objects that have a type property. The JS Redux Devtools expect this. However, Redux.dart tries to take advantage of the strong typing available in Dart. To make Redux.dart work with the JS devtools, we need to convert actions and state instances to JSON before sending.

Remember that the primary reason for using devtools is to allow the developer to reason about what the app is doing. Therefore, exact conversion is not strictly necessary - it's more important for what appears in devtools to be meaningful to the developer.

Enconding Strategy for Actions

We use the class name as the action type for class based actions. For enum typed actions, we use the value of the action. For example:

enum EnumActions {
  Action1;
  Action2;
}

class ClassAction {}

When converted, these actions will be {"type": "Action1"} or {"type": "ClassAction"}, etc.

We also want to send the action properties over to devtools. To do this, we attempt to jsonEncode the entire Action, and attach this JSON data as a payload property. For example:

class ClassAction {
  int someValue;

  toJson() {
    return {'someValue': this.someValue};
  }
}

Would appear in devtools as:

{
  "type": "ClassAction",
  "payload": {
    "someValue": 5 // or whatever someValue was set to
  },
}

This of course means your Actions need to be json encodable. You can do what the example above does and write your own toJson method. However, a better approach is to use a generator like json_serializable to do it for you. If your action is not json encodable, the payload property will be missing in devtools.

Encoding strategy for State

For state, we simply attempt to jsonEncode the entire thing. If your state cannot be converted, then state updates will not appear in devtools.

Overriding these strategies

The strategy described above should work for most cases. However, if you want to do something different, you can replace the ActionEncoder and StateEncoder with your own implementations:

  var remoteDevtools = RemoteDevToolsMiddleware('192.168.1.52:8000', actionEncoder: MyCoolActionEncoder);

Making your actions and state json encodable

You can either write your own toJson methods for each of your actions and your state class. However, this quickly becomes cumbersome and error prone. Instead, the recommended way is to make use of the json_annotation package to automatically generate toJson functions for you.

Dispatching Actions from DevTools

You are able to dispatch actions from the Devtools UI and have these processed by the redux implementation in your Flutter app.

In order for this to work, you need to implement an ActionDecoder. ActionDecoder's job is to take the JSON data received from the Devtools UI, and return an action that your reducers know how to use. For example if we dispatch an action:

{
  "type": "INCREMENT"
}

We would implement an ActionDecoder like so:

ActionDecoder myDecoder = (dynamic payload) {
  final map = payload as Map<String, dynamic>;
  if (map['type'] == 'INCREMENT') {
    return IncrementAction();
  }
};

Essentially, you need to map every JSON action type into an action that can be used by your reducers.

Please get in touch if you have any awesome ideas for how to make this process smoother.

Example Apps

This repo includes remote-devtools enabled versions of the flutter-redux example apps:

  • flutter-redux Github Search App.

    • Demonstrates how class based actions and nested state objects are serialised and made browseable in devtools

    • Demonstrates the limits of time travel in apps that use epics

カテゴリー

依存関係

依存関係一覧 3 件

ソースリポジトリ

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

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