over_react 2.4.2+dart2

  • README.md
  • CHANGELOG.md
  • Installing
  • Versions
  • 66

OverReact #

Pub Documentation [![Join the chat at https://gitter.im/over_react/Lobby](https://badges.gitter.im/over_react/Lobby.svg)](https://gitter.im/over_react/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

Build Status Test Coverage

A library for building statically-typed React UI components using Dart.


Dart 2 Migration Guide

If you have existing over_react code written on Dart 1 and want to upgrade to Dart 2, please read the Dart 2 Migration Guide


Using it in your project #

If you are not familiar with React JS

Since OverReact is built atop React JS, we strongly encourage you to gain familiarity with it by reading this React JS tutorial first.

  1. Add the over_react package as a dependency in your pubspec.yaml.

     dependencies:
       over_react: ^2.0.0
    
  2. Include the native JavaScript react and react_dom libraries in your app’s index.html file, and add an HTML element with a unique identifier where you’ll mount your OverReact UI component(s).

     <html>
       <head>
        <!-- ... -->
       </head>
       <body>
         <div id="react_mount_point">
           // OverReact component render() output will show up here.
         </div>
    
         <script src="packages/react/react.js"></script>
         <script src="packages/react/react_dom.js"></script>
    
         <script type="application/javascript" defer src="your_app_entrypoint.dart.js"></script>
       </body>
     </html>
    

    Note: When serving your application in production, use packages/react/react_with_react_dom_prod.js file instead of the un-minified react.js / react_dom.js files shown in the example above.

  3. Import the over_react and react_dom libraries into your_app_name.dart, and initialize React within your Dart application. Then build a custom component and mount / render it into the HTML element you created in step 3.

    Be sure to namespace the react_dom.dart import as react_dom to avoid collisions with UiComponent.render when creating custom components.

     import 'dart:html';
     import 'package:over_react/react_dom.dart' as react_dom;
     import 'package:over_react/over_react.dart';
    
     main() {
       // Initialize React within our Dart app
       setClientConfiguration();
    
       // Mount / render your component.
       react_dom.render(Foo()(), querySelector('#react_mount_point'));
     }
    
  4. Run pub run build_runner serve in the root of your Dart project.

Note: After running a build, you'll have to restart your analysis server in your IDE for the built types to resolve properly. Unfortunately, this is a known limitation in the analysis server at this time. See: https://github.com/dart-lang/sdk/issues/34344

 

Running tests in your project #

When running tests on code that uses our builder (or any code that imports over_react), you must run your tests using build_runner.

Warning: Do not run tests via pub run build_runner test in a package while another instance of build_runner (e.g. pub run build_runner serve)is running in that same package. This workflow is unsupported by build_runner

  1. Run tests through build_runner, and specify the platform to be a browser platform. Example:

     $ pub run build_runner test -- -p chrome test/your_test_file.dart
    
  2. When running tests in over_react, our dart_test.yaml specifies some handy presets for running tests in DDC and dart2js:

    Note: These presets exist only in over_react.

    • To run tests in over_react compiled via DDC, run:
     $ pub run build_runner test -- -P dartdevc
    
    • To run tests in over_react compiled via dart2js, run:
     $ pub run build_runner test -r -- -P dart2js
    

   

Anatomy of an OverReact component #

If you are not familiar with React JS

Since OverReact is built atop React JS, we strongly encourage you to gain familiarity with it by reading this React JS tutorial first.

The over_react library functions as an additional "layer" atop the Dart react package which handles the underlying JS interop that wraps around React JS.

The library strives to maintain a 1:1 relationship with the React JS component class and API. To do that, an OverReact component is comprised of four core pieces that are each wired up via our builder using an analogous annotation.

  1. UiFactory
  2. UiProps
  3. UiState (optional)
  4. UiComponent

 

UiFactory #

UiFactory is a function that returns a new instance of a UiComponent’s UiProps class.

@Factory()
UiFactory<FooProps> Foo = _$Foo;

 

UiProps #

UiProps is a Map class that adds statically-typed getters and setters for each React component prop. It can also be invoked as a function, serving as a builder for its analogous component.

@Props()
class _$FooProps extends UiProps {
  // ...
}
  • Note: The builder will make the concrete getters and setters available in a generated class which has the same name as the class annotated with @Props(), but without the _$ prefix (which would be FooProps in the above code). The generated class will also have the same API. So, consumers who wish to extend the functionality of _$FooProps should extend the generated version, FooProps.

 

UiProps as a Map #

@Factory()
UiFactory<FooProps> Foo = _$Foo;

@Props()
class _$FooProps extends UiProps {
  String color;
}

@Component()
class FooComponent extends UiComponent<FooProps> {
  // ...
}

void bar() {
  FooProps props = Foo();

  props.color = '#66cc00';

  print(props.color); // #66cc00
  print(props);       // {FooProps.color: #66cc00}
}

/// You can use the factory to create a UiProps instance
/// backed by an existing Map.
void baz() {
  Map existingMap = {'FooProps.color': '#0094ff'};

  FooProps props = Foo(existingMap);

  print(props.color); // #0094ff
}

 

UiProps as a builder #

@Factory()
UiFactory<FooProps> Foo = _$Foo;

@Props()
class _$FooProps extends UiProps {
  String color;
}

@Component()
class FooComponent extends UiComponent<FooProps> {
  ReactElement bar() {
    // Create a UiProps instance to serve as a builder
    FooProps builder = Foo();

    // Add props
    builder.id = 'the_best_foo';
    builder.color = '#ee2724';

    // Invoke as a function with the desired children
    // to return a new instance of the component.
    return builder('child1', 'child2');
  }

  /// Even better... do it inline! (a.k.a fluent)
  ReactElement baz() {
    return (Foo()
      ..id = 'the_best_foo'
      ..color = 'red'
    )(
      'child1',
      'child2'
    );
  }
}

See fluent-style component consumption for more examples on builder usage.

 

UiState #

UiState is a Map class (just like UiProps) that adds statically-typed getters and setters for each React component state property.

@State()
class _$FooState extends UiState {
  // ...
}

UiState is optional, and won’t be used for every component.

  • Note: The builder will make the concrete getters and setters available in a generated class which has the same name as the class annotated with @State(), but without the _$ prefix (which would be FooState in the above code). The generated class will also have the same API. So, consumers who wish to extend the functionality of _$FooState should use the generated version, FooState.

 

UiComponent #

UiComponent is a subclass of react.Component, containing lifecycle methods and rendering logic for components.

@Component()
class FooComponent extends UiComponent<FooProps> {
  // ...
}
  • This component provides statically-typed props via UiProps, as well as utilities for prop forwarding and CSS class merging.
  • The UiStatefulComponent flavor augments UiComponent behavior with statically-typed state via UiState.

 

Accessing and manipulating props / state within UiComponent #

  • Within the UiComponent class, props and state are not just Maps. They are instances of UiProps and UiState, which means you don’t need String keys to access them!
  • newProps() and newState() are also exposed to conveniently create empty instances of UiProps and UiState as needed.
  • typedPropsFactory() and typedStateFactory() are also exposed to conveniently create typed props / state objects out of any provided backing map.
@Component()
class FooComponent extends UiStatefulComponent<FooProps, FooState> {
  @override
  getDefaultProps() => (newProps()
    ..color = '#66cc00'
  );

  @override
  getInitialState() => (newState()
    ..isActive = false
  );

  @override
  componentWillUpdate(Map newProps, Map newState) {
    var tNewState = typedStateFactory(newState);
    var tNewProps = typedPropsFactory(newProps);

    var becameActive = !state.isActive && tNewState.isActive;

    // Do something here!
  }

  @override
  render() {
    return (Dom.div()
      ..style = {
        'color': props.color,
        'fontWeight': state.isActive ? 'bold' : 'normal'
      }
    )(
      (Dom.button()..onClick = _handleButtonClick)('Toggle'),
      props.children
    );
  }

  void _handleButtonClick(SyntheticMouseEvent event) {
    _toggleActive();
  }

  void _toggleActive() {
    setState(newState()
      ..isActive = !state.isActive
    );
  }
}

   

Fluent-style component consumption #

In OverReact, components are consumed by invoking a UiFactory to return a new UiProps builder, which is then modified and invoked to build a ReactElement.

This is done to make "fluent-style" component consumption possible, so that the OverReact consumer experience is very similar to the React JS / "vanilla" react-dart experience.

To demonstrate the similarities, the example below shows a render method for JS, JSX, react-dart, and over_react that will have the exact same HTML markup result.

  • React JS:

    render() {
      return React.createElement('div', {className: 'container'},
        React.createElement('h1', null, 'Click the button!'),
        React.createElement('button', {
          id: 'main_button',
          onClick: _handleClick
        }, 'Click me')
      );
    }
    
  • React JS (JSX):

    render() {
      return <div className="container">
        <h1>Click the button!</h1>
        <button
          id="main_button"
          onClick={_handleClick}
        >Click me</button>
      </div>;
    }
    
  • Vanilla react-dart:

    render() {
      return react.div({'className': 'container'},
        react.h1({}, 'Click the button!'),
        react.button({
          'id': 'main_button',
          'onClick': _handleClick
        }, 'Click me')
      );
    }
    
  • OverReact:

    render() {
      return (Dom.div()..className = 'container')(
        Dom.h1()('Click the button!'),
        (Dom.button()
          ..id = 'main_button'
          ..onClick = _handleClick
        )('Click me')
      );
    }
    

    Let’s break down the OverReact fluent-style shown above

    render() {
      // Create a builder for a <div>,
      // add a CSS class name by cascading a typed setter,
      // and invoke the builder with the HTML DOM <h1> and <button> children.
      return (Dom.div()..className = 'container')(
    
        // Create a builder for an <h1> and invoke it with children.
        // No need for wrapping parentheses, since no props are added.
        Dom.h1()('Click the button!'),
    
        // Create a builder for a <button>,
        (Dom.button()
          // add a ubiquitous DOM prop exposed on all components,
          // which Dom.button() forwards to its rendered DOM,
          ..id = 'main_button'
          // add another prop,
          ..onClick = _handleClick
        // and finally invoke the builder with children.
        )('Click me')
      );
    }
    

   

DOM components and props #

All react-dart DOM components (react.div, react.a, etc.) have a corresponding Dom method (Dom.div(), Dom.a(), etc.) in OverReact.

ReactElement renderLink() {
  return (Dom.a()
    ..id = 'home_link'
    ..href = '/home'
  )('Home');
}

ReactElement renderResizeHandle() {
  return (Dom.div()
    ..className = 'resize-handle'
    ..onMouseDown = _startDrag
  )();
}
  • OverReact DOM components return a new DomProps builder, which can be used to render them via our fluent interface as shown in the examples above.
  • DomProps has statically-typed getters and setters for all "ubiquitous" HTML attribute props.
    • The domProps() function is also available to create a new typed Map or a typed view into an existing Map. Useful for manipulating DOM props and adding DOM props to components that don’t forward them directly.

   

Component Formatting #

A note on dart_style:

Currently, dart_style (dartfmt) decreases the readability of components built using OverReact's fluent-style. See https://github.com/dart-lang/dart_style/issues/549 for more info.

We're exploring some different ideas to improve automated formatting, but for the time being, we do not recommend using dart_style with OverReact.

However, if you do choose to use dart_style, you can greatly improve its output by using trailing commas in children argument lists:

  • dart_style formatting:
return (Button()
  ..id = 'flip'
  ..skin =
      ButtonSkin.vanilla)((Dom.span()
  ..className = 'flip-container')((Dom.span()..className = 'flipper')(
    (Dom.span()
      ..className =
          'front-side')((Icon()..glyph = IconGlyph.CHEVRON_DOUBLE_RIGHT)()),
    (Dom.span()
      ..className =
          'back-side')((Icon()..glyph = IconGlyph.CHEVRON_DOUBLE_LEFT)()))));
  • dart_style formatting, when trailing commas are used:
return (Button()
  ..id = 'flip'
  ..skin = ButtonSkin.vanilla)(
  (Dom.span()..className = 'flip-container')(
    (Dom.span()..className = 'flipper')(
      (Dom.span()..className = 'front-side')(
        (Icon()..glyph = IconGlyph.CHEVRON_DOUBLE_RIGHT)(),
      ),
      (Dom.span()..className = 'back-side')(
        (Icon()..glyph = IconGlyph.CHEVRON_DOUBLE_LEFT)(),
      ),
    ),
  ),
);

Guidelines #

To help ensure your OverReact code is readable and consistent, we've arrived at the following formatting rules.

  • ALWAYS place the closing builder parent on a new line.

    Good:

      (Button()
        ..skin = ButtonSkin.SUCCESS
        ..isDisabled = true
      )('Submit')
    

    Bad:

      (Button()
        ..skin = ButtonSkin.SUCCESS
        ..isDisabled = true)('Submit')
    
  • ALWAYS pass component children on a new line with trailing commas and 2 space indentation.

    Good:

      Dom.div()(
        Dom.span()('nested component'),
      )
    
      Dom.div()(
        Dom.span()('nested component A'),
        Dom.span()('nested component B'),
      )
    

    Bad:

      // Children are not on a new line; in most cases,
      // this makes it difficult to quickly determine nesting.
      Dom.div()(Dom.span()('nested component'), Dom.span()('nested component'))
    
      // With nested hierarchies, continuation indents can quickly result
      // in a "pyramid of Doom"
      Dom.div()(
          Dom.ul()(
              Dom.li()(
                  Dom.a()('A link!')
              )
          )
      )
    
      // Omitting trailing commas makes it a pain to rearrange lines
      Dom.div()(
        Dom.span()('nested component A'),
        Dom.span()('nested component B')
      )
      Dom.div()(
        Dom.span()('nested component B') // ugh, need to add a comma here...
        Dom.span()('nested component A'),
      )
    
  • AVOID passing children within lists; lists should only be used when the number/order of the children are dynamic.

    Good:

      Dom.div()(
        Dom.span()('nested component'),
        Dom.span()('nested component'),
      )
    
      var children = [
        Dom.div()('List of Items:'),
      ]..addAll(props.items.map(renderItem));
    
      return Dom.div()(children)
    

    Bad:

      Dom.div()([
        (Dom.span()..key = 'span1')('nested component'),
        (Dom.span()..key = 'span2')('nested component'),
      ])
    
  • AVOID specifying more than one cascading prop setter on the same line.

    Good:

      (Dom.div()
        ..id = 'my_div'
        ..className = 'my-class'
      )()
    

    Bad:

      (Dom.div()..id = 'my_div'..className = 'my-class')()
    

Building custom components #

Now that we’ve gone over how to use the over_react package in your project, the anatomy of a component and the DOM components that you get for free from OverReact, you're ready to start building your own custom React UI components.

  1. Start with one of the component boilerplate templates below (Or, use OverReact's code snippets for Intellij and Vs Code).
  1. Fill in your props and rendering/lifecycle logic.

  2. Consume your component with the fluent interface.

  3. Run the app you’ve set up to consume over_react

     $ pub run build_runner serve
    

    That’s it! Code will be automatically generated on the fly by the builder!

Check out some custom component demos to get a feel for what’s possible!

 

Component Boilerplate Templates #

  • Dart 1 and Dart 2 Backwards Compatible VS Code and WebStorm/IntelliJ Snippets #

  • Component Boilerplate #

      import 'package:over_react/over_react.dart';
    
      @Factory()
      UiFactory<FooProps> Foo = _$Foo;
    
      @Props()
      class _$FooProps extends UiProps {
        // Props go here, declared as fields:
        bool isDisabled;
        Iterable<String> items;
      }
    
      @Component()
      class FooComponent extends UiComponent<FooProps> {
        @override
        Map getDefaultProps() => (newProps()
          // Cascade default props here
          ..isDisabled = false
          ..items = []
        );
    
        @override
        render() {
          // Return the rendered component contents here.
          // The `props` variable is typed; no need for string keys!
        }
      }
    
  • Stateful Component Boilerplate #

      import 'dart:html';
      import 'package:over_react/over_react.dart';
    
      @Factory()
      UiFactory<BarProps> Bar = _$Bar;
    
      @Props()
      class _$BarProps extends UiProps {
        // Props go here, declared as fields:
        bool isDisabled;
        Iterable<String> items;
      }
    
      @State()
      class _$BarState extends UiState {
        // State goes here, declared as fields:
        bool isShown;
      }
    
      @Component()
      class BarComponent extends UiStatefulComponent<BarProps, BarState> {
        @override
        Map getDefaultProps() => (newProps()
          // Cascade default props here
          ..isDisabled = false
          ..items = []
        );
    
        @override
        Map getInitialState() => (newState()
          // Cascade initial state here
          ..isShown = true
        );
    
        @override
        render() {
          // Return the rendered component contents here.
          // The `props` variable is typed; no need for string keys!
        }
      }
    
  • Flux Component Boilerplate #

      import 'dart:html';
      import 'package:over_react/over_react.dart';
    
      @Factory()
      UiFactory<BazProps> Baz = _$Baz;
    
      @Props()
      class _$BazProps extends FluxUiProps<BazActions, BazStore> {
        // Props go here, declared as fields.
        // `actions` and `store` are already defined for you!
      }
    
      @Component()
      class BazComponent extends FluxUiComponent<BazProps> {
        getDefaultProps() => (newProps()
          // Cascade default props here
        );
    
        @override
        render() {
          // Return the rendered component contents here.
          // The `props` variables is typed; no need for string keys!
          // E.g., `props.actions`, `props.store`.
        }
      }
    
  • Stateful Flux Component Boilerplate #

      import 'dart:html';
      import 'package:over_react/over_react.dart';
    
      @Factory()
      UiFactory<BazProps> Baz = _$Baz;
    
      @Props()
      class _$BazProps extends FluxUiProps<BazActions, BazStore> {
        // Props go here, declared as fields.
        // `actions` and `store` are already defined for you!
      }
    
      @State()
      class _$BazState extends UiState {
        // State goes here, declared as fields.
      }
    
      @Component()
      class BazComponent extends FluxUiStatefulComponent<BazProps, BazState> {
        getDefaultProps() => (newProps()
          // Cascade default props here
        );
    
        @override
        Map getInitialState() => (newState()
          // Cascade initial state here
        );
    
        @override
        render() {
          // Return the rendered component contents here.
          // The `props` variables is typed; no need for string keys!
          // E.g., `props.actions`, `props.store`.
        }
      }
    

 

Component Best Practices #

  • ALWAYS write informative comments for your component factories. Include what the component relates to, relies on, or if it extends another component.

    Good:

      /// Use the `DropdownButton` component to render a button
      /// that controls the visibility of a child [DropdownMenu].
      ///
      /// * Related to [Button].
      /// * Extends [DropdownTrigger].
      /// * Similar to [SplitButton].
      ///
      /// See: <https://link-to-any-relevant-documentation>.
      @Factory()
      UiFactory<DropdownButtonProps> DropdownButton = _$DropdownButton;
    

    Bad:

      /// Component Factory for a dropdown button component.
      @Factory()
      UiFactory<DropdownButtonProps> DropdownButton = _$DropdownButton;
    

 

  • ALWAYS set a default / initial value for props / state fields, and document that value in a comment.

    Why? Without default prop values for bool fields, they could be null - which is extremely confusing and can lead to a lot of unnecessary null-checking in your business logic.

    Good:

      @Props()
      _$DropdownButtonProps extends UiProps {
        /// Whether the [DropdownButton] appears disabled.
        ///
        /// Default: `false`
        bool isDisabled;
    
        /// Whether the [DropdownButton]'s child [DropdownMenu] is open
        /// when the component is first mounted.
        ///
        /// Determines the initial value of [DropdownButtonState.isOpen].
        ///
        /// Default: `false`
        bool initiallyOpen;
      }
    
      @State()
      _$DropdownButtonState extends UiState {
        /// Whether the [DropdownButton]'s child [DropdownMenu] is open.
        ///
        /// Initial: [DropdownButtonProps.initiallyOpen]
        bool isOpen;
      }
    
      @Component()
      DropdownButtonComponent
          extends UiStatefulComponent<DropdownButtonProps, DropdownButtonState> {
        @override
        Map getDefaultProps() => (newProps()
          ..isDisabled = false
          ..initiallyOpen = false
        );
    
        @override
        Map getInitialState() => (newState()
          ..isOpen = props.initiallyOpen
        );
      }
    

    Bad:

      @Props()
      _$DropdownButtonProps extends UiProps {
        bool isDisabled;
        bool initiallyOpen;
      }
    
      @State()
      _$DropdownButtonState extends UiState {
        bool isOpen;
      }
    
      @Component()
      DropdownButtonComponent
          extends UiStatefulComponent<DropdownButtonProps, DropdownButtonState> {
        // Confusing stuff is gonna happen in here with
        // bool props that could be null.
      }
    

 

  • AVOID adding props or state fields that don't have an informative comment.

    Good:

      @Props()
      _$DropdownButtonProps extends UiProps {
        /// Whether the [DropdownButton] appears disabled.
        ///
        /// Default: `false`
        bool isDisabled;
    
        /// Whether the [DropdownButton]'s child [DropdownMenu] is open
        /// when the component is first mounted.
        ///
        /// Determines the initial value of [DropdownButtonState.isOpen].
        ///
        /// Default: `false`
        bool initiallyOpen;
      }
    
      @State()
      _$DropdownButtonState extends UiState {
        /// Whether the [DropdownButton]'s child [DropdownMenu] is open.
        ///
        /// Initial: [DropdownButtonProps.initiallyOpen]
        bool isOpen;
      }
    

    Bad:

      @Props()
      _$DropdownButtonProps extends UiProps {
        bool isDisabled;
        bool initiallyOpen;
      }
    
      @State()
      _$DropdownButtonState extends UiState {
        bool isOpen;
      }
    

 

Contributing #

Yes please! (Please read our contributor guidelines first)

   

Versioning #

The over_react library adheres to Semantic Versioning:

  • Any API changes that are not backwards compatible will bump the major version (and reset the minor / patch).
  • Any new functionality that is added in a backwards-compatible manner will bump the minor version (and reset the patch).
  • Any backwards-compatible bug fixes that are added will bump the patch version.

OverReact Changelog #

2.4.2 #

Complete 2.4.2 Changsets:

  • #288 Downgrade parse error to fine so as to not fail build unnecessarily.
  • #292 Update react dependency to version ^4.7.0, and remove references to deprecated jsify, getProperty and setProperty members.
  • #294 Fix issue with AbstractTransitionComponent that causes ReactJS setState warnings to appear in the browser console.

2.4.1 #

Complete 2.4.1 Changsets:

  • #281 Upgrade to analyzer ^0.35.0.

2.4.0 #

Complete 2.4.0 Changsets:

  • #280 Optimize the over_react builder to avoid unnecessary asset reads. Informal profiling in a large codebase that consumes over_react has shown in the best case a speed up on rebuilds from ~1 minute to ~2 seconds, and in the worst case no difference at all.

2.3.1 #

Complete 2.3.1 Changsets:

  • #272 Add min-height: 0 to ResizeSensor wrapper nodes to fix issues with it not shrinking in a flexbox layout

2.3.0 #

Complete 2.3.0 Changsets:

  • #266 Add ErrorBoundary Component

    This component does not actually hook into any ReactJS 16 lifecycle yet. It won't until support for ReactJS 16 is added to react-dart in version 5.0.0, and to over_react in version 3.0.0.

2.2.0 #

Complete 2.2.0 Changsets:

  • #249 Warn consumers about props / state mutation

    • Directly mutating props and state is an antipattern and can cause unpredictable rendering. Avoiding this will be especially important for components to behave correctly in React 16's concurrent mode.
  • #255 Update for future compatibility with react 5.0.0

2.1.0 #

Complete 2.1.0 Changsets:

  • #249 Warn consumers about props / state mutation

    • Directly mutating props and state is an antipattern and can cause unpredictable rendering. Avoiding this will be especially important for components to behave correctly in React 16's concurrent mode.
  • #254 Add IDE snippets (WebStorm/IntelliJ and VSCode) for Dart2-only component boilerplate.

  • #253 Fix a bug that would cause a runtime exception for consumers that are leveraging the backwards-compatible component boilerplate when mixing in a @PropsMixin or @StateMixin from this package.

  • #256 Workaround a Dart Dev Compiler bug that affects private props/state members and classes.

  • #252 Workaround the following Dart Dev Compiler bug that results in incorrect behavior in certain scenarios when using uninitialized props/state fields: dart-lang/sdk#36052

  • #251 Update the builder's auto_apply option to dependents instead of all_packages. This means it will only run on packages that explicitly declare a dependency on over_react, which makes more sense for the purpose of this builder and is more performant because it runs on fewer packages.

  • #250 Fail CI if changes are detected after running a build via pub run build_runner build. This ensures that we don't forget to commit changes to generated files.

2.0.0 #

Complete 2.0.0 Changeset

This release adds support for Dart 2 while retaining backwards-compatibility with Dart 1, but it requires changes to consumer's component code.

Note: If you intend to consume this version of over_react on Dart 1 and Dart 2 in the same codebase, do not remove the transformers section from your pubspec.yaml. This section is ignored on Dart 2, but will still be needed on Dart 1

Breaking Changes

  • In order to add support for Dart 2, consumers need to update their over_react component code! Please see our Dart 2 migration guide for more information.

    We've created a codemod tool that will automatically update your code:

      # On Dart 2.1.0
      $ pub global activate over_react_codemod ^1.0.2
    
      # If you need backwards-compatibility with Dart 1:
      $ pub global run over_react_codemod:dart2_upgrade --backwards-compat
    
      # Or, if you are okay with dropping Dart 1 support:
      $ pub global run over_react_codemod:dart2_upgrade
    

    The tool (and additional info) can be found here: https://github.com/Workiva/over_react_codemod/

  • Removals:

    • getJsProps() - use getProps() instead
    • $Props and $PropKeys - see the migration guide above

1.33.2 #

  • #292 Update react dependency to version ^4.7.0, and remove references to deprecated jsify, getProperty and setProperty members.
  • #294 Fix issue with AbstractTransitionComponent that causes ReactJS setState warnings to appear in the browser console.

1.33.1 #

  • #272 Add min-height: 0 to ResizeSensor wrapper nodes to fix issues with it not shrinking in a flexbox layout

1.33.0 #

Complete 1.33.0 Changeset

  • #266 Add ErrorBoundary Component

    This component does not actually hook into any ReactJS 16 lifecycle yet. It won't until support for ReactJS 16 is added to react-dart in version 5.0.0, and to over_react in version 3.0.0.

1.32.0 #

Complete 1.32.0 Changeset

  • #249 Warn consumers about props / state mutation
    • Directly mutating props and state is an antipattern and can cause unpredictable rendering. Avoiding this will be especially important for components to behave correctly in React 16's concurrent mode.

1.31.0 #

Complete 1.31.0 Changeset

Deprecations

  • #230 Deprecate the following APIs (they will be removed in 2.0.0):

    • getJsProps() - use getProps() instead.
    • $Props and $PropKeys - see the Dart 2 migration guide for more information.
  • #207 Override call() instead of noSuchMethod() in the UiProps class. This was a requirement for Dart 2 compatibility, but also serves as an improvement - by no longer overriding noSuchMethod(), we will no longer be obscuring certain analyzer errors that should be seen by consumers.

1.30.2 #

Complete 1.30.2 Changeset

Bug Fixes

  • #222 Fix the initializer validation for component factories and the static meta field on props and state classes.

1.30.1 #

Complete 1.30.1 Changeset

Bug Fixes

  • #220 Fix an issue for Dart 2 compatibility with how the transformer handles props and state mixins that have generic type parameters.

Tech-Debt

  • #219 Remove dart:mirrors usages from tests (necessary for Dart 2 compatibility).

Documentation

1.30.0 #

Complete 1.30.0 Changeset

New Features

  • #196 Add componentDefaultProps getter to UiProps for retrieving the immutable map view of a component's default props. This is an alternative to constructing a UiComponent directly and calling getDefaultProps(), which will no longer work in Dart 2.

  • #208 Add typedDefaultPropsFor(factory) utility function to easily obtain a typed view of the immutable default props for any UiFactory. This is effectively a strongly-typed version of the above componentDefaultProps getter.

Improvements

  • #200 #201 #205 #208 Update the transformer to support new over_react component boilerplate that is compatible with both Dart 1 and Dart 2. This is the first step towards Dart 2 compatibility. For more information, see #210.

1.29.0 #

Complete 1.29.0 Changeset

Bug fixes

  • #197 Mount the rem-change-detecting node for a ResizeSensor asynchronously to prevent react from getting into a bad state

New Features

  • #195: Add hooks for Flux component redraws that occur in response to store updates: listenToStoreForRedraw/handleRedrawOn
    • Implements the stuff that was missed in #193

1.28.0 #

Complete 1.28.0 Changeset

Bug fixes

  • #193 Fix missing super calls in Flux component lifecycle methods that prevented disposal and prop validation

New Features

  • #193: Add hooks for Flux component redraws that occur in response to store updates: listenToStoreForRedraw/handleRedrawOn
    • Actually implemented via #195 in 1.29.0

Improvements

  • #192: Make return type of getDartComponent generic
  • #190: Merge style prop into styles applied to the top-level ResizeSensor node

1.27.0 #

Complete 1.27.0 Changeset

New Features

  • #187: New ResizSensorProps.onDetachedMountCheck prop callback and ResizeSensorComponent.forceResetDetachedSensor method

Improvements

  • #188: Use isNotEmpty instead of length == 0 check
    • Thanks @teresy!!!

1.26.2 #

Bug fixes

  • 5fb73f Make rem change sensor container is overflow:hidden so it doesn't interfere with the page layout

1.26.1 #

Dependency Updates

  • e8fc86 Loosen lower bound of built_value
    • built_value >=4.6.1 <5.2.0 (was >=5.1.3 <5.2.0)

1.26.0 #

Complete 1.26.0 Changeset

New Features

Dependency Updates

  • 881c0c Tighten version constraints to speed up pub get
    • analyzer >=0.30.0+4 <=0.31.0 (was >=0.30.0 <=0.31.0)
    • built_redux ^7.4.2 (was ^7.4.1)
    • built_value >=5.1.3 <5.2.0 (was >=4.2.0 <5.2.0)
    • js ^0.6.1+1 (was ^0.6.0)
    • logging >=0.11.3+2 <1.0.0 (was >=0.11.3+1 <1.0.0)
    • meta ^1.1.6 (was ^1.0.4)
    • path ^1.5.1 (was ^1.4.1)
    • react ^4.4.2 (was ^4.4.1)
    • source_span ^1.4.1 (was ^1.4.0)
    • transformer_utils ^0.1.5 (was ^0.1.1)
    • w_common ^1.13.0 (was ^1.10.0)
    • w_flux ^2.9.5 (was ^2.7.1)
    • platform_detect ^1.3.4 (was ^1.3.2)
    • quiver >=0.25.0 <=0.28.0 (was >=0.21.4 <=0.28.0)

Tech Debt

  • #179: Update CI build

1.25.0 #

Complete 1.25.0 Changeset

New Features

  • #167: New ClassNameBuilder.merge method and ClassNameBuilder.merged constructor.
  • #168: Expose react_wrappers library that was previously only available via a src/ import.

1.24.0 #

Complete 1.24.0 Changeset

Dependency Updates

  • #153 react ^4.3.0 (was ^3.7.0)
  • #151
    • built_redux ^7.4.1 (was >=6.1.0 <8.0.0)
    • built_value >=4.2.0 <5.2.0 (was >=4.2.0 <6.0.0)

New Features

  • #154: Expose react_dom.render/react_dom.unmountComponentAtNode from the react library

Tech Debt

  • #151 Prepare for Dart 2 SDK
    • Address Dart 2.x SDK lints / warnings that do not constitute breaking changes
    • Address DisposableManagerV6 deprecation
    • UiProps and UiState now extend from MapBase

1.24.1 #

Complete 1.24.1 Changeset

Dependency Updates

  • w_common ^1.10.0 (was ^1.8.0)
  • react ^4.4.1 (was ^4.3.0)

Tech Debt

  • Address ReactComponentFactory deprecation
  • Address findRenderedComponentWithType deprecation

1.24.0 #

Complete 1.24.0 Changeset

Dependency Updates

  • #153 react ^4.3.0 (was ^3.7.0)
  • #151
    • built_redux ^7.4.1 (was >=6.1.0 <8.0.0)
    • built_value >=4.2.0 <5.2.0 (was >=4.2.0 <6.0.0)

New Features

  • #154: Expose react_dom.render/react_dom.unmountComponentAtNode from the react library

Tech Debt

  • #151 Prepare for Dart 2 SDK
    • Address Dart 2.x SDK lints / warnings that do not constitute breaking changes
    • Address DisposableManagerV6 deprecation
    • UiProps and UiState now extend from MapBase

1.23.1 #

Complete 1.23.1 Changeset

Dependency Updates

  • #149: Dependency Maintenance:
    • Dart SDK now >=1.24.2 <2.0.0, was >=1.24.2
    • Dependencies:
      • analyzer now >=0.30.0 <=0.31.0, was >=0.30.0 <0.31.0
      • barback now >=0.15.2 <=0.15.2+14, was ^0.15.0
      • quiver now >=0.21.4 <=0.28.0, was >=0.21.4 <0.26.0
    • Dev Dependencies:
      • coverage now >=0.7.2 <0.11.0, was ^0.7.2
      • dependency_validator now ^1.1.0, was ^1.0.0
      • mockito now ^2.0.0, was ^0.11.0
      • test now ^0.12.32+1, was ^0.12.24

1.23.0 #

Complete 1.23.0 Changeset

Dependency Updates

  • #145: Widen built_value version constraint: now >=4.2.0 <6.0.0, was ^4.2.0

New Features

  • #144: Move BuiltReduxUiComponent/BuiltReduxUiProps out of @experimental
    • Warning: This will be deprecated in an upcoming release in favor of a different approach to creating a built_redux component.

1.22.0 #

Complete 1.22.0 Changeset

New Features

  • #142: Do not execute prop validation logic in dart2js code

1.21.0 #

Complete 1.21.0 Changeset

New Features

  • #140: Add an option to make BuiltReduxUiComponent "pure"

1.20.2 #

Complete 1.20.2 Changeset

Tech Debt

  • #137: Get rid of dart2js compiler warnings

1.20.1 #

Complete 1.20.1 Changeset

Misc

  • #133: Update logger name standard.

1.20.0 #

Complete 1.20.0 Changeset

New Features

  • #128: Add UiPropsMapView.

Misc

  • #129: Add CODEOWNERS file.

1.19.0 #

Complete 1.19.0 Changeset

Dependency Updates

  • #126: Update minimum Dart SDK version to 1.24.2.

New Features

  • #118: Add BuiltReduxUiComponent and BuiltReduxUiProps.
    • These classes are considered unstable and can be imported via import "package:over_react/experimental.dart";

Tech Debt

  • #126: Use dependency_validator.

1.18.1 #

Complete 1.18.1 Changeset

Bug fixes

  • Fix regression in prop_mixins.dart introduced by #119.

1.18.0 #

Complete 1.18.0 Changeset

Improvements

  • #177: Improve error message when UiState classes aren't set up properly.

New Features

  • #119: More convenient ubiquitous access of DOM/aria props.
  • #120: Transition in/out-specific config, test attributes.

1.17.0 #

Complete 1.17.0 Changeset

New Features

  • #115: Add 4-argument callback utils

1.16.2 #

Complete 1.16.2 Changeset

Bug fixes

  • #110: Revert bugfixes that can cause FluxUiComponent rendering regressions:
    • #108: Fix case where setState and store trigger only result in one FluxUiComponent render
    • #103: FluxUiComponent redraws only once when store triggers along with ancestor rerender.

1.16.1 #

Complete 1.16.1 Changeset

Bug fixes

  • #108: Fix case where setState and store trigger only result in one FluxUiComponent render

1.16.0 #

Complete 1.16.0 Changeset

Dependency Updates

  • w_common ^1.8.0 (was ^1.6.0)
  • w_flux ^2.9.0 (was ^2.7.1)

New Features

  • #104: Update UiComponent to implement DisposableManagerV6.

Improvements

  • #103: FluxUiComponent redraws only once when store triggers along with ancestor rerender.

Tech Debt

  • #105: Add warning for incorrect usage of getDartComponent.

 

1.15.1 #

Complete 1.15.1 Changeset

Tech Debt

  • #97: Improve some documentation comments.
  • #95: Move internal test utils to over_react_test, and consume them.

 

1.15.0 #

Complete 1.15.0 Changeset

New Features

  • #88: Add validateProps method to UiComponent
    • Will automatically validate props annotated with @requiredProp within componentWillMount and componentWillReceiveProps

Tech Debt

  • #94: Address deprecations from package:test
  • #98: Fix misleading typo in overridden parameter name

Misc

 

1.14.0 #

Complete 1.14.0 Changeset

Dependency Updates

  • react ^3.4.3 (was ^3.4.1)
  • w_common ^1.6.0 (new)

New Features

  • #91: Implement DisposableManagerV3 for UiComponent
    • Assists with cleaning up streams and other data structures that won't necessarily be garbage collected without some manual intervention.

Misc

  • #92: Update prop error message to make it more DDC friendly

 

1.13.0 #

Complete 1.13.0 Changeset

Dependency Updates

  • #89: quiver >=0.21.4 <0.26.0 (was >=0.21.4 <0.25.0)

New Features

  • #87: Make DomProps/SvgProps implement UiProps for more convenient DDC typing

Misc

  • #86: Get tests passing using the DDC
  • #83: Use over_react_test

 

1.12.1 #

Complete 1.12.1 Changeset

Bug fixes

  • Bump min source_span to version w/ SourceFile.fromString

 

1.12.0 #

Complete 1.12.0 Changeset

Strong Mode / Dart Dev Compiler

  • #81: Make transformer output strong mode clean.
  • #82: Implement workarounds necessary to make OverReact-based code able to be compiled by the Dart Dev Compiler ("DDC").

 

1.11.2 #

Complete 1.11.2 Changeset

Bug Fixes

  • e805b7: Null-coalesce isDisposedOrDisposing to ease consumer test breakages.

 

1.11.1 #

Complete 1.11.1 Changeset

Bug Fixes

  • Revert #77: Update FluxUiComponent subscriptions when new props are received.
    • Reverted since this broke subclasses that weren't calling super in lifecycle methods componentWillReceieveProps and componentDidUpdate
    • Keep @mustCallSuper annotations from this changeset

 

1.11.0 #

Complete 1.11.0 Changeset

New Features

Bug Fixes

  • #77: Update FluxUiComponent subscriptions when new props are received.

Tech Debt Paid

  • #75: Audit the lib for any memory leak sources, and fortify it against future ones.

Misc

  • #72: Add logging message when a race condition causes BatchedRedraws to mount a FluxUiComponent asynchronously after the store has already been disposed.
    • Thanks @tomconnell-wf!

 

1.10.0 #

Complete 1.10.0 Changeset

Improvements

  • #69: New top-level getSelectionStart function to normalize selectionStart across browsers for both TextInputElements and TextAreaElements

Tech Debt Paid

  • #68: Declare explicitly-used transitive imports in pubspec.yaml
  • #70: Don't run ValidationUtil-related tests in dart2js

 

1.9.2 #

Complete 1.9.2 Changeset

Dependency Updates

  • analyzer >=0.26.1+3 <0.31.0 (was >=0.26.1+3 <0.30.0)

 

1.9.1 #

Complete 1.9.1 Changeset

Bug Fixes

  • #66: Fix regression with transitions not completing in consumers of AbstractTransitionComponent that don't call super.componentDidMount

 

1.9.0 #

Complete 1.9.0 Changeset

Improvements

  • #60: Provide easy access to DOM node in ValidationUtil.warn messages
  • #61: Export some react library members and add capturing event handlers
    • Export setClientConfiguration and ReactElement
    • Export all Synthetic*Event classes
    • Add capturing event handlers supported by ReactJS

Bug Fixes

  • #58: Fix issue with the transitionend warning (added via #55) sometimes firing when it shouldn't
  • #59: Ensure AbstractTransitionComponent does not call setState while in the process of unmounting
    • Thanks @joshbeam-wf!!!
  • #65 Work around Dart 1.23 strong mode issue with MapViewMixin

 

1.8.0 #

Complete 1.8.0 Changeset

Bug Fixes

  • #54: Fix strong mode warning
  • #55: Fix issue with AbstractTransitionComponent causing components to hang when the transitionend event never fires.

 

1.7.0 #

Complete 1.7.0 Changeset

Deprecations

  • #51: Deprecate the @Required() annotation since it conflicts with the meta package. Replaced by:
    • arguments to the Accessor annotation:

        @Accessor(isRequired: true, isNullable: true, requiredErrorMessage: 'foo')
      
    • shorthand aliases: @requiredProp/@nullableRequiredProp

Bug Fixes

  • #52: Eliminate dart2js warnings on component props classes

 

1.6.0 #

Complete 1.6.0 Changeset

  • #48: Improved getProps() functionality.
    • Allows you to traverse wrapper components by setting the named parameter traverseWrappers to true.

 

1.5.0 #

Complete 1.5.0 Changeset

Improvements

  • #46: Add ResizeSensorProps.quickMount flag for better performance when sensors are mounted often
  • Make getProp, getProps, and modifyProps conditional based on the named parameter shouldAdd/shouldModify.

Dependency Updates

  • Add missing quiver dependency (now depends on quiver >=0.21.4 <0.25.0)
  • Broaden analyzer dependency range to >=0.26.1+3 <0.30.0 (was >=0.26.1+3 <0.28.0)

 

1.4.0 #

Complete 1.4.0 Changeset

#40: Sync changes from original private repo library

This is the last time we'll do this - as the original library has now been completely switched over to use over_react

  • Switched dependency from browser_detect to our new platform_detect library!

  • Improved toString method of DebugFriendlyConstant.

  • Improved setSelectionRange polyfill to avoid https://github.com/dart-lang/sdk/issues/22967

  • Added typedef for ElementCallback and ResizeSensorHandler.

  • Added newStyleFromProps utility function.

  • Added getPropKey utility function.

    • Allows you to get a namespaced prop key dynamically!

Miscellaneous

  • #28: Run unit tests in dart2js on CI
  • #37: Update formatting guidelines WRT dartfmt and trailing commas

 

1.3.0 #

Complete 1.3.0 Changeset

React JS Upgrade

We are now on Gitter!

 

1.2.0 #

Complete 1.2.0 Changeset

Strong Mode

  • #15: Make over_react code "strong mode" compliant!
    • We will be working in the near future to make the code generated by our transformer compliant as well.

Dependency Updates

  • #23: Update minimum Dart SDK version to 1.19.1.
  • #15: Update minimum react package version to 3.0.1.

Bug Fixes

Documentation

 

1.1.1 #

Complete 1.1.1 Changeset

  • #6: Add contributor documentation.
  • #7: Allow "unsupported" units to be passed to the toRem and toPx functions.

 

1.1.0 #

Complete 1.1.0 Changeset

New Features

  • #10: Add FluxUiComponent and FluxUiStatefulComponent.
    • Enables consumers to build UI components with a uni-directional data flow via the w_flux library.

Misc

  • #8: Add a stateful UI component demo.
  • #9: Fix CI build fragility.

 

1.0.2 #

Complete 1.0.2 Changeset

  • #5: Add some Bootstrap UI components to web/ to demonstrate what can be built using OverReact.

 

1.0.1 #

Complete 1.0.1 Changeset

  • Add test coverage for the constants, dom_util, guid_util and event_helpers libraries.

 

1.0.0 #

Initial public release of the library.

Use this package as a library

1. Depend on it

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


dependencies:
  over_react: ^2.4.2+dart2

2. Install it

You can install packages from the command line:

with pub:


$ pub get

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

3. Import it

Now in your Dart code, you can use:


import 'package:over_react/over_react.dart';
  
Version Uploaded Documentation Archive
2.4.2+dart2 May 15, 2019 Go to the documentation of over_react 2.4.2+dart2 Download over_react 2.4.2+dart2 archive
2.4.2+dart1 May 15, 2019 Go to the documentation of over_react 2.4.2+dart1 Download over_react 2.4.2+dart1 archive
2.4.1+dart2 Apr 8, 2019 Go to the documentation of over_react 2.4.1+dart2 Download over_react 2.4.1+dart2 archive
2.4.1+dart1 Apr 8, 2019 Go to the documentation of over_react 2.4.1+dart1 Download over_react 2.4.1+dart1 archive
2.4.0+dart2 Apr 5, 2019 Go to the documentation of over_react 2.4.0+dart2 Download over_react 2.4.0+dart2 archive
2.4.0+dart1 Apr 5, 2019 Go to the documentation of over_react 2.4.0+dart1 Download over_react 2.4.0+dart1 archive
2.3.1+dart2 Mar 15, 2019 Go to the documentation of over_react 2.3.1+dart2 Download over_react 2.3.1+dart2 archive
2.3.1+dart1 Mar 15, 2019 Go to the documentation of over_react 2.3.1+dart1 Download over_react 2.3.1+dart1 archive
2.3.0+dart2 Mar 11, 2019 Go to the documentation of over_react 2.3.0+dart2 Download over_react 2.3.0+dart2 archive
2.3.0+dart1 Mar 11, 2019 Go to the documentation of over_react 2.3.0+dart1 Download over_react 2.3.0+dart1 archive

All 78 versions...

Popularity:
Describes how popular the package is relative to other packages. [more]
82
Health:
Code health derived from static analysis. [more]
17
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
100
Overall:
Weighted score of the above. [more]
66
Learn more about scoring.

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

  • Dart: 2.3.1
  • pana: 0.12.16

Platforms

Detected platforms: web

Primary library: package:over_react/over_react.dart with components: html, js.

Health suggestions

Fix lib/src/component/prop_mixins.over_react.g.dart. (-73.51 points)

Analysis of lib/src/component/prop_mixins.over_react.g.dart reported 265 hints, including:

line 23 col 7: Avoid using null in if null operators.

line 39 col 7: Avoid using null in if null operators.

line 81 col 7: Avoid using null in if null operators.

line 90 col 7: Avoid using null in if null operators.

line 99 col 7: Avoid using null in if null operators.

Fix lib/src/component/aria_mixin.over_react.g.dart. (-16.51 points)

Analysis of lib/src/component/aria_mixin.over_react.g.dart reported 36 hints, including:

line 36 col 7: Avoid using null in if null operators.

line 86 col 7: Avoid using null in if null operators.

line 125 col 7: Avoid using null in if null operators.

line 156 col 7: Avoid using null in if null operators.

line 196 col 7: Avoid using null in if null operators.

Fix lib/src/component_declaration/component_base.dart. (-5.36 points)

Analysis of lib/src/component_declaration/component_base.dart reported 11 hints, including:

line 19 col 8: Unused import: 'dart:html'.

line 44 col 19: Use = to separate a named parameter from its default value.

line 159 col 45: Use = to separate a named parameter from its default value.

line 159 col 74: Use = to separate a named parameter from its default value.

line 566 col 43: Use = to separate a named parameter from its default value.

Fix additional 42 files with analysis or formatting issues. (-21.84 points)

Additional issues in the following files:

  • lib/src/component/resize_sensor.over_react.g.dart (8 hints)
  • lib/src/component/abstract_transition_props.over_react.g.dart (7 hints)
  • lib/src/builder/generation/declaration_parsing.dart (4 hints)
  • lib/src/util/rem_util.dart (4 hints)
  • lib/src/builder/generation/impl_generation.dart (3 hints)
  • lib/src/component/error_boundary.over_react.g.dart (3 hints)
  • lib/src/builder/builder.dart (2 hints)
  • lib/src/component_declaration/annotations.dart (2 hints)
  • lib/src/component_declaration/component_type_checking.dart (2 hints)
  • lib/src/util/class_names.over_react.g.dart (2 hints)
  • lib/src/util/map_util.dart (2 hints)
  • lib/src/util/react_util.dart (2 hints)
  • lib/src/component/abstract_transition.over_react.g.dart (1 hint)
  • lib/src/component/resize_sensor.dart (1 hint)
  • lib/src/util/react_wrappers.dart (1 hint)
  • lib/builder.dart (Run dartfmt to format lib/builder.dart.)
  • lib/over_react.dart (Run dartfmt to format lib/over_react.dart.)
  • lib/react_dom.dart (Run dartfmt to format lib/react_dom.dart.)
  • lib/src/builder/util.dart (Run dartfmt to format lib/src/builder/util.dart.)
  • lib/src/component/abstract_transition.dart (Run dartfmt to format lib/src/component/abstract_transition.dart.)
  • lib/src/component/abstract_transition_props.dart (Run dartfmt to format lib/src/component/abstract_transition_props.dart.)
  • lib/src/component/aria_mixin.dart (Run dartfmt to format lib/src/component/aria_mixin.dart.)
  • lib/src/component/dom_components.dart (Run dartfmt to format lib/src/component/dom_components.dart.)
  • lib/src/component/error_boundary.dart (Run dartfmt to format lib/src/component/error_boundary.dart.)
  • lib/src/component/prop_mixins.dart (Run dartfmt to format lib/src/component/prop_mixins.dart.)
  • lib/src/component/prop_typedefs.dart (Run dartfmt to format lib/src/component/prop_typedefs.dart.)
  • lib/src/component_declaration/builder_helpers.dart (Run dartfmt to format lib/src/component_declaration/builder_helpers.dart.)
  • lib/src/component_declaration/built_redux_component.dart (Run dartfmt to format lib/src/component_declaration/built_redux_component.dart.)
  • lib/src/component_declaration/flux_component.dart (Run dartfmt to format lib/src/component_declaration/flux_component.dart.)
  • lib/src/component_declaration/util.dart (Run dartfmt to format lib/src/component_declaration/util.dart.)
  • lib/src/util/class_names.dart (Run dartfmt to format lib/src/util/class_names.dart.)
  • lib/src/util/css_value_util.dart (Run dartfmt to format lib/src/util/css_value_util.dart.)
  • lib/src/util/dom_util.dart (Run dartfmt to format lib/src/util/dom_util.dart.)
  • lib/src/util/event_helpers.dart (Run dartfmt to format lib/src/util/event_helpers.dart.)
  • lib/src/util/guid_util.dart (Run dartfmt to format lib/src/util/guid_util.dart.)
  • lib/src/util/handler_chain_util.dart (Run dartfmt to format lib/src/util/handler_chain_util.dart.)
  • lib/src/util/key_constants.dart (Run dartfmt to format lib/src/util/key_constants.dart.)
  • lib/src/util/pretty_print.dart (Run dartfmt to format lib/src/util/pretty_print.dart.)
  • lib/src/util/prop_errors.dart (Run dartfmt to format lib/src/util/prop_errors.dart.)
  • lib/src/util/prop_key_util.dart (Run dartfmt to format lib/src/util/prop_key_util.dart.)
  • lib/src/util/test_mode.dart (Run dartfmt to format lib/src/util/test_mode.dart.)
  • lib/src/util/validation_util.dart (Run dartfmt to format lib/src/util/validation_util.dart.)

Maintenance suggestions

Maintain an example.

None of the files in the package's example/ directory matches known example patterns.

Common filename patterns include main.dart, example.dart, and over_react.dart. Packages with multiple examples should provide example/README.md.

For more information see the pub package layout conventions.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.1.0 <3.0.0
analyzer ^0.35.0 0.35.4 0.36.3
build ^1.0.0 1.1.4
built_redux ^7.4.2 7.5.3
built_value >=5.4.4 <7.0.0 6.5.0
dart_style >=0.1.7 <2.0.0 1.2.4 1.2.7
js ^0.6.1+1 0.6.1+1
logging >=0.11.3+2 <1.0.0 0.11.3+2
meta ^1.1.6 1.1.7
path ^1.5.1 1.6.2
platform_detect ^1.3.4 1.3.5
quiver >=0.25.0 <1.0.0 0.29.0+2 2.0.3
react ^4.7.0 4.8.0
source_span ^1.4.1 1.5.5
transformer_utils ^0.2.0 0.2.1
w_common ^1.13.0 1.17.0
w_flux ^2.9.5 2.10.1
Transitive dependencies
args 1.5.1
async 2.2.0
boolean_selector 1.0.4
built_collection 4.2.2
charcode 1.1.2
cli_repl 0.2.0+1
collection 1.14.11
convert 2.1.1
crypto 2.0.6
fixnum 0.10.9
front_end 0.1.14 0.1.18
glob 1.1.7
http 0.12.0+2
http_multi_server 2.0.6
http_parser 3.1.3
intl 0.15.8
io 0.3.3
json_rpc_2 2.1.0
kernel 0.3.14 0.3.18
matcher 0.12.5
mime 0.9.6+2
multi_server_socket 1.0.2
node_preamble 1.4.4
package_config 1.0.5
package_resolver 1.0.10
pedantic 1.7.0
pool 1.4.0
pub_semver 1.4.2
sass 1.20.1
shelf 0.7.5
shelf_packages_handler 1.0.4
shelf_static 0.2.8
shelf_web_socket 0.2.3
source_gen 0.9.4+2
source_map_stack_trace 1.1.5
source_maps 0.10.8
stack_trace 1.9.3
stream_channel 2.0.0
stream_transform 0.0.19
string_scanner 1.0.4
term_glyph 1.1.0
test_api 0.2.5
test_core 0.2.5
tuple 1.0.2
typed_data 1.1.6
vm_service_client 0.2.6+2
watcher 0.9.7+10
web_socket_channel 1.0.13
yaml 2.1.15
Dev dependencies
build_resolvers ^1.0.3
build_runner ^1.3.1
build_test ^0.10.6
build_web_compilers ^1.2.0
built_value_generator ^6.0.0
coverage >=0.10.0 <0.12.4
dart2_constant ^1.0.0 1.0.2+dart2
dart_dev ^2.0.0
dependency_validator ^1.2.2
mockito ^4.0.0
over_react_test ^2.4.0
test ^1.0.0 1.6.3