centralstation 0.0.1

  • Readme
  • Changelog
  • Example
  • Installing
  • 45

Central Station #

pub package

Central Station is a simple Command / Event Processing engine for Flutter.

Introduction #

What is a Command? #

  • A Command is some sequence of program steps to run that will make state changes.
  • A Command is something we want to happen
  • A Command executed may produce a result
  • Example: "Make a network request to get a stock quote for code X."

What is an Event? #

  • An Event represents something that has happened.
  • An Event is an evidence of some state change.
  • Example: "A stock quote of code X is obtained with stock price Y."

Characteristics #

  • A command generally needs more time to execute
  • A command may raise some events which should be notified to other components to display or to keep track of
  • A command may fail during execution
  • A single command would have a single processor to process that command
  • A single event can be listened by multiple components

Getting Started #

Suppose we have a get stock quote command and corresponding event:

class GetStockQuoteCommand {
  final String code;
  GetStockQuoteCommand(this.code);
}

class StockQuoteObtainedEvent {
  final String code;
  final num price;
  StockQuoteObtainedEvent(this.code, this.price);
}

/// Implementation
Stream getStockQuote(dynamic command) async* {
  var cmd = command as GetStockQuoteCommand;
  num price = await ... // do some network operations;

  dispatchEvent(StockQuoteObtainedEvent(cmd.code, price)); // notify others

  yield price; // command result
}

To use Central Station, first initialze the runtime.

  final CentralStationRuntime runtime = CentralStationRuntime(
    commandHandlers: {
      GetStockQuoteCommand: getStockQuote,
    },
    eventHandlers: [],  // set this if you have event handlers
  );

Initialize CentralStation during widget construction.

  Widget build(BuildContext context) {
    return MaterialApp(
      home: CentralStation(
        runtime: runtime,
        child: ... /// build your own widget as usual
        ),
      ),
    );
  }

To execute a command at some point, do as follows:

    RaisedButton(
        key: btnKey,
        child: Text("Get Quote!"),
        onPressed: () async {
            var stockPrice = await CentralStation.sendCommand(context, GetStockQuoteCommand(this.code)).first;
            setState(() {
                // UI changes
                this.price = stockPrice;
            });
        },
    ),

There are some other interesting features like chaining commands, showing waiting text, etc.

In one production project, I have used Central Station with BLOC pattern (using event handlers to bridge events to BLOC dispatch method) which make the project quite easy to manage.

Feel free to explore other possibilities and I would be glad to hear any feedbacks.

Further Reading #

[0.0.1] - TODO: Add release date.

  • TODO: Describe initial release.

example/README.md

example #

A new Flutter project.

Getting Started #

This project is a starting point for a Flutter application.

A few resources to get you started if this is your first Flutter project:

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  centralstation: ^0.0.1

2. Install it

You can install packages from the command line:

with Flutter:


$ flutter pub get

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:centralstation/centralstation.dart';
  
Popularity:
Describes how popular the package is relative to other packages. [more]
0
Health:
Code health derived from static analysis. [more]
100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
76
Overall:
Weighted score of the above. [more]
45
Learn more about scoring.

We analyzed this package on Nov 15, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.6.0
  • pana: 0.12.21
  • Flutter: 1.9.1+hotfix.6

Platforms

Detected platforms: Flutter

References Flutter, and has no conflicting libraries.

Maintenance suggestions

The package description is too short. (-14 points)

Add more detail to the description field of pubspec.yaml. Use 60 to 180 characters to describe the package, what it does, and its target use case.

Package is pre-v0.1 release. (-10 points)

While nothing is inherently wrong with versions of 0.0.*, it might mean that the author is still experimenting with the general direction of the API.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.1.0 <3.0.0
event_bus ^1.1.0 1.1.0
flutter 0.0.0
Transitive dependencies
collection 1.14.11 1.14.12
meta 1.1.7 1.1.8
sky_engine 0.0.99
typed_data 1.1.6
vector_math 2.0.8
Dev dependencies
flutter_test