parent
2f6b322136
commit
52dcc87b1c
@ -1,29 +1,25 @@ |
||||
import 'package:redux/redux.dart'; |
||||
import 'package:thesis_shop/models/product.dart'; |
||||
import 'package:thesis_shop/models/remote_resource.dart'; |
||||
|
||||
import '../actions/actions.dart'; |
||||
import '../state.dart'; |
||||
|
||||
final productReducer = combineReducers([ |
||||
TypedReducer<RemoteResource<List<Product>>, FetchProductsAction>( |
||||
fetchProducts), |
||||
TypedReducer<RemoteResource<List<Product>>, FetchProductsSucceededAction>( |
||||
productFetched), |
||||
TypedReducer<RemoteResource<List<Product>>, FetchProductsFailedAction>( |
||||
errorOccurred), |
||||
final productReducer = combineReducers<RemoteProducts>([ |
||||
TypedReducer<RemoteProducts, FetchProductsAction>(fetchProducts), |
||||
TypedReducer<RemoteProducts, FetchProductsSucceededAction>(productFetched), |
||||
TypedReducer<RemoteProducts, FetchProductsFailedAction>(errorOccurred), |
||||
]); |
||||
|
||||
RemoteResource<List<Product>> fetchProducts( |
||||
RemoteResource<List<Product>> state, |
||||
RemoteProducts fetchProducts( |
||||
RemoteProducts state, |
||||
FetchProductsAction action, |
||||
) => |
||||
const RemoteResource.loading(); |
||||
|
||||
RemoteResource<List<Product>> productFetched( |
||||
RemoteResource<List<Product>> state, |
||||
FetchProductsSucceededAction action) => |
||||
RemoteProducts productFetched( |
||||
RemoteProducts state, FetchProductsSucceededAction action) => |
||||
RemoteResource.finished(action.products); |
||||
|
||||
RemoteResource<List<Product>> errorOccurred(RemoteResource<List<Product>> state, |
||||
FetchProductsFailedAction action) => |
||||
RemoteProducts errorOccurred( |
||||
RemoteProducts state, FetchProductsFailedAction action) => |
||||
RemoteResource.error(action.errorMessage); |
||||
|
@ -1,31 +1,31 @@ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:thesis_shop/models/product.dart'; |
||||
import 'package:flutter_redux/flutter_redux.dart'; |
||||
import 'package:thesis_shop/redux/state.dart'; |
||||
import 'package:thesis_shop/widgets/user_switch.dart'; |
||||
|
||||
import 'cart_button_overlay.dart'; |
||||
import 'product_list.dart'; |
||||
|
||||
const _productPlaceholder = [ |
||||
Product(title: 'Bananen', price: 3), |
||||
Product(title: 'Äpfel', price: 2), |
||||
Product(title: 'Birnen', price: 2.5), |
||||
Product(title: 'Kirschen', price: 1.2), |
||||
]; |
||||
|
||||
class ProductListScreen extends StatelessWidget { |
||||
const ProductListScreen({Key? key}) : super(key: key); |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
const products = _productPlaceholder; |
||||
return Scaffold( |
||||
appBar: AppBar( |
||||
title: const Text('Thesis Shop'), |
||||
actions: [UserSwitch(isOn: true, onChanged: (_) {})], |
||||
), |
||||
body: const CartButtonOverlay( |
||||
body: StoreConnector<AppState, RemoteProducts>( |
||||
converter: (store) => store.state.remoteProductsWithDiscount, |
||||
builder: (context, remoteProducts) => remoteProducts.when( |
||||
finished: (products) => CartButtonOverlay( |
||||
child: ProductList(products: products), |
||||
), |
||||
error: (errorMessage) => Center(child: Text(errorMessage)), |
||||
loading: () => const Center(child: CircularProgressIndicator()), |
||||
), |
||||
), |
||||
); |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue