Tracking funkció fejlesztése
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:terepi_seged/pages/tracking/presentation/controllers/tracking_controller.dart';
|
||||
|
||||
import 'stat_cell.dart';
|
||||
|
||||
class LiveStatsPanel extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Obx(() {
|
||||
final ctrl = TrackingController.to;
|
||||
final isRec = ctrl.isRecording.value;
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 12),
|
||||
child: isRec
|
||||
? Column(children: [
|
||||
// Statisztika sor
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
StatCell(
|
||||
icon: Icons.timer_outlined,
|
||||
label: 'Idő',
|
||||
value: ctrl.elapsedFormatted.value,
|
||||
large: true),
|
||||
StatCell(
|
||||
icon: Icons.route,
|
||||
label: 'Távolság',
|
||||
value: _fmtDist(ctrl.sessionDistance.value)),
|
||||
StatCell(
|
||||
icon: Icons.location_on_outlined,
|
||||
label: 'Pontok',
|
||||
value: '${ctrl.livePointCount}'),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
// Vezérlők
|
||||
Row(children: [
|
||||
Expanded(
|
||||
child: OutlinedButton.icon(
|
||||
icon: Icon(
|
||||
ctrl.isPaused.value ? Icons.play_arrow : Icons.pause),
|
||||
label: Text(ctrl.isPaused.value ? 'Folytatás' : 'Szünet'),
|
||||
onPressed: ctrl.isPaused.value
|
||||
? ctrl.resumeRecording
|
||||
: ctrl.pauseRecording,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: FilledButton.icon(
|
||||
icon: const Icon(Icons.stop),
|
||||
label: const Text('Befejezés'),
|
||||
style: FilledButton.styleFrom(
|
||||
backgroundColor: Colors.red.shade700),
|
||||
onPressed: ctrl.stopRecording,
|
||||
),
|
||||
),
|
||||
]),
|
||||
])
|
||||
: FilledButton.icon(
|
||||
icon: const Icon(Icons.fiber_manual_record),
|
||||
label: const Text('Rögzítés indítása'),
|
||||
style: FilledButton.styleFrom(
|
||||
backgroundColor: Colors.red.shade700),
|
||||
onPressed: () => _showStartDialog(context),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
void _showStartDialog(BuildContext context) {
|
||||
final nameCtrl = TextEditingController(
|
||||
text: 'Track ${DateTime.now().toString().substring(5, 16)}',
|
||||
);
|
||||
Get.dialog(AlertDialog(
|
||||
title: const Text('Rögzítés indítása'),
|
||||
content: TextField(
|
||||
controller: nameCtrl,
|
||||
autofocus: true,
|
||||
decoration: const InputDecoration(
|
||||
labelText: 'Track neve',
|
||||
border: OutlineInputBorder(),
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(onPressed: Get.back, child: const Text('Mégse')),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
TrackingController.to.startRecording();
|
||||
},
|
||||
child: const Text('Indítás'),
|
||||
),
|
||||
],
|
||||
));
|
||||
}
|
||||
|
||||
String _fmtDist(double m) => m < 1000
|
||||
? '${m.toStringAsFixed(0)} m'
|
||||
: '${(m / 1000).toStringAsFixed(2)} km';
|
||||
}
|
||||
Reference in New Issue
Block a user