showBitRangeDialog function
- BuildContext context, {
- required String signalName,
- required int width,
Show a dialog to select a bit range for a signal.
Returns (high, low) or null if cancelled.
Implementation
Future<(int, int)?> showBitRangeDialog(
BuildContext context, {
required String signalName,
required int width,
}) async {
final maxBit = width - 1;
final controller = TextEditingController(text: '$maxBit:0');
controller.selection = TextSelection(
baseOffset: 0,
extentOffset: controller.text.length,
);
final result = await showDialog<String>(
context: context,
barrierColor: Colors.black26,
builder: (ctx) => AlertDialog(
title: Text(
'$signalName [$width bits]',
style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
),
content: TextField(
controller: controller,
autofocus: true,
decoration: InputDecoration(
labelText: 'Bit range (high:low) or single bit',
hintText: '$maxBit:0',
isDense: true,
),
onSubmitted: (value) => Navigator.of(ctx).pop(value),
),
actions: [
TextButton(
onPressed: () => Navigator.of(ctx).pop(),
child: const Text('Cancel'),
),
TextButton(
onPressed: () => Navigator.of(ctx).pop(controller.text),
child: const Text('OK'),
),
],
),
);
if (result == null || result.trim().isEmpty) {
return null;
}
return BitFieldUtils.parseBitRange(result.trim(), maxBit);
}