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.

120 lines
3.9 KiB

7 months ago
import 'package:counters/counters.dart';
import 'package:counters/datbase.dart';
import 'package:counters/new_value_page.dart';
import 'package:counters/value.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:intl/intl.dart';
class ValuesPage extends StatefulWidget {
const ValuesPage({super.key, required this.counter});
final Counter counter;
@override
State<ValuesPage> createState() => _ValuesPageState();
}
class _ValuesPageState extends State<ValuesPage> {
@override
Widget build(BuildContext context) {
var values = DBProvider.db.getValuesOfCounter(widget.counter);
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(AppLocalizations.of(context)!.app_title)),
body: Center(
child: FutureBuilder(
future: values,
builder: (context, snapshot) {
if (snapshot.hasData && snapshot.data!.isNotEmpty) {
return ValuesListView(
counter: widget.counter,
values: snapshot.data!.reversed.toList());
}
return Text(AppLocalizations.of(context)!.empty_values_list);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
NewValuePage.forCounter(counter: widget.counter)))
.then((_) => setState(() {}));
},
tooltip: AppLocalizations.of(context)!.add_new_counter_tooltip,
child: const Icon(Icons.add),
));
}
}
class ValuesListView extends StatelessWidget {
ValuesListView({
super.key,
required this.values,
required this.counter,
});
final List<Value> values;
final Counter counter;
final dataFormat = DateFormat("dd-MM-yyyy");
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: values.length,
itemBuilder: (context, index) {
var units = counter.counterType.getUnits().getLabel(context);
var valueWidgets = List<Widget>.empty(growable: true);
valueWidgets.add(Text("T1 - ${values[index].value1} $units"));
var sum = values[index].value1;
var value = values[index];
if (value.value2 != null &&
counter.counterType.id > CounterType.electrisity1rates.id) {
valueWidgets.add(Text("T2 - ${value.value2} $units"));
sum += value.value2!;
}
if (value.value3 != null &&
counter.counterType.id > CounterType.electrisity2rates.id) {
valueWidgets.add(Text("T3 - ${value.value3} $units"));
sum += value.value3!;
}
if (valueWidgets.length > 1) {
valueWidgets.add(Text("Итого - $sum $units"));
}
return Padding(
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
child: Card(
child: Align(
alignment: Alignment.centerLeft,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Text(dataFormat.format(value.date.toLocal())),
Text(' ${AppLocalizations.of(context)!.values}:'),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: valueWidgets,
)
],
),
),
)),
);
},
);
}
}