From c0f0c585180250936350421cdd8aafc4f5cf1392 Mon Sep 17 00:00:00 2001 From: zjs81 Date: Sun, 11 Jan 2026 18:08:44 -0700 Subject: [PATCH] Refactor radio settings to use nullable types and update command generation logic for improved safety --- lib/screens/repeater_settings_screen.dart | 31 ++++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/lib/screens/repeater_settings_screen.dart b/lib/screens/repeater_settings_screen.dart index 02028ea6..79da459f 100644 --- a/lib/screens/repeater_settings_screen.dart +++ b/lib/screens/repeater_settings_screen.dart @@ -46,9 +46,9 @@ class _RepeaterSettingsScreenState extends State { // Radio settings final TextEditingController _freqController = TextEditingController(); final TextEditingController _txPowerController = TextEditingController(); - int _bandwidth = 125000; - int _spreadingFactor = 9; - int _codingRate = 7; + int? _bandwidth; + int? _spreadingFactor; + int? _codingRate; // Location settings final TextEditingController _latController = TextEditingController(); @@ -56,7 +56,7 @@ class _RepeaterSettingsScreenState extends State { // Feature toggles bool _repeatEnabled = true; - bool _allowReadOnly = false; + bool _allowReadOnly = true; bool _privacyMode = false; // Advertisement settings @@ -177,8 +177,8 @@ class _RepeaterSettingsScreenState extends State { if (bw != null) { _bandwidth = (bw * 1000).toInt(); appLog.info('Bandwidth Hz: $_bandwidth', tag: 'RadioSettings'); - if (!_bandwidthOptions.contains(_bandwidth)) { - _bandwidthOptions.add(_bandwidth); + if (_bandwidth != null && !_bandwidthOptions.contains(_bandwidth)) { + _bandwidthOptions.add(_bandwidth!); _bandwidthOptions.sort(); } } @@ -544,9 +544,16 @@ class _RepeaterSettingsScreenState extends State { } // Radio parameters - final freqMHz = double.tryParse(_freqController.text) ?? 915.0; - final bwKHz = _bandwidth / 1000; - commands.add('set radio ${freqMHz.toStringAsFixed(1)} $bwKHz $_spreadingFactor $_codingRate'); + if (_freqController.text.isNotEmpty && + _bandwidth != null && + _spreadingFactor != null && + _codingRate != null) { + final freqMHz = double.tryParse(_freqController.text); + if (freqMHz != null) { + final bwKHz = _bandwidth! / 1000; + commands.add('set radio ${freqMHz.toStringAsFixed(1)} $bwKHz $_spreadingFactor $_codingRate'); + } + } // Location if (_latController.text.isNotEmpty) { @@ -888,7 +895,7 @@ class _RepeaterSettingsScreenState extends State { ), const SizedBox(height: 16), DropdownButtonFormField( - initialValue: _bandwidth, + value: _bandwidth, decoration: InputDecoration( labelText: l10n.repeater_bandwidth, border: const OutlineInputBorder(), @@ -910,7 +917,7 @@ class _RepeaterSettingsScreenState extends State { ), const SizedBox(height: 16), DropdownButtonFormField( - initialValue: _spreadingFactor, + value: _spreadingFactor, decoration: InputDecoration( labelText: l10n.repeater_spreadingFactor, border: const OutlineInputBorder(), @@ -932,7 +939,7 @@ class _RepeaterSettingsScreenState extends State { ), const SizedBox(height: 16), DropdownButtonFormField( - initialValue: _codingRate, + value: _codingRate, decoration: InputDecoration( labelText: l10n.repeater_codingRate, border: const OutlineInputBorder(),