mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-04-20 22:13:48 +00:00
Merge pull request #246 from Specter242/codex/signal-ui-consistency
Unify signal indicator UI across RSSI and SNR
This commit is contained in:
commit
79b17b53a0
4 changed files with 66 additions and 38 deletions
BIN
docs/screenshots/signal-ui-consistency.png
Normal file
BIN
docs/screenshots/signal-ui-consistency.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 104 KiB |
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import '../l10n/l10n.dart';
|
||||
import 'signal_ui.dart';
|
||||
|
||||
/// A reusable tile widget for displaying a MeshCore device in a list
|
||||
class DeviceTile extends StatelessWidget {
|
||||
|
|
@ -33,28 +34,25 @@ class DeviceTile extends StatelessWidget {
|
|||
}
|
||||
|
||||
Widget _buildSignalIcon(int rssi) {
|
||||
IconData icon;
|
||||
Color color;
|
||||
|
||||
if (rssi >= -60) {
|
||||
icon = Icons.signal_cellular_4_bar;
|
||||
color = Colors.green;
|
||||
} else if (rssi >= -70) {
|
||||
icon = Icons.signal_cellular_alt;
|
||||
color = Colors.lightGreen;
|
||||
} else if (rssi >= -80) {
|
||||
icon = Icons.signal_cellular_alt_2_bar;
|
||||
color = Colors.orange;
|
||||
} else {
|
||||
icon = Icons.signal_cellular_alt_1_bar;
|
||||
color = Colors.red;
|
||||
}
|
||||
final tier = rssi >= -60
|
||||
? 0
|
||||
: rssi >= -70
|
||||
? 1
|
||||
: rssi >= -80
|
||||
? 2
|
||||
: rssi >= -90
|
||||
? 3
|
||||
: 4;
|
||||
final signalUi = signalUiForStrengthTier(tier);
|
||||
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(icon, color: color),
|
||||
Text('$rssi dBm', style: TextStyle(fontSize: 10, color: color)),
|
||||
Icon(signalUi.icon, color: signalUi.color),
|
||||
Text(
|
||||
'$rssi dBm',
|
||||
style: TextStyle(fontSize: 10, color: signalUi.color),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
|
|
|||
38
lib/widgets/signal_ui.dart
Normal file
38
lib/widgets/signal_ui.dart
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
class SignalUi {
|
||||
final IconData icon;
|
||||
final Color color;
|
||||
|
||||
const SignalUi({required this.icon, required this.color});
|
||||
}
|
||||
|
||||
SignalUi signalUiForStrengthTier(int tier) {
|
||||
switch (tier) {
|
||||
case 0:
|
||||
return const SignalUi(
|
||||
icon: Icons.signal_cellular_4_bar,
|
||||
color: Colors.green,
|
||||
);
|
||||
case 1:
|
||||
return const SignalUi(
|
||||
icon: Icons.signal_cellular_alt,
|
||||
color: Colors.lightGreen,
|
||||
);
|
||||
case 2:
|
||||
return const SignalUi(
|
||||
icon: Icons.signal_cellular_alt_2_bar,
|
||||
color: Colors.amber,
|
||||
);
|
||||
case 3:
|
||||
return const SignalUi(
|
||||
icon: Icons.signal_cellular_alt_1_bar,
|
||||
color: Colors.orange,
|
||||
);
|
||||
default:
|
||||
return const SignalUi(
|
||||
icon: Icons.signal_cellular_alt_1_bar,
|
||||
color: Colors.red,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import '../connector/meshcore_connector.dart';
|
||||
import '../l10n/l10n.dart';
|
||||
import 'signal_ui.dart';
|
||||
|
||||
class SNRUi {
|
||||
final IconData icon;
|
||||
|
|
@ -38,28 +39,19 @@ SNRUi snrUiFromSNR(double? snr, int? spreadingFactor) {
|
|||
|
||||
final snrLevels = getSNRfromSF(spreadingFactor);
|
||||
|
||||
IconData icon;
|
||||
Color color;
|
||||
String text = '${snr.toStringAsFixed(1)} dB';
|
||||
final tier = snr >= snrLevels[0]
|
||||
? 0
|
||||
: snr >= snrLevels[1]
|
||||
? 1
|
||||
: snr >= snrLevels[2]
|
||||
? 2
|
||||
: snr >= snrLevels[3]
|
||||
? 3
|
||||
: 4;
|
||||
final signalUi = signalUiForStrengthTier(tier);
|
||||
|
||||
if (snr >= snrLevels[0]) {
|
||||
icon = Icons.signal_cellular_alt;
|
||||
color = Colors.green;
|
||||
} else if (snr >= snrLevels[1]) {
|
||||
icon = Icons.signal_cellular_alt;
|
||||
color = Colors.lightGreen;
|
||||
} else if (snr >= snrLevels[2]) {
|
||||
icon = Icons.signal_cellular_alt;
|
||||
color = Colors.yellow;
|
||||
} else if (snr >= snrLevels[3]) {
|
||||
icon = Icons.signal_cellular_alt_2_bar;
|
||||
color = Colors.orange;
|
||||
} else {
|
||||
icon = Icons.signal_cellular_alt_1_bar;
|
||||
color = Colors.red;
|
||||
}
|
||||
|
||||
return SNRUi(icon, color, text);
|
||||
return SNRUi(signalUi.icon, signalUi.color, text);
|
||||
}
|
||||
|
||||
class SNRIndicator extends StatefulWidget {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue