mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-07-15 05:12:05 +10:00
Merge pull request #246 from Specter242/codex/signal-ui-consistency
Unify signal indicator UI across RSSI and SNR
This commit is contained in:
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]
|
||||||
|
? 0
|
||||||
|
: snr >= snrLevels[1]
|
||||||
|
? 1
|
||||||
|
: snr >= snrLevels[2]
|
||||||
|
? 2
|
||||||
|
: snr >= snrLevels[3]
|
||||||
|
? 3
|
||||||
|
: 4;
|
||||||
|
final signalUi = signalUiForStrengthTier(tier);
|
||||||
|
|
||||||
if (snr >= snrLevels[0]) {
|
return SNRUi(signalUi.icon, signalUi.color, text);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class SNRIndicator extends StatefulWidget {
|
class SNRIndicator extends StatefulWidget {
|
||||||
|
|||||||
Reference in New Issue
Block a user