You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
7.9 KiB
208 lines
7.9 KiB
import 'package:counters/counters.dart'; |
|
import 'package:counters/datbase.dart'; |
|
import 'package:counters/value.dart'; |
|
import 'package:datetime_picker_formfield/datetime_picker_formfield.dart'; |
|
import 'package:flutter/material.dart'; |
|
import 'package:flutter/services.dart'; |
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
|
import 'package:intl/intl.dart'; |
|
|
|
class NewValuePage extends StatelessWidget { |
|
NewValuePage({super.key, required this.counter}); |
|
|
|
factory NewValuePage.forCounter({required Counter counter}) { |
|
switch (counter.counterType) { |
|
case CounterType.coldWater: |
|
return NewValuePageWithOneRate(counter: counter); |
|
case CounterType.hotWater: |
|
return NewValuePageWithOneRate(counter: counter); |
|
case CounterType.gas: |
|
return NewValuePageWithOneRate(counter: counter); |
|
case CounterType.electrisity1rates: |
|
return NewValuePageWithOneRate(counter: counter); |
|
case CounterType.electrisity2rates: |
|
return NewValuePageWithTwoRates(counter: counter); |
|
case CounterType.electrisity3rates: |
|
return NewValuePageWithThreeRates(counter: counter); |
|
} |
|
} |
|
|
|
final Counter counter; |
|
final dataFormat = DateFormat("dd-MM-yyyy"); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Scaffold( |
|
appBar: AppBar( |
|
backgroundColor: Theme.of(context).colorScheme.inversePrimary, |
|
title: Text(AppLocalizations.of(context)!.new_value_title)), |
|
body: SizedBox.shrink(), |
|
); |
|
} |
|
} |
|
|
|
class NewValuePageWithOneRate extends NewValuePage { |
|
final valueController = TextEditingController(); |
|
final dateController = TextEditingController(); |
|
NewValuePageWithOneRate({super.key, required super.counter}); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Scaffold( |
|
appBar: AppBar( |
|
backgroundColor: Theme.of(context).colorScheme.inversePrimary, |
|
title: Text(AppLocalizations.of(context)!.new_value_title)), |
|
body: Padding( |
|
padding: const EdgeInsets.all(8.0), |
|
child: Center( |
|
child: Column( |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
children: [ |
|
DateTimeField( |
|
format: dataFormat, |
|
initialValue: DateTime.now(), |
|
controller: dateController, |
|
onShowPicker: (context, currentValue) async { |
|
final date = await showDatePicker( |
|
context: context, |
|
initialDate: currentValue ?? DateTime.now(), |
|
firstDate: DateTime(2000), |
|
lastDate: DateTime(2100), |
|
); |
|
return date; |
|
}, |
|
), |
|
const SizedBox(height: 20), |
|
TextField( |
|
controller: valueController, |
|
inputFormatters: [ |
|
FilteringTextInputFormatter.allow(RegExp(r'(^-?\d*\.?\d*)')) |
|
], |
|
decoration: InputDecoration( |
|
label: |
|
Text(AppLocalizations.of(context)!.new_value_title), |
|
//hintStyle: const TextStyle(color: Colors.blue), |
|
hintText: '0.0', |
|
suffixText: |
|
counter.counterType.getUnits().getLabel(context))), |
|
const SizedBox(height: 50), |
|
TextButton( |
|
onPressed: () { |
|
DBProvider.db |
|
.newValue(Value( |
|
counterId: counter.id!, |
|
date: dataFormat.parse(dateController.text).toUtc(), |
|
rate1Id: 0, |
|
value1: |
|
double.tryParse(valueController.text) ?? 0.0, |
|
value2: 0, |
|
value3: 0)) |
|
.then((value) => Navigator.pop(context)); |
|
}, |
|
child: Text( |
|
AppLocalizations.of(context)!.add_new_address_button)) |
|
], |
|
), |
|
), |
|
), |
|
); |
|
} |
|
} |
|
|
|
class NewValuePageWithTwoRates extends NewValuePage { |
|
final value1Controller = TextEditingController(); |
|
final value2Controller = TextEditingController(); |
|
final dateController = TextEditingController(); |
|
NewValuePageWithTwoRates({super.key, required super.counter}); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Scaffold( |
|
appBar: AppBar( |
|
backgroundColor: Theme.of(context).colorScheme.inversePrimary, |
|
title: Text(AppLocalizations.of(context)!.new_value_title)), |
|
body: Padding( |
|
padding: const EdgeInsets.all(8.0), |
|
child: Center( |
|
child: Column( |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
children: [ |
|
DateTimeField( |
|
format: DateFormat("dd-MM-yyyy"), |
|
initialValue: DateTime.now(), |
|
controller: dateController, |
|
onShowPicker: (context, currentValue) async { |
|
final date = await showDatePicker( |
|
context: context, |
|
initialDate: currentValue ?? DateTime.now(), |
|
firstDate: DateTime(2000), |
|
lastDate: DateTime(2100), |
|
); |
|
return date; |
|
}, |
|
), |
|
const SizedBox(height: 20), |
|
TextField( |
|
controller: value1Controller, |
|
inputFormatters: [ |
|
FilteringTextInputFormatter.allow(RegExp(r'(^-?\d*\.?\d*)')) |
|
], |
|
decoration: InputDecoration( |
|
label: |
|
Text(AppLocalizations.of(context)!.new_value_title), |
|
//hintStyle: const TextStyle(color: Colors.blue), |
|
hintText: '0.0', |
|
suffixText: |
|
counter.counterType.getUnits().getLabel(context))), |
|
TextField( |
|
controller: value2Controller, |
|
inputFormatters: [ |
|
FilteringTextInputFormatter.allow(RegExp(r'(^-?\d*\.?\d*)')) |
|
], |
|
decoration: InputDecoration( |
|
label: |
|
Text(AppLocalizations.of(context)!.new_value_title), |
|
//hintStyle: const TextStyle(color: Colors.blue), |
|
hintText: '0.0', |
|
suffixText: |
|
counter.counterType.getUnits().getLabel(context))), |
|
const SizedBox(height: 50), |
|
TextButton( |
|
onPressed: () { |
|
DBProvider.db |
|
.newValue(Value( |
|
counterId: counter.id!, |
|
date: dataFormat.parse(dateController.text).toUtc(), |
|
rate1Id: 0, |
|
value1: |
|
double.tryParse(value1Controller.text) ?? 0.0, |
|
value2: |
|
double.tryParse(value2Controller.text) ?? 0.0, |
|
value3: 0)) |
|
.then((value) => Navigator.pop(context)); |
|
}, |
|
child: Text( |
|
AppLocalizations.of(context)!.add_new_address_button)) |
|
], |
|
), |
|
), |
|
), |
|
); |
|
} |
|
} |
|
|
|
class NewValuePageWithThreeRates extends NewValuePage { |
|
NewValuePageWithThreeRates({super.key, required super.counter}); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Scaffold( |
|
appBar: AppBar( |
|
backgroundColor: Theme.of(context).colorScheme.inversePrimary, |
|
title: Text(AppLocalizations.of(context)!.new_value_title)), |
|
body: SizedBox.shrink(), |
|
); |
|
} |
|
}
|
|
|