Can save expenses to local list
This commit is contained in:
@ -10,9 +10,11 @@ import 'package:moneymgr_mobile/utils/extensions.dart';
|
||||
import 'package:moneymgr_mobile/utils/time_utils.dart';
|
||||
import 'package:moneymgr_mobile/widgets/pdf_viewer.dart';
|
||||
|
||||
import '../utils/hooks.dart';
|
||||
|
||||
class ExpenseEditor extends HookConsumerWidget {
|
||||
final Uint8List file;
|
||||
final Function(BaseExpenseInfo) onFinished;
|
||||
final Future<void> Function(BaseExpenseInfo) onFinished;
|
||||
final Function()? onRescan;
|
||||
|
||||
const ExpenseEditor({
|
||||
@ -30,6 +32,8 @@ class ExpenseEditor extends HookConsumerWidget {
|
||||
final costController = useTextEditingController();
|
||||
final timeController = useState(DateTime.now());
|
||||
|
||||
final (:pending, :snapshot, :hasError) = useAsyncTask();
|
||||
|
||||
// Pick a new date
|
||||
handlePickDate() async {
|
||||
final date = await showDatePicker(
|
||||
@ -48,10 +52,10 @@ class ExpenseEditor extends HookConsumerWidget {
|
||||
return;
|
||||
}
|
||||
|
||||
onFinished(
|
||||
pending.value = onFinished(
|
||||
BaseExpenseInfo(
|
||||
label: labelController.text,
|
||||
cost: int.tryParse(costController.text) ?? 0,
|
||||
cost: double.tryParse(costController.text) ?? 0,
|
||||
time: timeController.value,
|
||||
),
|
||||
);
|
||||
@ -79,7 +83,13 @@ class ExpenseEditor extends HookConsumerWidget {
|
||||
),
|
||||
|
||||
// Submit
|
||||
IconButton(onPressed: handleSubmit, icon: Icon(Icons.save)),
|
||||
snapshot.connectionState == ConnectionState.waiting
|
||||
? CircularProgressIndicator()
|
||||
: IconButton(
|
||||
onPressed: handleSubmit,
|
||||
icon: Icon(Icons.save),
|
||||
color: hasError ? Colors.red : null,
|
||||
),
|
||||
],
|
||||
),
|
||||
body: Column(
|
||||
@ -94,7 +104,10 @@ class ExpenseEditor extends HookConsumerWidget {
|
||||
// Cost
|
||||
TextField(
|
||||
controller: costController,
|
||||
keyboardType: TextInputType.number,
|
||||
keyboardType: TextInputType.numberWithOptions(
|
||||
decimal: true,
|
||||
signed: false,
|
||||
),
|
||||
decoration: const InputDecoration(labelText: 'Cost'),
|
||||
textInputAction: TextInputAction.done,
|
||||
),
|
||||
|
Reference in New Issue
Block a user