redux_enhancement 1.0.5 copy "redux_enhancement: ^1.0.5" to clipboard
redux_enhancement: ^1.0.5 copied to clipboard

An objective approach for modular and easy-to-use redux convenience classes

example/lib/main.dart

import 'package:example/model/shop.dart';
import 'package:example/redux/address/address_actions.dart';
import 'package:example/redux/app/app_state.dart';
import 'package:example/redux/app/app_state_reducer.dart';
import 'package:example/redux/shop/shop_actions.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:redux/redux.dart';

void main() {
  Store<AppState> store = Store<AppState>(
    (state, action) => AppStateReducer().reduce(state, action) ?? state,
    initialState: AppState(),
  );

  runApp(
    MyApp(
      store: store,
    ),
  );
}

class MyApp extends StatelessWidget {
  final Store<AppState> store;

  MyApp({required this.store});

  @override
  Widget build(BuildContext context) {
    return StoreProvider(
      store: store,
      child: MaterialApp(
        title: 'Redux Enhancements',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(title: 'Flutter Demo Home Page'),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _name = 'Redux-Shop';
  String _shopStreet = 'Reductionstreet 42';

  @override
  void initState() {
    WidgetsBinding.instance?.addPostFrameCallback((_) {
      Store<AppState> store = StoreProvider.of<AppState>(context);
      store.dispatch(UpdateShopNameAction(_name));
      store.dispatch(ChangeStreetAction<Shop>(_shopStreet));
    });

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Container(
          constraints: BoxConstraints(maxWidth: 400),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              StoreConnector<AppState, Shop>(
                converter: (store) => store.state.shop,
                builder: (BuildContext context, Shop shop) {
                  return Padding(
                    padding: const EdgeInsets.only(bottom: 16.0),
                    child: Row(
                      children: [
                        Text(
                          '${shop.name}\n${shop.address.street}',
                          textScaleFactor: 1.5,
                        ),
                      ],
                    ),
                  );
                },
              ),
              TextFormField(
                initialValue: _name,
                onChanged: (value) => setState(() => _name = value),
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  labelText: 'Enter a new shop name',
                ),
              ),
              Container(height: 16),
              ElevatedButton.icon(
                onPressed: () {
                  StoreProvider.of<AppState>(context)
                      .dispatch(UpdateShopNameAction(_name));
                },
                icon: Icon(Icons.refresh),
                label: Text('Change shop name'),
              ),
              Container(height: 16),
              TextFormField(
                initialValue: _shopStreet,
                onChanged: (value) => setState(() => _shopStreet = value),
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  labelText: 'Enter a new shop street',
                ),
              ),
              Container(height: 16),
              ElevatedButton.icon(
                onPressed: () {
                  StoreProvider.of<AppState>(context)
                      .dispatch(ChangeStreetAction<Shop>(_shopStreet));
                },
                icon: Icon(Icons.refresh),
                label: Text('Change shop street'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
1
likes
120
pub points
24%
popularity

Publisher

unverified uploader

An objective approach for modular and easy-to-use redux convenience classes

Repository (GitLab)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

redux

More

Packages that depend on redux_enhancement