This commit is contained in:
2020-12-23 00:43:59 -05:00
parent 0fd880f57b
commit 86c845b49b
54 changed files with 3638 additions and 107 deletions

18
lib/store/actions.dart Normal file
View File

@@ -0,0 +1,18 @@
import 'package:flutter/material.dart';
import 'package:flutter_wisetronic/models/user.dart';
class UpdateContext {
final BuildContext context;
UpdateContext(this.context);
}
class UpdateLocale {
final Locale locale;
UpdateLocale(this.locale);
}
class UpdateCurrentUser {
final User user;
UpdateCurrentUser(this.user);
}

View File

@@ -0,0 +1,13 @@
import 'package:flutter_wisetronic/store/reducer/context_reducer.dart';
import 'package:flutter_wisetronic/store/reducer/locale_reducer.dart';
import 'package:flutter_wisetronic/store/reducer/user_reducer.dart';
import 'package:flutter_wisetronic/store/state/app_state.dart';
AppState appReducer(AppState state, action) {
return AppState(
context: contextReducer(state.context, action),
locale: localeReducer(state.locale, action),
user: userReducer(state.user, action),
);
}

View File

@@ -0,0 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_wisetronic/store/actions.dart';
import 'package:redux/redux.dart';
final contextReducer = combineReducers<BuildContext>([
TypedReducer<BuildContext, UpdateContext>(_updateContext)
]);
BuildContext _updateContext(BuildContext context, action) {
return action.context;
}

View File

@@ -0,0 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_wisetronic/store/actions.dart';
import 'package:redux/redux.dart';
final localeReducer = combineReducers<Locale>([
TypedReducer<Locale, UpdateLocale>(_updateLocale)
]);
Locale _updateLocale(Locale locale, action) {
return action.locale;
}

View File

@@ -0,0 +1,13 @@
import 'package:redux/redux.dart';
import 'package:flutter_wisetronic/models/user.dart';
import '../actions.dart';
final userReducer = combineReducers<User>([
TypedReducer<User, UpdateCurrentUser>(_updateCurrentUser)
]);
User _updateCurrentUser(User user, action) {
return action.user;
}

View File

@@ -0,0 +1,42 @@
import 'package:flutter/material.dart';
import 'package:flutter_wisetronic/models/user.dart';
@immutable
class AppState {
final BuildContext context;
final Locale locale;
final User user;
AppState({this.context, this.locale, this.user});
factory AppState.init() => AppState();
AppState copyWith({
BuildContext context,
Locale locale}) {
return AppState(
context: context ?? this.context,
locale: locale ?? this.locale,
user: user ?? this.user,
);
}
@override
int get hashCode =>
context.hashCode ^
locale.hashCode ^
user.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is AppState &&
context == other.context &&
locale == other.locale &&
user == other.user;
@override
String toString() =>
'AppState(context: $context, locale: $locale), user: $user';
}

9
lib/store/store.dart Normal file
View File

@@ -0,0 +1,9 @@
import 'package:flutter_wisetronic/store/reducer/app_reducer.dart';
import 'package:redux/redux.dart';
import 'state/app_state.dart';
final store = Store<AppState>(
appReducer,
initialState: AppState.init(),
);