Merge pull request #246 from Specter242/codex/signal-ui-consistency

Unify signal indicator UI across RSSI and SNR
chore/offband-rebrand
zjs81 5 months ago committed by GitHub
commit 79b17b53a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import '../l10n/l10n.dart'; import '../l10n/l10n.dart';
import 'signal_ui.dart';
/// A reusable tile widget for displaying a MeshCore device in a list /// A reusable tile widget for displaying a MeshCore device in a list
class DeviceTile extends StatelessWidget { class DeviceTile extends StatelessWidget {
@ -33,28 +34,25 @@ class DeviceTile extends StatelessWidget {
} }
Widget _buildSignalIcon(int rssi) { Widget _buildSignalIcon(int rssi) {
IconData icon; final tier = rssi >= -60
Color color; ? 0
: rssi >= -70
if (rssi >= -60) { ? 1
icon = Icons.signal_cellular_4_bar; : rssi >= -80
color = Colors.green; ? 2
} else if (rssi >= -70) { : rssi >= -90
icon = Icons.signal_cellular_alt; ? 3
color = Colors.lightGreen; : 4;
} else if (rssi >= -80) { final signalUi = signalUiForStrengthTier(tier);
icon = Icons.signal_cellular_alt_2_bar;
color = Colors.orange;
} else {
icon = Icons.signal_cellular_alt_1_bar;
color = Colors.red;
}
return Column( return Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Icon(icon, color: color), Icon(signalUi.icon, color: signalUi.color),
Text('$rssi dBm', style: TextStyle(fontSize: 10, color: color)), Text(
'$rssi dBm',
style: TextStyle(fontSize: 10, color: signalUi.color),
),
], ],
); );
} }

@ -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 'package:flutter/material.dart';
import '../connector/meshcore_connector.dart'; import '../connector/meshcore_connector.dart';
import '../l10n/l10n.dart'; import '../l10n/l10n.dart';
import 'signal_ui.dart';
class SNRUi { class SNRUi {
final IconData icon; final IconData icon;
@ -38,28 +39,19 @@ SNRUi snrUiFromSNR(double? snr, int? spreadingFactor) {
final snrLevels = getSNRfromSF(spreadingFactor); final snrLevels = getSNRfromSF(spreadingFactor);
IconData icon;
Color color;
String text = '${snr.toStringAsFixed(1)} dB'; String text = '${snr.toStringAsFixed(1)} dB';
final tier = snr >= snrLevels[0]
if (snr >= snrLevels[0]) { ? 0
icon = Icons.signal_cellular_alt; : snr >= snrLevels[1]
color = Colors.green; ? 1
} else if (snr >= snrLevels[1]) { : snr >= snrLevels[2]
icon = Icons.signal_cellular_alt; ? 2
color = Colors.lightGreen; : snr >= snrLevels[3]
} else if (snr >= snrLevels[2]) { ? 3
icon = Icons.signal_cellular_alt; : 4;
color = Colors.yellow; final signalUi = signalUiForStrengthTier(tier);
} else if (snr >= snrLevels[3]) {
icon = Icons.signal_cellular_alt_2_bar; return SNRUi(signalUi.icon, signalUi.color, text);
color = Colors.orange;
} else {
icon = Icons.signal_cellular_alt_1_bar;
color = Colors.red;
}
return SNRUi(icon, color, text);
} }
class SNRIndicator extends StatefulWidget { class SNRIndicator extends StatefulWidget {

Loading…
Cancel
Save

Powered by TurnKey Linux.