resolveBitExpansionMenuValue function
- BuildContext context, {
- required String? value,
- required String signalName,
- required int width,
Translate a popup-menu value returned by showMenu<String> into a
BitExpansionAction, showing any follow-up dialog as needed.
Returns:
- BitExpandRangeAction when
valueis BitExpansionMenuValues.expandBits. Ifwidthis at or below BitFieldUtils.expandThreshold the full range(0, width-1)is returned immediately. Otherwise showBitRangeDialog is invoked andnullis returned if the user cancels. - BitDefineFieldsAction when
valueis BitExpansionMenuValues.defineFields. showDefineBitFieldsDialog is invoked;nullis returned if the user cancels or enters no fields. nullfor any other value (callers should handle their own non-bit-expansion menu items first).
Implementation
Future<BitExpansionAction?> resolveBitExpansionMenuValue(
BuildContext context, {
required String? value,
required String signalName,
required int width,
}) async {
if (value == BitExpansionMenuValues.expandBits) {
if (width <= BitFieldUtils.expandThreshold) {
return BitExpandRangeAction(0, width - 1);
}
final parsed = await showBitRangeDialog(
context,
signalName: signalName,
width: width,
);
if (parsed == null) {
return null;
}
final (high, low) = parsed;
return BitExpandRangeAction(low, high);
}
if (value == BitExpansionMenuValues.defineFields) {
final fields = await showDefineBitFieldsDialog(
context,
signalName: signalName,
width: width,
);
if (fields == null || fields.isEmpty) {
return null;
}
return BitDefineFieldsAction(fields);
}
return null;
}