Skip to content

Commit

Permalink
use combineReducer in reduce
Browse files Browse the repository at this point in the history
  • Loading branch information
hyjfine committed Dec 9, 2018
1 parent cbcf310 commit 3012d39
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 52 deletions.
4 changes: 2 additions & 2 deletions lib/redux/reducers/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ class StoreContainer {
}

AppState reduxReducer(AppState state, action) => AppState(
todoList: TodoListReducer().reducer(state.todoList, action),
todoDetail: TodoDetailReducer().reducer(state.todoDetail, action),
todoList: todoListReducer(state.todoList, action),
todoDetail: todoDetailReducer(state.todoDetail, action),
);

Store reduxStore() => Store<AppState>(reduxReducer,
Expand Down
30 changes: 15 additions & 15 deletions lib/redux/reducers/todo_detail.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter_app_redux/models/todo.dart';
import 'package:flutter_app_redux/redux/actions/main.dart';
import 'package:flutter_app_redux/redux/actions/todo.dart';
import 'package:meta/meta.dart';
import 'package:redux/redux.dart';

@immutable
class TodoDetailState {
Expand All @@ -20,18 +20,18 @@ class TodoDetailState {
todo = Todo();
}

class TodoDetailReducer {
TodoDetailState reducer(TodoDetailState state, ActionType action) {
switch (action.runtimeType) {
case TodoDetailRequestAction:
return state.copyWith(isLoading: true);
case TodoDetailSuccessAction:
return state.copyWith(isLoading: false, todo: action.payload);
case TodoDetailFailureAction:
return state.copyWith(isLoading: false);
final todoDetailReducer = combineReducers<TodoDetailState>([
TypedReducer<TodoDetailState, TodoDetailRequestAction>(_onTodoDetailRequest),
TypedReducer<TodoDetailState, TodoDetailSuccessAction>(_onTodoDetailSuccess),
TypedReducer<TodoDetailState, TodoDetailFailureAction>(_onTodoDetailFailure),
]);

default:
return state;
}
}
}
TodoDetailState _onTodoDetailRequest(
TodoDetailState state, TodoDetailRequestAction action) =>
state.copyWith(isLoading: true);
TodoDetailState _onTodoDetailSuccess(
TodoDetailState state, TodoDetailSuccessAction action) =>
state.copyWith(isLoading: false, todo: action.payload);
TodoDetailState _onTodoDetailFailure(
TodoDetailState state, TodoDetailFailureAction action) =>
state.copyWith(isLoading: false);
77 changes: 42 additions & 35 deletions lib/redux/reducers/todo_list.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter_app_redux/models/todo.dart';
import 'package:flutter_app_redux/redux/actions/main.dart';
import 'package:flutter_app_redux/redux/actions/todo.dart';
import 'package:meta/meta.dart';
import 'package:redux/redux.dart';

@immutable
class TodoListState {
Expand All @@ -24,43 +24,50 @@ class TodoListState {
todoList = [];
}

class TodoListReducer {
TodoListState reducer(TodoListState state, ActionType action) {
switch (action.runtimeType) {
case TodoListRequestAction:
return state.copyWith(isLoading: true);
final todoListReducer = combineReducers<TodoListState>([
TypedReducer<TodoListState, TodoListRequestAction>(_onTodoListRequest),
TypedReducer<TodoListState, TodoListSuccessAction>(_onTodoListSuccess),
TypedReducer<TodoListState, TodoListFailureAction>(_onTodoListFailure),
TypedReducer<TodoListState, UpdateTodoListAction>(_onTodoListUpdate),
TypedReducer<TodoListState, TodoPostRequestAction>(_onTodoListPostRequest),
TypedReducer<TodoListState, TodoPostSuccessAction>(_onTodoListPostSuccess),
TypedReducer<TodoListState, TodoDeleteSuccessAction>(
_onTodoListDeleteSuccess),
]);

case TodoListSuccessAction:
var st =
state.copyWith(isLoading: false, todoList: action.payload.data);
return st;
TodoListState _onTodoListRequest(
TodoListState state, TodoListRequestAction action) =>
state.copyWith(isLoading: true);
TodoListState _onTodoListSuccess(
TodoListState state, TodoListSuccessAction action) =>
state.copyWith(isLoading: false, todoList: action.payload.data);
TodoListState _onTodoListFailure(
TodoListState state, TodoListFailureAction action) =>
state.copyWith(isLoading: false);

case TodoListFailureAction:
return state.copyWith(isLoading: false);

case UpdateTodoListAction:
List<Todo> list = [];
list.addAll(state.todoList);

list.firstWhere((item) => item.id == action.payload.id).complete =
action.payload.complete;
return state.copyWith(todoList: list, isModify: !state.isModify);

case TodoPostRequestAction:
return state.copyWith(isLoading: true);
TodoListState _onTodoListUpdate(
TodoListState state, UpdateTodoListAction action) {
List<Todo> list = [];
list.addAll(state.todoList);
list.firstWhere((item) => item.id == action.payload.id).complete =
action.payload.complete;
return state.copyWith(todoList: list, isModify: !state.isModify);
}

case TodoPostSuccessAction:
var list = state.todoList;
list.add(action.payload);
return state.copyWith(todoList: list, isLoading: false);
TodoListState _onTodoListPostRequest(
TodoListState state, TodoPostRequestAction action) =>
state.copyWith(isLoading: true);

case TodoDeleteSuccessAction:
var list = state.todoList;
list.removeWhere((item) => item.id == action.payload.id);
return state.copyWith(todoList: list);
TodoListState _onTodoListPostSuccess(
TodoListState state, TodoPostSuccessAction action) {
var list = state.todoList;
list.add(action.payload);
return state.copyWith(isLoading: false, todoList: list);
}

default:
return state;
}
}
TodoListState _onTodoListDeleteSuccess(
TodoListState state, TodoDeleteSuccessAction action) {
var list = state.todoList;
list.removeWhere((item) => item.id == action.payload.id);
return state.copyWith(todoList: list);
}

0 comments on commit 3012d39

Please sign in to comment.