@@ -222,6 +222,61 @@ void main() {
222222 expect (toggle.value, false , reason: 'The extension is disabled.' );
223223 });
224224 });
225+
226+ group ('ServiceExtensionCheckbox' , () {
227+ testWidgets ('shows value state even when unavailable' , (WidgetTester tester) async {
228+ final ext = extensions.disableClipLayers;
229+ final customFake = _UnavailableServiceExtensionManager ();
230+ customFake.makeUnavailable (ext.extension );
231+
232+ // Override the serviceExtensionManager on mockServiceManager
233+ when (mockServiceManager.serviceExtensionManager).thenReturn (customFake);
234+
235+ // Set state to enabled: false (which means clips not disabled -> checked true)
236+ await customFake.setServiceExtensionState (
237+ ext.extension ,
238+ enabled: false ,
239+ value: false ,
240+ );
241+
242+ final checkbox = ServiceExtensionCheckbox (serviceExtension: ext);
243+ await tester.pumpWidget (
244+ wrap (Scaffold (body: Center (child: checkbox))),
245+ );
246+ await tester.pumpAndSettle ();
247+
248+ final checkboxFinder = find.byType (Checkbox );
249+ expect (checkboxFinder, findsOneWidget);
250+
251+ final checkboxWidget = tester.widget <Checkbox >(checkboxFinder);
252+ expect (checkboxWidget.value, isTrue);
253+ expect (checkboxWidget.onChanged, isNull);
254+ });
255+ });
256+ }
257+
258+ base class _UnavailableServiceExtensionManager extends FakeServiceExtensionManager {
259+ final _unavailableExtensions = < String > {};
260+
261+ void makeUnavailable (String name) {
262+ _unavailableExtensions.add (name);
263+ }
264+
265+ @override
266+ Future <bool > waitForServiceExtensionAvailable (String name) {
267+ if (_unavailableExtensions.contains (name)) {
268+ return Future .value (false );
269+ }
270+ return super .waitForServiceExtensionAvailable (name);
271+ }
272+
273+ @override
274+ bool isServiceExtensionAvailable (String name) {
275+ if (_unavailableExtensions.contains (name)) {
276+ return false ;
277+ }
278+ return super .isServiceExtensionAvailable (name);
279+ }
225280}
226281
227282void registerServiceExtension (
0 commit comments