Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ jobs:
wget -qO- https://dcm.dev/pgp-key.public | sudo gpg --dearmor -o /usr/share/keyrings/dcm.gpg
echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
sudo apt-get update
sudo apt-get install dcm=1.28.0-1 # To avoid errors add `-1` (build number) to the version
sudo apt-get install dcm=1.29.0-1 # To avoid errors add `-1` (build number) to the version
sudo chmod +x /usr/bin/dcm
echo "$(dcm --version)"
- name: Setup Dart SDK
Expand Down
2 changes: 1 addition & 1 deletion flutter-candidate.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
36ea2bdeab611e908967b6fa57659998f600a2cb
4ffa9852f9f07f0279fc3da0a1b7dfea184226fd
Original file line number Diff line number Diff line change
Expand Up @@ -130,25 +130,25 @@ class InspectorDefaultDetailsViewOption extends StatelessWidget {
style: theme.subtleTextStyle,
),
const SizedBox(height: denseSpacing),
Row(
mainAxisSize: MainAxisSize.min,
children: [
Radio<InspectorDetailsViewType>(
value: InspectorDetailsViewType.layoutExplorer,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
groupValue: selection,
onChanged: _onChanged,
),
Text(InspectorDetailsViewType.layoutExplorer.key),
const SizedBox(width: denseSpacing),
Radio<InspectorDetailsViewType>(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
value: InspectorDetailsViewType.widgetDetailsTree,
groupValue: selection,
onChanged: _onChanged,
),
Text(InspectorDetailsViewType.widgetDetailsTree.key),
],
RadioGroup(
groupValue: selection,
onChanged: _onChanged,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Radio<InspectorDetailsViewType>(
value: InspectorDetailsViewType.layoutExplorer,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
),
Text(InspectorDetailsViewType.layoutExplorer.key),
const SizedBox(width: denseSpacing),
const Radio<InspectorDetailsViewType>(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
value: InspectorDetailsViewType.widgetDetailsTree,
),
Text(InspectorDetailsViewType.widgetDetailsTree.key),
],
),
),
],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,14 +101,16 @@ class _ClassFilterDialogState extends State<ClassFilterDialog> {
final textFieldLeftPadding = scaleByFontFactor(40.0);
void onTypeChanged(ClassFilterType? type) => setState(() => _type = type!);

RadioButton<ClassFilterType> radio(ClassFilterType type, String label) =>
RadioButton<ClassFilterType>(
label: label,
itemValue: type,
groupValue: _type,
onChanged: onTypeChanged,
radioKey: Key(type.toString()),
);
Widget radio(ClassFilterType type, String label) => Row(
children: [
Radio<ClassFilterType>(
value: type,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
key: Key(type.toString()),
),
Expanded(child: Text(label, overflow: TextOverflow.ellipsis)),
],
);

Widget textField(TextEditingController controller) => Padding(
padding: EdgeInsets.only(left: textFieldLeftPadding),
Expand Down Expand Up @@ -143,18 +145,22 @@ class _ClassFilterDialogState extends State<ClassFilterDialog> {
);
widget.onChanged(newFilter);
},
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
radio(ClassFilterType.showAll, 'Show all classes'),
const SizedBox(height: defaultSpacing),
radio(ClassFilterType.except, 'Show all classes except:'),
textField(_except),
const SizedBox(height: defaultSpacing),
radio(ClassFilterType.only, 'Show only:'),
textField(_only),
],
child: RadioGroup(
groupValue: _type,
onChanged: onTypeChanged,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
radio(ClassFilterType.showAll, 'Show all classes'),
const SizedBox(height: defaultSpacing),
radio(ClassFilterType.except, 'Show all classes except:'),
textField(_except),
const SizedBox(height: defaultSpacing),
radio(ClassFilterType.only, 'Show only:'),
textField(_only),
],
),
),
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -346,15 +346,19 @@ class TraceWidgetBuildsScopeSelector extends StatelessWidget {
Widget build(BuildContext context) {
final theme = Theme.of(context);
final textStyle = enabled ? theme.regularTextStyle : theme.subtleTextStyle;
return Row(
children: [
..._scopeSetting(
TraceWidgetBuildsScope.userCreated,
textStyle: textStyle,
),
const SizedBox(width: defaultSpacing),
..._scopeSetting(TraceWidgetBuildsScope.all, textStyle: textStyle),
],
return RadioGroup<TraceWidgetBuildsScope>(
groupValue: scope,
onChanged: _changeScope,
child: Row(
children: [
..._scopeSetting(
TraceWidgetBuildsScope.userCreated,
textStyle: textStyle,
),
const SizedBox(width: defaultSpacing),
..._scopeSetting(TraceWidgetBuildsScope.all, textStyle: textStyle),
],
),
);
}

Expand All @@ -364,18 +368,17 @@ class TraceWidgetBuildsScopeSelector extends StatelessWidget {
}) {
return [
Radio<TraceWidgetBuildsScope>(
enabled: enabled,
value: type,
groupValue: scope,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
onChanged: enabled ? _changeScope : null,
),
Text(type.radioDisplay, style: textStyle),
];
}

Future<void> _changeScope(TraceWidgetBuildsScope? type) async {
assert(enabled);
final extension = type!.extensionForScope;
if (type == null) return;
final extension = type.extensionForScope;
final opposite = type.opposite.extensionForScope;
await [
serviceConnection.serviceManager.serviceExtensionManager
Expand Down
33 changes: 0 additions & 33 deletions packages/devtools_app/lib/src/shared/ui/common_widgets.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2091,39 +2091,6 @@ class DownloadButton extends StatelessWidget {
}
}

class RadioButton<T> extends StatelessWidget {
const RadioButton({
super.key,
required this.label,
required this.itemValue,
required this.groupValue,
this.onChanged,
this.radioKey,
});

final String label;
final T itemValue;
final T groupValue;
final void Function(T?)? onChanged;
final Key? radioKey;

@override
Widget build(BuildContext context) {
return Row(
children: [
Radio<T>(
value: itemValue,
groupValue: groupValue,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
onChanged: onChanged,
key: radioKey,
),
Expanded(child: Text(label, overflow: TextOverflow.ellipsis)),
],
);
}
}

class ContextMenuButton extends StatelessWidget {
ContextMenuButton({
super.key,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,10 @@ void main() {
tester.widget(find.byType(Checkbox)) as Checkbox;
expect(traceWidgetBuildsCheckbox.value, isFalse);

final userCreatedWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).first)
as Radio<TraceWidgetBuildsScope>;
expect(userCreatedWidgetsRadio.groupValue, isNull);

final allWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).at(1))
as Radio<TraceWidgetBuildsScope>;
expect(allWidgetsRadio.groupValue, isNull);
final radioGroup = tester.widget<RadioGroup<TraceWidgetBuildsScope>>(
find.byType(RadioGroup<TraceWidgetBuildsScope>),
);
expect(radioGroup.groupValue, null);
});

testWidgets('builds with profileWidgetBuilds enabled', (
Expand All @@ -108,18 +103,10 @@ void main() {
tester.widget(find.byType(Checkbox)) as Checkbox;
expect(traceWidgetBuildsCheckbox.value, isTrue);

final userCreatedWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).first)
as Radio<TraceWidgetBuildsScope>;
expect(
userCreatedWidgetsRadio.groupValue,
equals(TraceWidgetBuildsScope.all),
final radioGroup = tester.widget<RadioGroup<TraceWidgetBuildsScope>>(
find.byType(RadioGroup<TraceWidgetBuildsScope>),
);

final allWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).at(1))
as Radio<TraceWidgetBuildsScope>;
expect(allWidgetsRadio.groupValue, equals(TraceWidgetBuildsScope.all));
expect(radioGroup.groupValue, equals(TraceWidgetBuildsScope.all));
});

testWidgets('builds with profileUserWidgetBuilds enabled', (
Expand All @@ -143,21 +130,10 @@ void main() {
tester.widget(find.byType(Checkbox)) as Checkbox;
expect(traceWidgetBuildsCheckbox.value, isTrue);

final userCreatedWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).first)
as Radio<TraceWidgetBuildsScope>;
expect(
userCreatedWidgetsRadio.groupValue,
equals(TraceWidgetBuildsScope.userCreated),
);

final allWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).at(1))
as Radio<TraceWidgetBuildsScope>;
expect(
allWidgetsRadio.groupValue,
equals(TraceWidgetBuildsScope.userCreated),
final radioGroup = tester.widget<RadioGroup<TraceWidgetBuildsScope>>(
find.byType(RadioGroup<TraceWidgetBuildsScope>),
);
expect(radioGroup.groupValue, equals(TraceWidgetBuildsScope.userCreated));
});

testWidgets(
Expand Down Expand Up @@ -195,19 +171,11 @@ void main() {
tester.widget(find.byType(Checkbox)) as Checkbox;
expect(traceWidgetBuildsCheckbox.value, isTrue);

final userCreatedWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).first)
as Radio<TraceWidgetBuildsScope>;
expect(
userCreatedWidgetsRadio.groupValue,
equals(TraceWidgetBuildsScope.userCreated),
final radioGroup = tester.widget<RadioGroup<TraceWidgetBuildsScope>>(
find.byType(RadioGroup<TraceWidgetBuildsScope>),
);

final allWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).at(1))
as Radio<TraceWidgetBuildsScope>;
expect(
allWidgetsRadio.groupValue,
radioGroup.groupValue,
equals(TraceWidgetBuildsScope.userCreated),
);
},
Expand Down Expand Up @@ -298,24 +266,16 @@ void main() {
traceUserCreatedWidgets: true,
);

var userCreatedWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).first)
as Radio<TraceWidgetBuildsScope>;
expect(
userCreatedWidgetsRadio.groupValue,
equals(TraceWidgetBuildsScope.userCreated),
);
RadioGroup<TraceWidgetBuildsScope> radioGroup() =>
tester.widget<RadioGroup<TraceWidgetBuildsScope>>(
find.byType(RadioGroup<TraceWidgetBuildsScope>),
);

expect(radioGroup().groupValue, TraceWidgetBuildsScope.userCreated);

await tester.tap(find.byType(Radio<TraceWidgetBuildsScope>).at(1));
await tester.pumpAndSettle();

userCreatedWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).first)
as Radio<TraceWidgetBuildsScope>;
expect(
userCreatedWidgetsRadio.groupValue,
equals(TraceWidgetBuildsScope.all),
);
expect(radioGroup().groupValue, TraceWidgetBuildsScope.all);

verifyExtensionStates(
mockServiceManager: mockServiceManager,
Expand All @@ -336,38 +296,34 @@ void main() {
traceUserCreatedWidgets: false,
);

var userCreatedWidgetsRadio =
RadioGroup<TraceWidgetBuildsScope> radioGroup() =>
tester.widget<RadioGroup<TraceWidgetBuildsScope>>(
find.byType(RadioGroup<TraceWidgetBuildsScope>),
);
Radio<TraceWidgetBuildsScope> userCreatedWidgetsRadio() =>
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).first)
as Radio<TraceWidgetBuildsScope>;
expect(userCreatedWidgetsRadio.groupValue, isNull);
var allWidgetsRadio =
Radio<TraceWidgetBuildsScope> allWidgetsRadio() =>
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).at(1))
as Radio<TraceWidgetBuildsScope>;
expect(allWidgetsRadio.groupValue, isNull);

expect(radioGroup().groupValue, null);
expect(userCreatedWidgetsRadio().enabled, false);
expect(allWidgetsRadio().enabled, false);

await tester.tap(find.byType(Radio<TraceWidgetBuildsScope>).first);
await tester.pumpAndSettle();

userCreatedWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).first)
as Radio<TraceWidgetBuildsScope>;
expect(userCreatedWidgetsRadio.groupValue, isNull);
allWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).at(1))
as Radio<TraceWidgetBuildsScope>;
expect(allWidgetsRadio.groupValue, isNull);
expect(radioGroup().groupValue, null);
expect(userCreatedWidgetsRadio().enabled, false);
expect(allWidgetsRadio().enabled, false);

await tester.tap(find.byType(Radio<TraceWidgetBuildsScope>).at(1));
await tester.pumpAndSettle();

userCreatedWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).first)
as Radio<TraceWidgetBuildsScope>;
expect(userCreatedWidgetsRadio.groupValue, isNull);
allWidgetsRadio =
tester.widget(find.byType(Radio<TraceWidgetBuildsScope>).at(1))
as Radio<TraceWidgetBuildsScope>;
expect(allWidgetsRadio.groupValue, isNull);
expect(radioGroup().groupValue, null);
expect(userCreatedWidgetsRadio().enabled, false);
expect(allWidgetsRadio().enabled, false);

verifyExtensionStates(
mockServiceManager: mockServiceManager,
Expand Down
Loading