Currency formatting
This commit is contained in:
parent
c1bce6210f
commit
f82a98f92a
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:invoiceninja/ui/app/actions_menu_button.dart';
|
import 'package:invoiceninja/ui/app/actions_menu_button.dart';
|
||||||
|
|
@ -42,7 +43,7 @@ class _ProductEditState extends State<ProductEdit> {
|
||||||
var product = widget.viewModel.product;
|
var product = widget.viewModel.product;
|
||||||
_productKeyController.text = product.productKey;
|
_productKeyController.text = product.productKey;
|
||||||
_notesController.text = product.notes;
|
_notesController.text = product.notes;
|
||||||
_costController.text = product.cost?.toStringAsFixed(2) ?? '';
|
_costController.text = formatNumber(product.cost, widget.viewModel.state, formatNumberType: FormatNumberType.input);
|
||||||
|
|
||||||
_controllers.forEach((controller) => controller.addListener(_onChanged));
|
_controllers.forEach((controller) => controller.addListener(_onChanged));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class ProductEditScreen extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class ProductEditVM {
|
class ProductEditVM {
|
||||||
|
final AppState state;
|
||||||
final ProductEntity product;
|
final ProductEntity product;
|
||||||
final Function(ProductEntity) onChanged;
|
final Function(ProductEntity) onChanged;
|
||||||
final Function(BuildContext) onSavePressed;
|
final Function(BuildContext) onSavePressed;
|
||||||
|
|
@ -41,6 +42,7 @@ class ProductEditVM {
|
||||||
final bool isDirty;
|
final bool isDirty;
|
||||||
|
|
||||||
ProductEditVM({
|
ProductEditVM({
|
||||||
|
@required this.state,
|
||||||
@required this.product,
|
@required this.product,
|
||||||
@required this.onChanged,
|
@required this.onChanged,
|
||||||
@required this.onSavePressed,
|
@required this.onSavePressed,
|
||||||
|
|
@ -54,6 +56,7 @@ class ProductEditVM {
|
||||||
final product = store.state.productUIState.selected;
|
final product = store.state.productUIState.selected;
|
||||||
|
|
||||||
return ProductEditVM(
|
return ProductEditVM(
|
||||||
|
state: store.state,
|
||||||
isLoading: store.state.isLoading,
|
isLoading: store.state.isLoading,
|
||||||
isDirty: product.isNew(),
|
isDirty: product.isNew(),
|
||||||
product: product,
|
product: product,
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:invoiceninja/data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
|
|
@ -6,6 +8,7 @@ import 'package:invoiceninja/ui/app/dismissible_entity.dart';
|
||||||
import '../app/entity_state_label.dart';
|
import '../app/entity_state_label.dart';
|
||||||
|
|
||||||
class ProductItem extends StatelessWidget {
|
class ProductItem extends StatelessWidget {
|
||||||
|
final AppState state;
|
||||||
final DismissDirectionCallback onDismissed;
|
final DismissDirectionCallback onDismissed;
|
||||||
final GestureTapCallback onTap;
|
final GestureTapCallback onTap;
|
||||||
//final ValueChanged<bool> onCheckboxChanged;
|
//final ValueChanged<bool> onCheckboxChanged;
|
||||||
|
|
@ -14,6 +17,7 @@ class ProductItem extends StatelessWidget {
|
||||||
static final productItemKey = (int id) => Key('__product_item_${id}__');
|
static final productItemKey = (int id) => Key('__product_item_${id}__');
|
||||||
|
|
||||||
ProductItem({
|
ProductItem({
|
||||||
|
@required this.state,
|
||||||
@required this.onDismissed,
|
@required this.onDismissed,
|
||||||
@required this.onTap,
|
@required this.onTap,
|
||||||
//@required this.onCheckboxChanged,
|
//@required this.onCheckboxChanged,
|
||||||
|
|
@ -65,7 +69,7 @@ class ProductItem extends StatelessWidget {
|
||||||
EntityStateLabel(product),
|
EntityStateLabel(product),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
trailing: Text(product.cost.toStringAsFixed(2),
|
trailing: Text(formatNumber(product.cost, state),
|
||||||
style: Theme.of(context).textTheme.title),
|
style: Theme.of(context).textTheme.title),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class ProductList extends StatelessWidget {
|
||||||
var product = viewModel.productMap[productId];
|
var product = viewModel.productMap[productId];
|
||||||
return Column(children: <Widget>[
|
return Column(children: <Widget>[
|
||||||
ProductItem(
|
ProductItem(
|
||||||
|
state: viewModel.state,
|
||||||
product: product,
|
product: product,
|
||||||
onDismissed: (DismissDirection direction) =>
|
onDismissed: (DismissDirection direction) =>
|
||||||
viewModel.onDismissed(context, product, direction),
|
viewModel.onDismissed(context, product, direction),
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ class ProductListBuilder extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class ProductListVM {
|
class ProductListVM {
|
||||||
|
final AppState state;
|
||||||
final List<int> productList;
|
final List<int> productList;
|
||||||
final BuiltMap<int, ProductEntity> productMap;
|
final BuiltMap<int, ProductEntity> productMap;
|
||||||
final bool isLoading;
|
final bool isLoading;
|
||||||
|
|
@ -40,6 +41,7 @@ class ProductListVM {
|
||||||
final Function(BuildContext) onRefreshed;
|
final Function(BuildContext) onRefreshed;
|
||||||
|
|
||||||
ProductListVM({
|
ProductListVM({
|
||||||
|
@required this.state,
|
||||||
@required this.productList,
|
@required this.productList,
|
||||||
@required this.productMap,
|
@required this.productMap,
|
||||||
@required this.isLoading,
|
@required this.isLoading,
|
||||||
|
|
@ -63,6 +65,7 @@ class ProductListVM {
|
||||||
}
|
}
|
||||||
|
|
||||||
return ProductListVM(
|
return ProductListVM(
|
||||||
|
state: store.state,
|
||||||
productList: memoizedProductList(store.state.productState.map, store.state.productState.list, store.state.productListState),
|
productList: memoizedProductList(store.state.productState.map, store.state.productState.list, store.state.productListState),
|
||||||
productMap: store.state.productState.map,
|
productMap: store.state.productState.map,
|
||||||
isLoading: store.state.isLoading,
|
isLoading: store.state.isLoading,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue