From b554737ee525efb481b4b4f60ef0fc846d7c3b43 Mon Sep 17 00:00:00 2001 From: Kenzie Davisson <43759233+kenzieschmoll@users.noreply.github.com> Date: Tue, 1 Oct 2024 09:28:22 -0700 Subject: [PATCH] Remove the legacy Provider screen now that this is shipped as a DevTools extension (#8364) --- packages/devtools_app/lib/initialization.dart | 11 +- packages/devtools_app/lib/src/app.dart | 8 +- .../lib/src/framework/initializer.dart | 2 +- .../src/screens/app_size/app_size_screen.dart | 4 +- .../deep_link_list_view.dart | 4 +- .../inspector/layout_explorer/flex/flex.dart | 2 +- .../layout_explorer/flex/flex.dart | 2 +- .../widgets/class_details/class_details.dart | 4 +- .../performance/tabbed_performance_view.dart | 2 +- .../src/screens/profiler/profiler_status.dart | 2 +- .../provider/instance_viewer/eval.dart | 74 - .../fake_freezed_annotation.dart | 26 - .../instance_viewer/instance_details.dart | 203 - .../instance_details.freezed.dart | 3868 ----------------- .../instance_viewer/instance_providers.dart | 436 -- .../instance_viewer/instance_viewer.dart | 639 --- .../provider/instance_viewer/result.dart | 82 - .../instance_viewer/result.freezed.dart | 389 -- .../src/screens/provider/provider_list.dart | 127 - .../src/screens/provider/provider_nodes.dart | 107 - .../src/screens/provider/provider_screen.dart | 192 +- .../riverpod_error_logger_observer.dart | 44 - .../sliver_iterable_child_delegate.dart | 43 - .../lib/src/shared/common_widgets.dart | 28 +- .../lib/src/shared/file_import.dart | 2 +- .../lib/src/shared/offline_screen.dart | 2 +- packages/devtools_app/pubspec.yaml | 2 - .../release_notes/NEXT_RELEASE_NOTES.md | 10 +- .../test/shared/instance_viewer_test.dart | 1544 ------- .../provider_screen/list_error_banner.png | Bin 20795 -> 0 bytes .../provider_screen/no_selected_provider.png | Bin 17313 -> 0 bytes .../provider_screen/selected_provider.png | Bin 22721 -> 0 bytes .../selected_provider_error_banner.png | Bin 25050 -> 0 bytes .../riverpod_screen/list_error_banner.png | Bin 17143 -> 0 bytes .../riverpod_screen/no_selected_provider.png | Bin 11468 -> 0 bytes .../riverpod_screen/selected_provider.png | Bin 28671 -> 0 bytes .../selected_provider_error_banner.png | Bin 32762 -> 0 bytes 37 files changed, 59 insertions(+), 7800 deletions(-) delete mode 100644 packages/devtools_app/lib/src/screens/provider/instance_viewer/eval.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/instance_viewer/fake_freezed_annotation.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_details.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_details.freezed.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_providers.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_viewer.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/instance_viewer/result.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/instance_viewer/result.freezed.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/provider_list.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/provider_nodes.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/riverpod_error_logger_observer.dart delete mode 100644 packages/devtools_app/lib/src/screens/provider/sliver_iterable_child_delegate.dart delete mode 100644 packages/devtools_app/test/shared/instance_viewer_test.dart delete mode 100644 packages/devtools_app/test/test_infra/goldens/provider_screen/list_error_banner.png delete mode 100644 packages/devtools_app/test/test_infra/goldens/provider_screen/no_selected_provider.png delete mode 100644 packages/devtools_app/test/test_infra/goldens/provider_screen/selected_provider.png delete mode 100644 packages/devtools_app/test/test_infra/goldens/provider_screen/selected_provider_error_banner.png delete mode 100644 packages/devtools_app/test/test_infra/goldens/riverpod_screen/list_error_banner.png delete mode 100644 packages/devtools_app/test/test_infra/goldens/riverpod_screen/no_selected_provider.png delete mode 100644 packages/devtools_app/test/test_infra/goldens/riverpod_screen/selected_provider.png delete mode 100644 packages/devtools_app/test/test_infra/goldens/riverpod_screen/selected_provider_error_banner.png diff --git a/packages/devtools_app/lib/initialization.dart b/packages/devtools_app/lib/initialization.dart index 1ab849fb156..9d69ca07d32 100644 --- a/packages/devtools_app/lib/initialization.dart +++ b/packages/devtools_app/lib/initialization.dart @@ -4,14 +4,12 @@ import 'package:devtools_app_shared/utils.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_web_plugins/url_strategy.dart'; import 'src/app.dart'; import 'src/framework/app_error_handling.dart'; import 'src/framework/framework_core.dart'; import 'src/screens/debugger/syntax_highlighter.dart'; -import 'src/screens/provider/riverpod_error_logger_observer.dart'; import 'src/shared/analytics/analytics_controller.dart'; import 'src/shared/config_specific/logger/logger_helpers.dart'; import 'src/shared/feature_flags.dart'; @@ -43,12 +41,9 @@ void runDevTools({ // Run the app. runApp( - ProviderScope( - observers: const [ErrorLoggerObserver()], - child: DevToolsApp( - screens ?? defaultScreens(sampleData: sampleData), - await analyticsController, - ), + DevToolsApp( + screens ?? defaultScreens(sampleData: sampleData), + await analyticsController, ), ); }); diff --git a/packages/devtools_app/lib/src/app.dart b/packages/devtools_app/lib/src/app.dart index 67a9c1948cf..077418c51cd 100644 --- a/packages/devtools_app/lib/src/app.dart +++ b/packages/devtools_app/lib/src/app.dart @@ -304,9 +304,9 @@ class DevToolsAppState extends State with AutoDisposeMixin { scaffold = DevToolsScaffold.withChild( embedMode: embedMode, child: CenteredMessage( - 'No DevTools ' - '${queryParams.hideAllExceptExtensions ? 'extensions' : 'screens'} ' - 'available for your project.', + message: 'No DevTools ' + '${queryParams.hideAllExceptExtensions ? 'extensions' : 'screens'} ' + 'available for your project.', ), ); } else { @@ -426,7 +426,7 @@ class DevToolsAppState extends State with AutoDisposeMixin { builder: (context, child) { if (child == null) { return const CenteredMessage( - 'Uh-oh, something went wrong. Please refresh the page.', + message: 'Uh-oh, something went wrong. Please refresh the page.', ); } return MultiProvider( diff --git a/packages/devtools_app/lib/src/framework/initializer.dart b/packages/devtools_app/lib/src/framework/initializer.dart index e37d503eae3..fd16af6d931 100644 --- a/packages/devtools_app/lib/src/framework/initializer.dart +++ b/packages/devtools_app/lib/src/framework/initializer.dart @@ -79,7 +79,7 @@ class _InitializerState extends State children: [ const Spacer(), CenteredMessage( - _showConnectToNewAppButton + message: _showConnectToNewAppButton ? 'Cannot connect to VM service.' : 'Waiting for VM service connection...', ), diff --git a/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart b/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart index d0c3cf71e5f..037ae701777 100644 --- a/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart +++ b/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart @@ -394,7 +394,7 @@ class _AnalysisViewState extends State valueListenable: controller.processingNotifier, builder: (context, processing, _) { return processing - ? const CenteredMessage(AppSizeScreen.loadingMessage) + ? const CenteredMessage(message: AppSizeScreen.loadingMessage) : Column( children: [ Flexible( @@ -498,7 +498,7 @@ class _DiffViewState extends State valueListenable: controller.processingNotifier, builder: (context, processing, _) { return processing - ? const CenteredMessage(AppSizeScreen.loadingMessage) + ? const CenteredMessage(message: AppSizeScreen.loadingMessage) : Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart index 77cc56e3203..4be5da001ba 100644 --- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart +++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart @@ -97,7 +97,7 @@ class _DeepLinkListViewMainPanel extends StatelessWidget { case PagePhase.noLinks: // TODO(hangyujin): This is just a place holder to add UI. return const CenteredMessage( - 'Your Flutter project has no Links to verify.', + message: 'Your Flutter project has no Links to verify.', ); case PagePhase.analyzeErrorPage: assert(controller.currentAppLinkSettings?.error != null); @@ -125,7 +125,7 @@ class _DeepLinkListViewMainPanel extends StatelessWidget { case PagePhase.validationErrorPage: // TODO(hangyujin): This is just a place holder to add Error handling. - return const CenteredMessage('Error validating domain '); + return const CenteredMessage(message: 'Error validating domain '); } }, ); diff --git a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/flex.dart b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/flex.dart index 2f289eb64b9..42df234e2cc 100644 --- a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/flex.dart +++ b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/flex.dart @@ -441,7 +441,7 @@ class _VisualizeFlexChildrenState extends State { } if (!widget.properties.hasChildren) { - return const CenteredMessage('No Children'); + return const CenteredMessage(message: 'No Children'); } final theme = Theme.of(context); diff --git a/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/flex.dart b/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/flex.dart index 573d05adcfc..c63b04b882d 100644 --- a/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/flex.dart +++ b/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/flex.dart @@ -442,7 +442,7 @@ class _VisualizeFlexChildrenState extends State { } if (!widget.properties.hasChildren) { - return const CenteredMessage('No Children'); + return const CenteredMessage(message: 'No Children'); } final theme = Theme.of(context); diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/class_details/class_details.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/class_details/class_details.dart index d55d5fe4bd6..450e73727a5 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/class_details/class_details.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/class_details/class_details.dart @@ -30,7 +30,7 @@ class HeapClassDetails extends StatelessWidget { final data = classData; if (data == null) { return const CenteredMessage( - 'Click a table row to see retaining paths here.', + message: 'Click a table row to see retaining paths here.', ); } @@ -45,7 +45,7 @@ class HeapClassDetails extends StatelessWidget { builder: (_, pathData, __) { if (pathData == null) { return const CenteredMessage( - 'Click a table row to see the detailed path.', + message: 'Click a table row to see the detailed path.', ); } diff --git a/packages/devtools_app/lib/src/screens/performance/tabbed_performance_view.dart b/packages/devtools_app/lib/src/screens/performance/tabbed_performance_view.dart index a31717108a0..6adb48ab683 100644 --- a/packages/devtools_app/lib/src/screens/performance/tabbed_performance_view.dart +++ b/packages/devtools_app/lib/src/screens/performance/tabbed_performance_view.dart @@ -136,7 +136,7 @@ class _TabbedPerformanceViewState extends State controller.flutterFramesController.displayRefreshRate, ) : const CenteredMessage( - 'Select a frame above to view analysis data.', + message: 'Select a frame above to view analysis data.', ), ), featureController: null, diff --git a/packages/devtools_app/lib/src/screens/profiler/profiler_status.dart b/packages/devtools_app/lib/src/screens/profiler/profiler_status.dart index 8ec4677e573..beb8ee8a6d0 100644 --- a/packages/devtools_app/lib/src/screens/profiler/profiler_status.dart +++ b/packages/devtools_app/lib/src/screens/profiler/profiler_status.dart @@ -69,7 +69,7 @@ class EmptyProfileView extends StatelessWidget { @override Widget build(BuildContext context) { - return const CenteredMessage('No CPU samples recorded.'); + return const CenteredMessage(message: 'No CPU samples recorded.'); } } diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/eval.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/eval.dart deleted file mode 100644 index 2f7cfa4f8cb..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/eval.dart +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/// A few utilities related to evaluating dart code -library; - -import 'dart:async'; - -import 'package:devtools_app_shared/service.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:vm_service/vm_service.dart'; - -import '../../../service/vm_service_wrapper.dart'; -import '../../../shared/globals.dart'; - -Stream get _serviceConnectionStream => - _serviceConnectionStreamController.stream; -final _serviceConnectionStreamController = - StreamController.broadcast(); -void setServiceConnectionForProviderScreen(VmServiceWrapper service) { - _serviceConnectionStreamController.add(service); -} - -/// Exposes the current VmServiceWrapper. -/// By listening to this provider instead of directly accessing `serviceManager.manager.service`, -/// this ensures that providers reload properly when the devtool is connected -/// to a different application. -final serviceProvider = StreamProvider((ref) async* { - yield serviceConnection.serviceManager.service!; - yield* _serviceConnectionStream; -}); - -/// An [EvalOnDartLibrary] that has access to no specific library in particular -/// -/// Not suitable to be used when evaluating third-party objects, as it would -/// otherwise not be possible to read private properties. -final evalProvider = libraryEvalProvider('dart:io'); - -/// An [EvalOnDartLibrary] that has access to `provider` -final providerEvalProvider = - libraryEvalProvider('package:provider/src/provider.dart'); - -/// An [EvalOnDartLibrary] for custom objects. -final libraryEvalProvider = - FutureProviderFamily((ref, libraryPath) async { - final service = await ref.watch(serviceProvider.future); - - final eval = EvalOnDartLibrary( - libraryPath, - service, - serviceManager: serviceConnection.serviceManager, - ); - ref.onDispose(eval.dispose); - return eval; -}); - -final hotRestartEventProvider = - ChangeNotifierProvider>((ref) { - final selectedIsolateListenable = - serviceConnection.serviceManager.isolateManager.selectedIsolate; - - // Since ChangeNotifierProvider calls `dispose` on the returned ChangeNotifier - // when the provider is destroyed, we can't simply return `selectedIsolateListenable`. - // So we're making a copy of it instead. - final notifier = ValueNotifier(selectedIsolateListenable.value); - - void listener() => notifier.value = selectedIsolateListenable.value; - selectedIsolateListenable.addListener(listener); - ref.onDispose(() => selectedIsolateListenable.removeListener(listener)); - - return notifier; -}); diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/fake_freezed_annotation.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/fake_freezed_annotation.dart deleted file mode 100644 index e27aa470a0d..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/fake_freezed_annotation.dart +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This file contains annotations that behaves like package:freezed_annotation. -// This allows using Freezed without having the devtool depend on the package. -// We could instead remove the annotations, but that would make the process of -// updating the generated files tedious. - -const nullable = Object(); -const freezed = Object(); - -class Default { - const Default(Object value); -} - -class Assert { - const Assert(String exp); -} - -class JsonKey { - const JsonKey({ - bool? ignore, - Object? defaultValue, - }); -} diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_details.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_details.dart deleted file mode 100644 index 7857860175f..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_details.dart +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:collection/collection.dart'; -import 'package:devtools_app_shared/service.dart'; -import 'package:flutter/foundation.dart'; -import 'package:vm_service/vm_service.dart'; - -import 'fake_freezed_annotation.dart'; -import 'result.dart'; - -// This part is generated using `package:freezed`, but without the devtool depending -// on the package. -// To update the generated files, temporarily add freezed/freezed_annotation/build_runner -// as dependencies; replace the `fake_freezed_annotation.dart` import with the -// real annotation package, then execute `pub run build_runner build`. -part 'instance_details.freezed.dart'; - -typedef Setter = Future Function(String newValue); - -@freezed -class PathToProperty with _$PathToProperty { - const factory PathToProperty.listIndex(int index) = ListIndexPath; - - // TODO test that mutating a Map does not collapse previously expanded keys - const factory PathToProperty.mapKey({ - required String? ref, - }) = MapKeyPath; - - /// Must not depend on [InstanceRef] and its ID, as they may change across - /// re-evaluations of the object. - /// Depending on those would lead to the UI collapsing previously expanded objects - /// because the new path to a property would be different. - /// - /// We can't just rely on the property name either, because in some cases - /// an object can have multiple properties with the same name (private properties - /// defined in different libraries) - const factory PathToProperty.objectProperty({ - required String name, - - /// Path to the class/mixin that defined this property - required String ownerUri, - - /// Name of the class/mixin that defined this property - required String ownerName, - }) = PropertyPath; - - factory PathToProperty.fromObjectField(ObjectField field) { - return PathToProperty.objectProperty( - name: field.name, - ownerUri: field.ownerUri, - ownerName: field.ownerName, - ); - } -} - -@freezed -class ObjectField with _$ObjectField { - factory ObjectField({ - required String name, - required bool isFinal, - required String ownerName, - required String ownerUri, - required Result ref, - - /// An [EvalOnDartLibrary] that can access this field from the owner object - required EvalOnDartLibrary eval, - - /// Whether this field was defined by the inspected app or by one of its dependencies - /// - /// This is used by the UI to hide variables that are not useful for the user. - required bool isDefinedByDependency, - }) = _ObjectField; - - ObjectField._(); - - bool get isPrivate => name.startsWith('_'); -} - -@freezed -class InstanceDetails with _$InstanceDetails { - InstanceDetails._(); - - factory InstanceDetails.nill({ - required Setter? setter, - }) = NullInstance; - - factory InstanceDetails.boolean( - String displayString, { - required String instanceRefId, - required Setter? setter, - }) = BoolInstance; - - factory InstanceDetails.number( - String displayString, { - required String instanceRefId, - required Setter? setter, - }) = NumInstance; - - factory InstanceDetails.string( - String displayString, { - required String instanceRefId, - required Setter? setter, - }) = StringInstance; - - factory InstanceDetails.map( - List keys, { - required int hash, - required String instanceRefId, - required Setter? setter, - }) = MapInstance; - - factory InstanceDetails.list({ - required int length, - required int hash, - required String instanceRefId, - required Setter? setter, - }) = ListInstance; - - factory InstanceDetails.object( - List fields, { - required String type, - required int hash, - required String instanceRefId, - required Setter? setter, - - /// An [EvalOnDartLibrary] associated with the library of this object - /// - /// This allows to edit private properties. - required EvalOnDartLibrary evalForInstance, - }) = ObjectInstance; - - factory InstanceDetails.enumeration({ - required String type, - required String value, - required Setter? setter, - required String instanceRefId, - }) = EnumInstance; - - bool get isExpandable { - bool falsy(Object _) => false; - - return map( - nill: falsy, - boolean: falsy, - number: falsy, - string: falsy, - enumeration: falsy, - map: (instance) => instance.keys.isNotEmpty, - list: (instance) => instance.length > 0, - object: (instance) => instance.fields.isNotEmpty, - ); - } - - // Since `nil` doesn't have those properties, we are manually exposing them - String? get instanceRefId { - return map( - nill: (_) => null, - boolean: (a) => a.instanceRefId, - number: (a) => a.instanceRefId, - string: (a) => a.instanceRefId, - map: (a) => a.instanceRefId, - list: (a) => a.instanceRefId, - object: (a) => a.instanceRefId, - enumeration: (a) => a.instanceRefId, - ); - } -} - -/// The path to visit child elements of an [Instance] or providers from `provider`/`riverpod`. -@freezed -class InstancePath with _$InstancePath { - const InstancePath._(); - - const factory InstancePath.fromInstanceId( - String instanceId, { - @Default([]) List pathToProperty, - }) = _InstancePathFromInstanceId; - - const factory InstancePath.fromProviderId( - String providerId, { - @Default([]) List pathToProperty, - }) = _InstancePathFromProviderId; - - InstancePath get root => copyWith(pathToProperty: []); - - InstancePath? get parent { - if (pathToProperty.isEmpty) return null; - - return copyWith( - pathToProperty: [ - for (var i = 0; i + 1 < pathToProperty.length; i++) pathToProperty[i], - ], - ); - } - - InstancePath pathForChild(PathToProperty property) { - return copyWith( - pathToProperty: [...pathToProperty, property], - ); - } -} diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_details.freezed.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_details.freezed.dart deleted file mode 100644 index e28024d16bc..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_details.freezed.dart +++ /dev/null @@ -1,3868 +0,0 @@ -// coverage:ignore-file -// GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target - -part of 'instance_details.dart'; - -// ************************************************************************** -// FreezedGenerator -// ************************************************************************** - -T _$identity(T value) => value; - -final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); - -/// @nodoc -class _$PathToPropertyTearOff { - const _$PathToPropertyTearOff(); - - ListIndexPath listIndex(int index) { - return ListIndexPath( - index, - ); - } - - MapKeyPath mapKey({required String? ref}) { - return MapKeyPath( - ref: ref, - ); - } - - PropertyPath objectProperty( - {required String name, - required String ownerUri, - required String ownerName}) { - return PropertyPath( - name: name, - ownerUri: ownerUri, - ownerName: ownerName, - ); - } -} - -/// @nodoc -const $PathToProperty = _$PathToPropertyTearOff(); - -/// @nodoc -mixin _$PathToProperty { - @optionalTypeArgs - TResult when({ - required TResult Function(int index) listIndex, - required TResult Function(String? ref) mapKey, - required TResult Function(String name, String ownerUri, String ownerName) - objectProperty, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(int index)? listIndex, - TResult Function(String? ref)? mapKey, - TResult Function(String name, String ownerUri, String ownerName)? - objectProperty, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(int index)? listIndex, - TResult Function(String? ref)? mapKey, - TResult Function(String name, String ownerUri, String ownerName)? - objectProperty, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult map({ - required TResult Function(ListIndexPath value) listIndex, - required TResult Function(MapKeyPath value) mapKey, - required TResult Function(PropertyPath value) objectProperty, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(ListIndexPath value)? listIndex, - TResult Function(MapKeyPath value)? mapKey, - TResult Function(PropertyPath value)? objectProperty, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ListIndexPath value)? listIndex, - TResult Function(MapKeyPath value)? mapKey, - TResult Function(PropertyPath value)? objectProperty, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $PathToPropertyCopyWith<$Res> { - factory $PathToPropertyCopyWith( - PathToProperty value, $Res Function(PathToProperty) then) = - _$PathToPropertyCopyWithImpl<$Res>; -} - -/// @nodoc -class _$PathToPropertyCopyWithImpl<$Res> - implements $PathToPropertyCopyWith<$Res> { - _$PathToPropertyCopyWithImpl(this._value, this._then); - - final PathToProperty _value; - // ignore: unused_field - final $Res Function(PathToProperty) _then; -} - -/// @nodoc -abstract class $ListIndexPathCopyWith<$Res> { - factory $ListIndexPathCopyWith( - ListIndexPath value, $Res Function(ListIndexPath) then) = - _$ListIndexPathCopyWithImpl<$Res>; - $Res call({int index}); -} - -/// @nodoc -class _$ListIndexPathCopyWithImpl<$Res> - extends _$PathToPropertyCopyWithImpl<$Res> - implements $ListIndexPathCopyWith<$Res> { - _$ListIndexPathCopyWithImpl( - ListIndexPath _value, $Res Function(ListIndexPath) _then) - : super(_value, (v) => _then(v as ListIndexPath)); - - @override - ListIndexPath get _value => super._value as ListIndexPath; - - @override - $Res call({ - Object? index = freezed, - }) { - return _then(ListIndexPath( - index == freezed - ? _value.index - : index // ignore: cast_nullable_to_non_nullable - as int, - )); - } -} - -/// @nodoc - -class _$ListIndexPath with DiagnosticableTreeMixin implements ListIndexPath { - const _$ListIndexPath(this.index); - - @override - final int index; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'PathToProperty.listIndex(index: $index)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'PathToProperty.listIndex')) - ..add(DiagnosticsProperty('index', index)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is ListIndexPath && - const DeepCollectionEquality().equals(other.index, index)); - } - - @override - int get hashCode => - Object.hash(runtimeType, const DeepCollectionEquality().hash(index)); - - @JsonKey(ignore: true) - @override - $ListIndexPathCopyWith get copyWith => - _$ListIndexPathCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(int index) listIndex, - required TResult Function(String? ref) mapKey, - required TResult Function(String name, String ownerUri, String ownerName) - objectProperty, - }) { - return listIndex(index); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(int index)? listIndex, - TResult Function(String? ref)? mapKey, - TResult Function(String name, String ownerUri, String ownerName)? - objectProperty, - }) { - return listIndex?.call(index); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(int index)? listIndex, - TResult Function(String? ref)? mapKey, - TResult Function(String name, String ownerUri, String ownerName)? - objectProperty, - required TResult orElse(), - }) { - if (listIndex != null) { - return listIndex(index); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ListIndexPath value) listIndex, - required TResult Function(MapKeyPath value) mapKey, - required TResult Function(PropertyPath value) objectProperty, - }) { - return listIndex(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(ListIndexPath value)? listIndex, - TResult Function(MapKeyPath value)? mapKey, - TResult Function(PropertyPath value)? objectProperty, - }) { - return listIndex?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ListIndexPath value)? listIndex, - TResult Function(MapKeyPath value)? mapKey, - TResult Function(PropertyPath value)? objectProperty, - required TResult orElse(), - }) { - if (listIndex != null) { - return listIndex(this); - } - return orElse(); - } -} - -abstract class ListIndexPath implements PathToProperty { - const factory ListIndexPath(int index) = _$ListIndexPath; - - int get index; - @JsonKey(ignore: true) - $ListIndexPathCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $MapKeyPathCopyWith<$Res> { - factory $MapKeyPathCopyWith( - MapKeyPath value, $Res Function(MapKeyPath) then) = - _$MapKeyPathCopyWithImpl<$Res>; - $Res call({String? ref}); -} - -/// @nodoc -class _$MapKeyPathCopyWithImpl<$Res> extends _$PathToPropertyCopyWithImpl<$Res> - implements $MapKeyPathCopyWith<$Res> { - _$MapKeyPathCopyWithImpl(MapKeyPath _value, $Res Function(MapKeyPath) _then) - : super(_value, (v) => _then(v as MapKeyPath)); - - @override - MapKeyPath get _value => super._value as MapKeyPath; - - @override - $Res call({ - Object? ref = freezed, - }) { - return _then(MapKeyPath( - ref: ref == freezed - ? _value.ref - : ref // ignore: cast_nullable_to_non_nullable - as String?, - )); - } -} - -/// @nodoc - -class _$MapKeyPath with DiagnosticableTreeMixin implements MapKeyPath { - const _$MapKeyPath({required this.ref}); - - @override - final String? ref; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'PathToProperty.mapKey(ref: $ref)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'PathToProperty.mapKey')) - ..add(DiagnosticsProperty('ref', ref)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is MapKeyPath && - const DeepCollectionEquality().equals(other.ref, ref)); - } - - @override - int get hashCode => - Object.hash(runtimeType, const DeepCollectionEquality().hash(ref)); - - @JsonKey(ignore: true) - @override - $MapKeyPathCopyWith get copyWith => - _$MapKeyPathCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(int index) listIndex, - required TResult Function(String? ref) mapKey, - required TResult Function(String name, String ownerUri, String ownerName) - objectProperty, - }) { - return mapKey(ref); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(int index)? listIndex, - TResult Function(String? ref)? mapKey, - TResult Function(String name, String ownerUri, String ownerName)? - objectProperty, - }) { - return mapKey?.call(ref); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(int index)? listIndex, - TResult Function(String? ref)? mapKey, - TResult Function(String name, String ownerUri, String ownerName)? - objectProperty, - required TResult orElse(), - }) { - if (mapKey != null) { - return mapKey(ref); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ListIndexPath value) listIndex, - required TResult Function(MapKeyPath value) mapKey, - required TResult Function(PropertyPath value) objectProperty, - }) { - return mapKey(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(ListIndexPath value)? listIndex, - TResult Function(MapKeyPath value)? mapKey, - TResult Function(PropertyPath value)? objectProperty, - }) { - return mapKey?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ListIndexPath value)? listIndex, - TResult Function(MapKeyPath value)? mapKey, - TResult Function(PropertyPath value)? objectProperty, - required TResult orElse(), - }) { - if (mapKey != null) { - return mapKey(this); - } - return orElse(); - } -} - -abstract class MapKeyPath implements PathToProperty { - const factory MapKeyPath({required String? ref}) = _$MapKeyPath; - - String? get ref; - @JsonKey(ignore: true) - $MapKeyPathCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $PropertyPathCopyWith<$Res> { - factory $PropertyPathCopyWith( - PropertyPath value, $Res Function(PropertyPath) then) = - _$PropertyPathCopyWithImpl<$Res>; - $Res call({String name, String ownerUri, String ownerName}); -} - -/// @nodoc -class _$PropertyPathCopyWithImpl<$Res> - extends _$PathToPropertyCopyWithImpl<$Res> - implements $PropertyPathCopyWith<$Res> { - _$PropertyPathCopyWithImpl( - PropertyPath _value, $Res Function(PropertyPath) _then) - : super(_value, (v) => _then(v as PropertyPath)); - - @override - PropertyPath get _value => super._value as PropertyPath; - - @override - $Res call({ - Object? name = freezed, - Object? ownerUri = freezed, - Object? ownerName = freezed, - }) { - return _then(PropertyPath( - name: name == freezed - ? _value.name - : name // ignore: cast_nullable_to_non_nullable - as String, - ownerUri: ownerUri == freezed - ? _value.ownerUri - : ownerUri // ignore: cast_nullable_to_non_nullable - as String, - ownerName: ownerName == freezed - ? _value.ownerName - : ownerName // ignore: cast_nullable_to_non_nullable - as String, - )); - } -} - -/// @nodoc - -class _$PropertyPath with DiagnosticableTreeMixin implements PropertyPath { - const _$PropertyPath( - {required this.name, required this.ownerUri, required this.ownerName}); - - @override - final String name; - @override - - /// Path to the class/mixin that defined this property - final String ownerUri; - @override - - /// Name of the class/mixin that defined this property - final String ownerName; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'PathToProperty.objectProperty(name: $name, ownerUri: $ownerUri, ownerName: $ownerName)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'PathToProperty.objectProperty')) - ..add(DiagnosticsProperty('name', name)) - ..add(DiagnosticsProperty('ownerUri', ownerUri)) - ..add(DiagnosticsProperty('ownerName', ownerName)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is PropertyPath && - const DeepCollectionEquality().equals(other.name, name) && - const DeepCollectionEquality().equals(other.ownerUri, ownerUri) && - const DeepCollectionEquality().equals(other.ownerName, ownerName)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(name), - const DeepCollectionEquality().hash(ownerUri), - const DeepCollectionEquality().hash(ownerName)); - - @JsonKey(ignore: true) - @override - $PropertyPathCopyWith get copyWith => - _$PropertyPathCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(int index) listIndex, - required TResult Function(String? ref) mapKey, - required TResult Function(String name, String ownerUri, String ownerName) - objectProperty, - }) { - return objectProperty(name, ownerUri, ownerName); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(int index)? listIndex, - TResult Function(String? ref)? mapKey, - TResult Function(String name, String ownerUri, String ownerName)? - objectProperty, - }) { - return objectProperty?.call(name, ownerUri, ownerName); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(int index)? listIndex, - TResult Function(String? ref)? mapKey, - TResult Function(String name, String ownerUri, String ownerName)? - objectProperty, - required TResult orElse(), - }) { - if (objectProperty != null) { - return objectProperty(name, ownerUri, ownerName); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ListIndexPath value) listIndex, - required TResult Function(MapKeyPath value) mapKey, - required TResult Function(PropertyPath value) objectProperty, - }) { - return objectProperty(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(ListIndexPath value)? listIndex, - TResult Function(MapKeyPath value)? mapKey, - TResult Function(PropertyPath value)? objectProperty, - }) { - return objectProperty?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ListIndexPath value)? listIndex, - TResult Function(MapKeyPath value)? mapKey, - TResult Function(PropertyPath value)? objectProperty, - required TResult orElse(), - }) { - if (objectProperty != null) { - return objectProperty(this); - } - return orElse(); - } -} - -abstract class PropertyPath implements PathToProperty { - const factory PropertyPath( - {required String name, - required String ownerUri, - required String ownerName}) = _$PropertyPath; - - String get name; - - /// Path to the class/mixin that defined this property - String get ownerUri; - - /// Name of the class/mixin that defined this property - String get ownerName; - @JsonKey(ignore: true) - $PropertyPathCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -class _$ObjectFieldTearOff { - const _$ObjectFieldTearOff(); - - _ObjectField call( - {required String name, - required bool isFinal, - required String ownerName, - required String ownerUri, - required Result ref, - required EvalOnDartLibrary eval, - required bool isDefinedByDependency}) { - return _ObjectField( - name: name, - isFinal: isFinal, - ownerName: ownerName, - ownerUri: ownerUri, - ref: ref, - eval: eval, - isDefinedByDependency: isDefinedByDependency, - ); - } -} - -/// @nodoc -const $ObjectField = _$ObjectFieldTearOff(); - -/// @nodoc -mixin _$ObjectField { - String get name => throw _privateConstructorUsedError; - bool get isFinal => throw _privateConstructorUsedError; - String get ownerName => throw _privateConstructorUsedError; - String get ownerUri => throw _privateConstructorUsedError; - Result get ref => throw _privateConstructorUsedError; - - /// An [EvalOnDartLibrary] that can access this field from the owner object - EvalOnDartLibrary get eval => throw _privateConstructorUsedError; - - /// Whether this field was defined by the inspected app or by one of its dependencies - /// - /// This is used by the UI to hide variables that are not useful for the user. - bool get isDefinedByDependency => throw _privateConstructorUsedError; - - @JsonKey(ignore: true) - $ObjectFieldCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $ObjectFieldCopyWith<$Res> { - factory $ObjectFieldCopyWith( - ObjectField value, $Res Function(ObjectField) then) = - _$ObjectFieldCopyWithImpl<$Res>; - $Res call( - {String name, - bool isFinal, - String ownerName, - String ownerUri, - Result ref, - EvalOnDartLibrary eval, - bool isDefinedByDependency}); - - $ResultCopyWith get ref; -} - -/// @nodoc -class _$ObjectFieldCopyWithImpl<$Res> implements $ObjectFieldCopyWith<$Res> { - _$ObjectFieldCopyWithImpl(this._value, this._then); - - final ObjectField _value; - // ignore: unused_field - final $Res Function(ObjectField) _then; - - @override - $Res call({ - Object? name = freezed, - Object? isFinal = freezed, - Object? ownerName = freezed, - Object? ownerUri = freezed, - Object? ref = freezed, - Object? eval = freezed, - Object? isDefinedByDependency = freezed, - }) { - return _then(_value.copyWith( - name: name == freezed - ? _value.name - : name // ignore: cast_nullable_to_non_nullable - as String, - isFinal: isFinal == freezed - ? _value.isFinal - : isFinal // ignore: cast_nullable_to_non_nullable - as bool, - ownerName: ownerName == freezed - ? _value.ownerName - : ownerName // ignore: cast_nullable_to_non_nullable - as String, - ownerUri: ownerUri == freezed - ? _value.ownerUri - : ownerUri // ignore: cast_nullable_to_non_nullable - as String, - ref: ref == freezed - ? _value.ref - : ref // ignore: cast_nullable_to_non_nullable - as Result, - eval: eval == freezed - ? _value.eval - : eval // ignore: cast_nullable_to_non_nullable - as EvalOnDartLibrary, - isDefinedByDependency: isDefinedByDependency == freezed - ? _value.isDefinedByDependency - : isDefinedByDependency // ignore: cast_nullable_to_non_nullable - as bool, - )); - } - - @override - $ResultCopyWith get ref { - return $ResultCopyWith(_value.ref, (value) { - return _then(_value.copyWith(ref: value)); - }); - } -} - -/// @nodoc -abstract class _$ObjectFieldCopyWith<$Res> - implements $ObjectFieldCopyWith<$Res> { - factory _$ObjectFieldCopyWith( - _ObjectField value, $Res Function(_ObjectField) then) = - __$ObjectFieldCopyWithImpl<$Res>; - @override - $Res call( - {String name, - bool isFinal, - String ownerName, - String ownerUri, - Result ref, - EvalOnDartLibrary eval, - bool isDefinedByDependency}); - - @override - $ResultCopyWith get ref; -} - -/// @nodoc -class __$ObjectFieldCopyWithImpl<$Res> extends _$ObjectFieldCopyWithImpl<$Res> - implements _$ObjectFieldCopyWith<$Res> { - __$ObjectFieldCopyWithImpl( - _ObjectField _value, $Res Function(_ObjectField) _then) - : super(_value, (v) => _then(v as _ObjectField)); - - @override - _ObjectField get _value => super._value as _ObjectField; - - @override - $Res call({ - Object? name = freezed, - Object? isFinal = freezed, - Object? ownerName = freezed, - Object? ownerUri = freezed, - Object? ref = freezed, - Object? eval = freezed, - Object? isDefinedByDependency = freezed, - }) { - return _then(_ObjectField( - name: name == freezed - ? _value.name - : name // ignore: cast_nullable_to_non_nullable - as String, - isFinal: isFinal == freezed - ? _value.isFinal - : isFinal // ignore: cast_nullable_to_non_nullable - as bool, - ownerName: ownerName == freezed - ? _value.ownerName - : ownerName // ignore: cast_nullable_to_non_nullable - as String, - ownerUri: ownerUri == freezed - ? _value.ownerUri - : ownerUri // ignore: cast_nullable_to_non_nullable - as String, - ref: ref == freezed - ? _value.ref - : ref // ignore: cast_nullable_to_non_nullable - as Result, - eval: eval == freezed - ? _value.eval - : eval // ignore: cast_nullable_to_non_nullable - as EvalOnDartLibrary, - isDefinedByDependency: isDefinedByDependency == freezed - ? _value.isDefinedByDependency - : isDefinedByDependency // ignore: cast_nullable_to_non_nullable - as bool, - )); - } -} - -/// @nodoc - -class _$_ObjectField extends _ObjectField with DiagnosticableTreeMixin { - _$_ObjectField( - {required this.name, - required this.isFinal, - required this.ownerName, - required this.ownerUri, - required this.ref, - required this.eval, - required this.isDefinedByDependency}) - : super._(); - - @override - final String name; - @override - final bool isFinal; - @override - final String ownerName; - @override - final String ownerUri; - @override - final Result ref; - @override - - /// An [EvalOnDartLibrary] that can access this field from the owner object - final EvalOnDartLibrary eval; - @override - - /// Whether this field was defined by the inspected app or by one of its dependencies - /// - /// This is used by the UI to hide variables that are not useful for the user. - final bool isDefinedByDependency; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'ObjectField(name: $name, isFinal: $isFinal, ownerName: $ownerName, ownerUri: $ownerUri, ref: $ref, eval: $eval, isDefinedByDependency: $isDefinedByDependency)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'ObjectField')) - ..add(DiagnosticsProperty('name', name)) - ..add(DiagnosticsProperty('isFinal', isFinal)) - ..add(DiagnosticsProperty('ownerName', ownerName)) - ..add(DiagnosticsProperty('ownerUri', ownerUri)) - ..add(DiagnosticsProperty('ref', ref)) - ..add(DiagnosticsProperty('eval', eval)) - ..add( - DiagnosticsProperty('isDefinedByDependency', isDefinedByDependency)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _ObjectField && - const DeepCollectionEquality().equals(other.name, name) && - const DeepCollectionEquality().equals(other.isFinal, isFinal) && - const DeepCollectionEquality().equals(other.ownerName, ownerName) && - const DeepCollectionEquality().equals(other.ownerUri, ownerUri) && - const DeepCollectionEquality().equals(other.ref, ref) && - const DeepCollectionEquality().equals(other.eval, eval) && - const DeepCollectionEquality() - .equals(other.isDefinedByDependency, isDefinedByDependency)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(name), - const DeepCollectionEquality().hash(isFinal), - const DeepCollectionEquality().hash(ownerName), - const DeepCollectionEquality().hash(ownerUri), - const DeepCollectionEquality().hash(ref), - const DeepCollectionEquality().hash(eval), - const DeepCollectionEquality().hash(isDefinedByDependency)); - - @JsonKey(ignore: true) - @override - _$ObjectFieldCopyWith<_ObjectField> get copyWith => - __$ObjectFieldCopyWithImpl<_ObjectField>(this, _$identity); -} - -abstract class _ObjectField extends ObjectField { - factory _ObjectField( - {required String name, - required bool isFinal, - required String ownerName, - required String ownerUri, - required Result ref, - required EvalOnDartLibrary eval, - required bool isDefinedByDependency}) = _$_ObjectField; - _ObjectField._() : super._(); - - @override - String get name; - @override - bool get isFinal; - @override - String get ownerName; - @override - String get ownerUri; - @override - Result get ref; - @override - - /// An [EvalOnDartLibrary] that can access this field from the owner object - EvalOnDartLibrary get eval; - @override - - /// Whether this field was defined by the inspected app or by one of its dependencies - /// - /// This is used by the UI to hide variables that are not useful for the user. - bool get isDefinedByDependency; - @override - @JsonKey(ignore: true) - _$ObjectFieldCopyWith<_ObjectField> get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -class _$InstanceDetailsTearOff { - const _$InstanceDetailsTearOff(); - - NullInstance nill({required Setter? setter}) { - return NullInstance( - setter: setter, - ); - } - - BoolInstance boolean(String displayString, - {required String instanceRefId, required Setter? setter}) { - return BoolInstance( - displayString, - instanceRefId: instanceRefId, - setter: setter, - ); - } - - NumInstance number(String displayString, - {required String instanceRefId, required Setter? setter}) { - return NumInstance( - displayString, - instanceRefId: instanceRefId, - setter: setter, - ); - } - - StringInstance string(String displayString, - {required String instanceRefId, required Setter? setter}) { - return StringInstance( - displayString, - instanceRefId: instanceRefId, - setter: setter, - ); - } - - MapInstance map(List keys, - {required int hash, - required String instanceRefId, - required Setter? setter}) { - return MapInstance( - keys, - hash: hash, - instanceRefId: instanceRefId, - setter: setter, - ); - } - - ListInstance list( - {required int length, - required int hash, - required String instanceRefId, - required Setter? setter}) { - return ListInstance( - length: length, - hash: hash, - instanceRefId: instanceRefId, - setter: setter, - ); - } - - ObjectInstance object(List fields, - {required String type, - required int hash, - required String instanceRefId, - required Setter? setter, - required EvalOnDartLibrary evalForInstance}) { - return ObjectInstance( - fields, - type: type, - hash: hash, - instanceRefId: instanceRefId, - setter: setter, - evalForInstance: evalForInstance, - ); - } - - EnumInstance enumeration( - {required String type, - required String value, - required Setter? setter, - required String instanceRefId}) { - return EnumInstance( - type: type, - value: value, - setter: setter, - instanceRefId: instanceRefId, - ); - } -} - -/// @nodoc -const $InstanceDetails = _$InstanceDetailsTearOff(); - -/// @nodoc -mixin _$InstanceDetails { - Setter? get setter => throw _privateConstructorUsedError; - - @optionalTypeArgs - TResult when({ - required TResult Function(Setter? setter) nill, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - boolean, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - number, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - string, - required TResult Function(List keys, int hash, - String instanceRefId, Setter? setter) - map, - required TResult Function( - int length, int hash, String instanceRefId, Setter? setter) - list, - required TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance) - object, - required TResult Function( - String type, String value, Setter? setter, String instanceRefId) - enumeration, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult map({ - required TResult Function(NullInstance value) nill, - required TResult Function(BoolInstance value) boolean, - required TResult Function(NumInstance value) number, - required TResult Function(StringInstance value) string, - required TResult Function(MapInstance value) map, - required TResult Function(ListInstance value) list, - required TResult Function(ObjectInstance value) object, - required TResult Function(EnumInstance value) enumeration, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeMap({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; - - @JsonKey(ignore: true) - $InstanceDetailsCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $InstanceDetailsCopyWith<$Res> { - factory $InstanceDetailsCopyWith( - InstanceDetails value, $Res Function(InstanceDetails) then) = - _$InstanceDetailsCopyWithImpl<$Res>; - $Res call({Setter? setter}); -} - -/// @nodoc -class _$InstanceDetailsCopyWithImpl<$Res> - implements $InstanceDetailsCopyWith<$Res> { - _$InstanceDetailsCopyWithImpl(this._value, this._then); - - final InstanceDetails _value; - // ignore: unused_field - final $Res Function(InstanceDetails) _then; - - @override - $Res call({ - Object? setter = freezed, - }) { - return _then(_value.copyWith( - setter: setter == freezed - ? _value.setter - : setter // ignore: cast_nullable_to_non_nullable - as Setter?, - )); - } -} - -/// @nodoc -abstract class $NullInstanceCopyWith<$Res> - implements $InstanceDetailsCopyWith<$Res> { - factory $NullInstanceCopyWith( - NullInstance value, $Res Function(NullInstance) then) = - _$NullInstanceCopyWithImpl<$Res>; - @override - $Res call({Setter? setter}); -} - -/// @nodoc -class _$NullInstanceCopyWithImpl<$Res> - extends _$InstanceDetailsCopyWithImpl<$Res> - implements $NullInstanceCopyWith<$Res> { - _$NullInstanceCopyWithImpl( - NullInstance _value, $Res Function(NullInstance) _then) - : super(_value, (v) => _then(v as NullInstance)); - - @override - NullInstance get _value => super._value as NullInstance; - - @override - $Res call({ - Object? setter = freezed, - }) { - return _then(NullInstance( - setter: setter == freezed - ? _value.setter - : setter // ignore: cast_nullable_to_non_nullable - as Setter?, - )); - } -} - -/// @nodoc - -class _$NullInstance extends NullInstance with DiagnosticableTreeMixin { - _$NullInstance({required this.setter}) : super._(); - - @override - final Setter? setter; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstanceDetails.nill(setter: $setter)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstanceDetails.nill')) - ..add(DiagnosticsProperty('setter', setter)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is NullInstance && - (identical(other.setter, setter) || other.setter == setter)); - } - - @override - int get hashCode => Object.hash(runtimeType, setter); - - @JsonKey(ignore: true) - @override - $NullInstanceCopyWith get copyWith => - _$NullInstanceCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(Setter? setter) nill, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - boolean, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - number, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - string, - required TResult Function(List keys, int hash, - String instanceRefId, Setter? setter) - map, - required TResult Function( - int length, int hash, String instanceRefId, Setter? setter) - list, - required TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance) - object, - required TResult Function( - String type, String value, Setter? setter, String instanceRefId) - enumeration, - }) { - return nill(setter); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - }) { - return nill?.call(setter); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - required TResult orElse(), - }) { - if (nill != null) { - return nill(setter); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(NullInstance value) nill, - required TResult Function(BoolInstance value) boolean, - required TResult Function(NumInstance value) number, - required TResult Function(StringInstance value) string, - required TResult Function(MapInstance value) map, - required TResult Function(ListInstance value) list, - required TResult Function(ObjectInstance value) object, - required TResult Function(EnumInstance value) enumeration, - }) { - return nill(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - }) { - return nill?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - required TResult orElse(), - }) { - if (nill != null) { - return nill(this); - } - return orElse(); - } -} - -abstract class NullInstance extends InstanceDetails { - factory NullInstance({required Setter? setter}) = _$NullInstance; - NullInstance._() : super._(); - - @override - Setter? get setter; - @override - @JsonKey(ignore: true) - $NullInstanceCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $BoolInstanceCopyWith<$Res> - implements $InstanceDetailsCopyWith<$Res> { - factory $BoolInstanceCopyWith( - BoolInstance value, $Res Function(BoolInstance) then) = - _$BoolInstanceCopyWithImpl<$Res>; - @override - $Res call({String displayString, String instanceRefId, Setter? setter}); -} - -/// @nodoc -class _$BoolInstanceCopyWithImpl<$Res> - extends _$InstanceDetailsCopyWithImpl<$Res> - implements $BoolInstanceCopyWith<$Res> { - _$BoolInstanceCopyWithImpl( - BoolInstance _value, $Res Function(BoolInstance) _then) - : super(_value, (v) => _then(v as BoolInstance)); - - @override - BoolInstance get _value => super._value as BoolInstance; - - @override - $Res call({ - Object? displayString = freezed, - Object? instanceRefId = freezed, - Object? setter = freezed, - }) { - return _then(BoolInstance( - displayString == freezed - ? _value.displayString - : displayString // ignore: cast_nullable_to_non_nullable - as String, - instanceRefId: instanceRefId == freezed - ? _value.instanceRefId - : instanceRefId // ignore: cast_nullable_to_non_nullable - as String, - setter: setter == freezed - ? _value.setter - : setter // ignore: cast_nullable_to_non_nullable - as Setter?, - )); - } -} - -/// @nodoc - -class _$BoolInstance extends BoolInstance with DiagnosticableTreeMixin { - _$BoolInstance(this.displayString, - {required this.instanceRefId, required this.setter}) - : super._(); - - @override - final String displayString; - @override - final String instanceRefId; - @override - final Setter? setter; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstanceDetails.boolean(displayString: $displayString, instanceRefId: $instanceRefId, setter: $setter)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstanceDetails.boolean')) - ..add(DiagnosticsProperty('displayString', displayString)) - ..add(DiagnosticsProperty('instanceRefId', instanceRefId)) - ..add(DiagnosticsProperty('setter', setter)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is BoolInstance && - const DeepCollectionEquality() - .equals(other.displayString, displayString) && - const DeepCollectionEquality() - .equals(other.instanceRefId, instanceRefId) && - (identical(other.setter, setter) || other.setter == setter)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(displayString), - const DeepCollectionEquality().hash(instanceRefId), - setter); - - @JsonKey(ignore: true) - @override - $BoolInstanceCopyWith get copyWith => - _$BoolInstanceCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(Setter? setter) nill, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - boolean, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - number, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - string, - required TResult Function(List keys, int hash, - String instanceRefId, Setter? setter) - map, - required TResult Function( - int length, int hash, String instanceRefId, Setter? setter) - list, - required TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance) - object, - required TResult Function( - String type, String value, Setter? setter, String instanceRefId) - enumeration, - }) { - return boolean(displayString, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - }) { - return boolean?.call(displayString, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - required TResult orElse(), - }) { - if (boolean != null) { - return boolean(displayString, instanceRefId, setter); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(NullInstance value) nill, - required TResult Function(BoolInstance value) boolean, - required TResult Function(NumInstance value) number, - required TResult Function(StringInstance value) string, - required TResult Function(MapInstance value) map, - required TResult Function(ListInstance value) list, - required TResult Function(ObjectInstance value) object, - required TResult Function(EnumInstance value) enumeration, - }) { - return boolean(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - }) { - return boolean?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - required TResult orElse(), - }) { - if (boolean != null) { - return boolean(this); - } - return orElse(); - } -} - -abstract class BoolInstance extends InstanceDetails { - factory BoolInstance(String displayString, - {required String instanceRefId, - required Setter? setter}) = _$BoolInstance; - BoolInstance._() : super._(); - - String get displayString; - String get instanceRefId; - @override - Setter? get setter; - @override - @JsonKey(ignore: true) - $BoolInstanceCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $NumInstanceCopyWith<$Res> - implements $InstanceDetailsCopyWith<$Res> { - factory $NumInstanceCopyWith( - NumInstance value, $Res Function(NumInstance) then) = - _$NumInstanceCopyWithImpl<$Res>; - @override - $Res call({String displayString, String instanceRefId, Setter? setter}); -} - -/// @nodoc -class _$NumInstanceCopyWithImpl<$Res> - extends _$InstanceDetailsCopyWithImpl<$Res> - implements $NumInstanceCopyWith<$Res> { - _$NumInstanceCopyWithImpl( - NumInstance _value, $Res Function(NumInstance) _then) - : super(_value, (v) => _then(v as NumInstance)); - - @override - NumInstance get _value => super._value as NumInstance; - - @override - $Res call({ - Object? displayString = freezed, - Object? instanceRefId = freezed, - Object? setter = freezed, - }) { - return _then(NumInstance( - displayString == freezed - ? _value.displayString - : displayString // ignore: cast_nullable_to_non_nullable - as String, - instanceRefId: instanceRefId == freezed - ? _value.instanceRefId - : instanceRefId // ignore: cast_nullable_to_non_nullable - as String, - setter: setter == freezed - ? _value.setter - : setter // ignore: cast_nullable_to_non_nullable - as Setter?, - )); - } -} - -/// @nodoc - -class _$NumInstance extends NumInstance with DiagnosticableTreeMixin { - _$NumInstance(this.displayString, - {required this.instanceRefId, required this.setter}) - : super._(); - - @override - final String displayString; - @override - final String instanceRefId; - @override - final Setter? setter; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstanceDetails.number(displayString: $displayString, instanceRefId: $instanceRefId, setter: $setter)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstanceDetails.number')) - ..add(DiagnosticsProperty('displayString', displayString)) - ..add(DiagnosticsProperty('instanceRefId', instanceRefId)) - ..add(DiagnosticsProperty('setter', setter)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is NumInstance && - const DeepCollectionEquality() - .equals(other.displayString, displayString) && - const DeepCollectionEquality() - .equals(other.instanceRefId, instanceRefId) && - (identical(other.setter, setter) || other.setter == setter)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(displayString), - const DeepCollectionEquality().hash(instanceRefId), - setter); - - @JsonKey(ignore: true) - @override - $NumInstanceCopyWith get copyWith => - _$NumInstanceCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(Setter? setter) nill, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - boolean, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - number, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - string, - required TResult Function(List keys, int hash, - String instanceRefId, Setter? setter) - map, - required TResult Function( - int length, int hash, String instanceRefId, Setter? setter) - list, - required TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance) - object, - required TResult Function( - String type, String value, Setter? setter, String instanceRefId) - enumeration, - }) { - return number(displayString, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - }) { - return number?.call(displayString, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - required TResult orElse(), - }) { - if (number != null) { - return number(displayString, instanceRefId, setter); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(NullInstance value) nill, - required TResult Function(BoolInstance value) boolean, - required TResult Function(NumInstance value) number, - required TResult Function(StringInstance value) string, - required TResult Function(MapInstance value) map, - required TResult Function(ListInstance value) list, - required TResult Function(ObjectInstance value) object, - required TResult Function(EnumInstance value) enumeration, - }) { - return number(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - }) { - return number?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - required TResult orElse(), - }) { - if (number != null) { - return number(this); - } - return orElse(); - } -} - -abstract class NumInstance extends InstanceDetails { - factory NumInstance(String displayString, - {required String instanceRefId, required Setter? setter}) = _$NumInstance; - NumInstance._() : super._(); - - String get displayString; - String get instanceRefId; - @override - Setter? get setter; - @override - @JsonKey(ignore: true) - $NumInstanceCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $StringInstanceCopyWith<$Res> - implements $InstanceDetailsCopyWith<$Res> { - factory $StringInstanceCopyWith( - StringInstance value, $Res Function(StringInstance) then) = - _$StringInstanceCopyWithImpl<$Res>; - @override - $Res call({String displayString, String instanceRefId, Setter? setter}); -} - -/// @nodoc -class _$StringInstanceCopyWithImpl<$Res> - extends _$InstanceDetailsCopyWithImpl<$Res> - implements $StringInstanceCopyWith<$Res> { - _$StringInstanceCopyWithImpl( - StringInstance _value, $Res Function(StringInstance) _then) - : super(_value, (v) => _then(v as StringInstance)); - - @override - StringInstance get _value => super._value as StringInstance; - - @override - $Res call({ - Object? displayString = freezed, - Object? instanceRefId = freezed, - Object? setter = freezed, - }) { - return _then(StringInstance( - displayString == freezed - ? _value.displayString - : displayString // ignore: cast_nullable_to_non_nullable - as String, - instanceRefId: instanceRefId == freezed - ? _value.instanceRefId - : instanceRefId // ignore: cast_nullable_to_non_nullable - as String, - setter: setter == freezed - ? _value.setter - : setter // ignore: cast_nullable_to_non_nullable - as Setter?, - )); - } -} - -/// @nodoc - -class _$StringInstance extends StringInstance with DiagnosticableTreeMixin { - _$StringInstance(this.displayString, - {required this.instanceRefId, required this.setter}) - : super._(); - - @override - final String displayString; - @override - final String instanceRefId; - @override - final Setter? setter; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstanceDetails.string(displayString: $displayString, instanceRefId: $instanceRefId, setter: $setter)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstanceDetails.string')) - ..add(DiagnosticsProperty('displayString', displayString)) - ..add(DiagnosticsProperty('instanceRefId', instanceRefId)) - ..add(DiagnosticsProperty('setter', setter)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is StringInstance && - const DeepCollectionEquality() - .equals(other.displayString, displayString) && - const DeepCollectionEquality() - .equals(other.instanceRefId, instanceRefId) && - (identical(other.setter, setter) || other.setter == setter)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(displayString), - const DeepCollectionEquality().hash(instanceRefId), - setter); - - @JsonKey(ignore: true) - @override - $StringInstanceCopyWith get copyWith => - _$StringInstanceCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(Setter? setter) nill, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - boolean, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - number, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - string, - required TResult Function(List keys, int hash, - String instanceRefId, Setter? setter) - map, - required TResult Function( - int length, int hash, String instanceRefId, Setter? setter) - list, - required TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance) - object, - required TResult Function( - String type, String value, Setter? setter, String instanceRefId) - enumeration, - }) { - return string(displayString, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - }) { - return string?.call(displayString, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - required TResult orElse(), - }) { - if (string != null) { - return string(displayString, instanceRefId, setter); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(NullInstance value) nill, - required TResult Function(BoolInstance value) boolean, - required TResult Function(NumInstance value) number, - required TResult Function(StringInstance value) string, - required TResult Function(MapInstance value) map, - required TResult Function(ListInstance value) list, - required TResult Function(ObjectInstance value) object, - required TResult Function(EnumInstance value) enumeration, - }) { - return string(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - }) { - return string?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - required TResult orElse(), - }) { - if (string != null) { - return string(this); - } - return orElse(); - } -} - -abstract class StringInstance extends InstanceDetails { - factory StringInstance(String displayString, - {required String instanceRefId, - required Setter? setter}) = _$StringInstance; - StringInstance._() : super._(); - - String get displayString; - String get instanceRefId; - @override - Setter? get setter; - @override - @JsonKey(ignore: true) - $StringInstanceCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $MapInstanceCopyWith<$Res> - implements $InstanceDetailsCopyWith<$Res> { - factory $MapInstanceCopyWith( - MapInstance value, $Res Function(MapInstance) then) = - _$MapInstanceCopyWithImpl<$Res>; - @override - $Res call( - {List keys, - int hash, - String instanceRefId, - Setter? setter}); -} - -/// @nodoc -class _$MapInstanceCopyWithImpl<$Res> - extends _$InstanceDetailsCopyWithImpl<$Res> - implements $MapInstanceCopyWith<$Res> { - _$MapInstanceCopyWithImpl( - MapInstance _value, $Res Function(MapInstance) _then) - : super(_value, (v) => _then(v as MapInstance)); - - @override - MapInstance get _value => super._value as MapInstance; - - @override - $Res call({ - Object? keys = freezed, - Object? hash = freezed, - Object? instanceRefId = freezed, - Object? setter = freezed, - }) { - return _then(MapInstance( - keys == freezed - ? _value.keys - : keys // ignore: cast_nullable_to_non_nullable - as List, - hash: hash == freezed - ? _value.hash - : hash // ignore: cast_nullable_to_non_nullable - as int, - instanceRefId: instanceRefId == freezed - ? _value.instanceRefId - : instanceRefId // ignore: cast_nullable_to_non_nullable - as String, - setter: setter == freezed - ? _value.setter - : setter // ignore: cast_nullable_to_non_nullable - as Setter?, - )); - } -} - -/// @nodoc - -class _$MapInstance extends MapInstance with DiagnosticableTreeMixin { - _$MapInstance(this.keys, - {required this.hash, required this.instanceRefId, required this.setter}) - : super._(); - - @override - final List keys; - @override - final int hash; - @override - final String instanceRefId; - @override - final Setter? setter; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstanceDetails.map(keys: $keys, hash: $hash, instanceRefId: $instanceRefId, setter: $setter)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstanceDetails.map')) - ..add(DiagnosticsProperty('keys', keys)) - ..add(DiagnosticsProperty('hash', hash)) - ..add(DiagnosticsProperty('instanceRefId', instanceRefId)) - ..add(DiagnosticsProperty('setter', setter)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is MapInstance && - const DeepCollectionEquality().equals(other.keys, keys) && - const DeepCollectionEquality().equals(other.hash, hash) && - const DeepCollectionEquality() - .equals(other.instanceRefId, instanceRefId) && - (identical(other.setter, setter) || other.setter == setter)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(keys), - const DeepCollectionEquality().hash(hash), - const DeepCollectionEquality().hash(instanceRefId), - setter); - - @JsonKey(ignore: true) - @override - $MapInstanceCopyWith get copyWith => - _$MapInstanceCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(Setter? setter) nill, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - boolean, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - number, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - string, - required TResult Function(List keys, int hash, - String instanceRefId, Setter? setter) - map, - required TResult Function( - int length, int hash, String instanceRefId, Setter? setter) - list, - required TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance) - object, - required TResult Function( - String type, String value, Setter? setter, String instanceRefId) - enumeration, - }) { - return map(keys, hash, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - }) { - return map?.call(keys, hash, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - required TResult orElse(), - }) { - if (map != null) { - return map(keys, hash, instanceRefId, setter); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(NullInstance value) nill, - required TResult Function(BoolInstance value) boolean, - required TResult Function(NumInstance value) number, - required TResult Function(StringInstance value) string, - required TResult Function(MapInstance value) map, - required TResult Function(ListInstance value) list, - required TResult Function(ObjectInstance value) object, - required TResult Function(EnumInstance value) enumeration, - }) { - return map(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - }) { - return map?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - required TResult orElse(), - }) { - if (map != null) { - return map(this); - } - return orElse(); - } -} - -abstract class MapInstance extends InstanceDetails { - factory MapInstance(List keys, - {required int hash, - required String instanceRefId, - required Setter? setter}) = _$MapInstance; - MapInstance._() : super._(); - - List get keys; - int get hash; - String get instanceRefId; - @override - Setter? get setter; - @override - @JsonKey(ignore: true) - $MapInstanceCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $ListInstanceCopyWith<$Res> - implements $InstanceDetailsCopyWith<$Res> { - factory $ListInstanceCopyWith( - ListInstance value, $Res Function(ListInstance) then) = - _$ListInstanceCopyWithImpl<$Res>; - @override - $Res call({int length, int hash, String instanceRefId, Setter? setter}); -} - -/// @nodoc -class _$ListInstanceCopyWithImpl<$Res> - extends _$InstanceDetailsCopyWithImpl<$Res> - implements $ListInstanceCopyWith<$Res> { - _$ListInstanceCopyWithImpl( - ListInstance _value, $Res Function(ListInstance) _then) - : super(_value, (v) => _then(v as ListInstance)); - - @override - ListInstance get _value => super._value as ListInstance; - - @override - $Res call({ - Object? length = freezed, - Object? hash = freezed, - Object? instanceRefId = freezed, - Object? setter = freezed, - }) { - return _then(ListInstance( - length: length == freezed - ? _value.length - : length // ignore: cast_nullable_to_non_nullable - as int, - hash: hash == freezed - ? _value.hash - : hash // ignore: cast_nullable_to_non_nullable - as int, - instanceRefId: instanceRefId == freezed - ? _value.instanceRefId - : instanceRefId // ignore: cast_nullable_to_non_nullable - as String, - setter: setter == freezed - ? _value.setter - : setter // ignore: cast_nullable_to_non_nullable - as Setter?, - )); - } -} - -/// @nodoc - -class _$ListInstance extends ListInstance with DiagnosticableTreeMixin { - _$ListInstance( - {required this.length, - required this.hash, - required this.instanceRefId, - required this.setter}) - : super._(); - - @override - final int length; - @override - final int hash; - @override - final String instanceRefId; - @override - final Setter? setter; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstanceDetails.list(length: $length, hash: $hash, instanceRefId: $instanceRefId, setter: $setter)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstanceDetails.list')) - ..add(DiagnosticsProperty('length', length)) - ..add(DiagnosticsProperty('hash', hash)) - ..add(DiagnosticsProperty('instanceRefId', instanceRefId)) - ..add(DiagnosticsProperty('setter', setter)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is ListInstance && - const DeepCollectionEquality().equals(other.length, length) && - const DeepCollectionEquality().equals(other.hash, hash) && - const DeepCollectionEquality() - .equals(other.instanceRefId, instanceRefId) && - (identical(other.setter, setter) || other.setter == setter)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(length), - const DeepCollectionEquality().hash(hash), - const DeepCollectionEquality().hash(instanceRefId), - setter); - - @JsonKey(ignore: true) - @override - $ListInstanceCopyWith get copyWith => - _$ListInstanceCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(Setter? setter) nill, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - boolean, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - number, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - string, - required TResult Function(List keys, int hash, - String instanceRefId, Setter? setter) - map, - required TResult Function( - int length, int hash, String instanceRefId, Setter? setter) - list, - required TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance) - object, - required TResult Function( - String type, String value, Setter? setter, String instanceRefId) - enumeration, - }) { - return list(length, hash, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - }) { - return list?.call(length, hash, instanceRefId, setter); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - required TResult orElse(), - }) { - if (list != null) { - return list(length, hash, instanceRefId, setter); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(NullInstance value) nill, - required TResult Function(BoolInstance value) boolean, - required TResult Function(NumInstance value) number, - required TResult Function(StringInstance value) string, - required TResult Function(MapInstance value) map, - required TResult Function(ListInstance value) list, - required TResult Function(ObjectInstance value) object, - required TResult Function(EnumInstance value) enumeration, - }) { - return list(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - }) { - return list?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - required TResult orElse(), - }) { - if (list != null) { - return list(this); - } - return orElse(); - } -} - -abstract class ListInstance extends InstanceDetails { - factory ListInstance( - {required int length, - required int hash, - required String instanceRefId, - required Setter? setter}) = _$ListInstance; - ListInstance._() : super._(); - - int get length; - int get hash; - String get instanceRefId; - @override - Setter? get setter; - @override - @JsonKey(ignore: true) - $ListInstanceCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $ObjectInstanceCopyWith<$Res> - implements $InstanceDetailsCopyWith<$Res> { - factory $ObjectInstanceCopyWith( - ObjectInstance value, $Res Function(ObjectInstance) then) = - _$ObjectInstanceCopyWithImpl<$Res>; - @override - $Res call( - {List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance}); -} - -/// @nodoc -class _$ObjectInstanceCopyWithImpl<$Res> - extends _$InstanceDetailsCopyWithImpl<$Res> - implements $ObjectInstanceCopyWith<$Res> { - _$ObjectInstanceCopyWithImpl( - ObjectInstance _value, $Res Function(ObjectInstance) _then) - : super(_value, (v) => _then(v as ObjectInstance)); - - @override - ObjectInstance get _value => super._value as ObjectInstance; - - @override - $Res call({ - Object? fields = freezed, - Object? type = freezed, - Object? hash = freezed, - Object? instanceRefId = freezed, - Object? setter = freezed, - Object? evalForInstance = freezed, - }) { - return _then(ObjectInstance( - fields == freezed - ? _value.fields - : fields // ignore: cast_nullable_to_non_nullable - as List, - type: type == freezed - ? _value.type - : type // ignore: cast_nullable_to_non_nullable - as String, - hash: hash == freezed - ? _value.hash - : hash // ignore: cast_nullable_to_non_nullable - as int, - instanceRefId: instanceRefId == freezed - ? _value.instanceRefId - : instanceRefId // ignore: cast_nullable_to_non_nullable - as String, - setter: setter == freezed - ? _value.setter - : setter // ignore: cast_nullable_to_non_nullable - as Setter?, - evalForInstance: evalForInstance == freezed - ? _value.evalForInstance - : evalForInstance // ignore: cast_nullable_to_non_nullable - as EvalOnDartLibrary, - )); - } -} - -/// @nodoc - -class _$ObjectInstance extends ObjectInstance with DiagnosticableTreeMixin { - _$ObjectInstance(this.fields, - {required this.type, - required this.hash, - required this.instanceRefId, - required this.setter, - required this.evalForInstance}) - : super._(); - - @override - final List fields; - @override - final String type; - @override - final int hash; - @override - final String instanceRefId; - @override - final Setter? setter; - @override - - /// An [EvalOnDartLibrary] associated with the library of this object - /// - /// This allows to edit private properties. - final EvalOnDartLibrary evalForInstance; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstanceDetails.object(fields: $fields, type: $type, hash: $hash, instanceRefId: $instanceRefId, setter: $setter, evalForInstance: $evalForInstance)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstanceDetails.object')) - ..add(DiagnosticsProperty('fields', fields)) - ..add(DiagnosticsProperty('type', type)) - ..add(DiagnosticsProperty('hash', hash)) - ..add(DiagnosticsProperty('instanceRefId', instanceRefId)) - ..add(DiagnosticsProperty('setter', setter)) - ..add(DiagnosticsProperty('evalForInstance', evalForInstance)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is ObjectInstance && - const DeepCollectionEquality().equals(other.fields, fields) && - const DeepCollectionEquality().equals(other.type, type) && - const DeepCollectionEquality().equals(other.hash, hash) && - const DeepCollectionEquality() - .equals(other.instanceRefId, instanceRefId) && - (identical(other.setter, setter) || other.setter == setter) && - const DeepCollectionEquality() - .equals(other.evalForInstance, evalForInstance)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(fields), - const DeepCollectionEquality().hash(type), - const DeepCollectionEquality().hash(hash), - const DeepCollectionEquality().hash(instanceRefId), - setter, - const DeepCollectionEquality().hash(evalForInstance)); - - @JsonKey(ignore: true) - @override - $ObjectInstanceCopyWith get copyWith => - _$ObjectInstanceCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(Setter? setter) nill, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - boolean, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - number, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - string, - required TResult Function(List keys, int hash, - String instanceRefId, Setter? setter) - map, - required TResult Function( - int length, int hash, String instanceRefId, Setter? setter) - list, - required TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance) - object, - required TResult Function( - String type, String value, Setter? setter, String instanceRefId) - enumeration, - }) { - return object(fields, type, hash, instanceRefId, setter, evalForInstance); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - }) { - return object?.call( - fields, type, hash, instanceRefId, setter, evalForInstance); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - required TResult orElse(), - }) { - if (object != null) { - return object(fields, type, hash, instanceRefId, setter, evalForInstance); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(NullInstance value) nill, - required TResult Function(BoolInstance value) boolean, - required TResult Function(NumInstance value) number, - required TResult Function(StringInstance value) string, - required TResult Function(MapInstance value) map, - required TResult Function(ListInstance value) list, - required TResult Function(ObjectInstance value) object, - required TResult Function(EnumInstance value) enumeration, - }) { - return object(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - }) { - return object?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - required TResult orElse(), - }) { - if (object != null) { - return object(this); - } - return orElse(); - } -} - -abstract class ObjectInstance extends InstanceDetails { - factory ObjectInstance(List fields, - {required String type, - required int hash, - required String instanceRefId, - required Setter? setter, - required EvalOnDartLibrary evalForInstance}) = _$ObjectInstance; - ObjectInstance._() : super._(); - - List get fields; - String get type; - int get hash; - String get instanceRefId; - @override - Setter? get setter; - - /// An [EvalOnDartLibrary] associated with the library of this object - /// - /// This allows to edit private properties. - EvalOnDartLibrary get evalForInstance; - @override - @JsonKey(ignore: true) - $ObjectInstanceCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $EnumInstanceCopyWith<$Res> - implements $InstanceDetailsCopyWith<$Res> { - factory $EnumInstanceCopyWith( - EnumInstance value, $Res Function(EnumInstance) then) = - _$EnumInstanceCopyWithImpl<$Res>; - @override - $Res call({String type, String value, Setter? setter, String instanceRefId}); -} - -/// @nodoc -class _$EnumInstanceCopyWithImpl<$Res> - extends _$InstanceDetailsCopyWithImpl<$Res> - implements $EnumInstanceCopyWith<$Res> { - _$EnumInstanceCopyWithImpl( - EnumInstance _value, $Res Function(EnumInstance) _then) - : super(_value, (v) => _then(v as EnumInstance)); - - @override - EnumInstance get _value => super._value as EnumInstance; - - @override - $Res call({ - Object? type = freezed, - Object? value = freezed, - Object? setter = freezed, - Object? instanceRefId = freezed, - }) { - return _then(EnumInstance( - type: type == freezed - ? _value.type - : type // ignore: cast_nullable_to_non_nullable - as String, - value: value == freezed - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as String, - setter: setter == freezed - ? _value.setter - : setter // ignore: cast_nullable_to_non_nullable - as Setter?, - instanceRefId: instanceRefId == freezed - ? _value.instanceRefId - : instanceRefId // ignore: cast_nullable_to_non_nullable - as String, - )); - } -} - -/// @nodoc - -class _$EnumInstance extends EnumInstance with DiagnosticableTreeMixin { - _$EnumInstance( - {required this.type, - required this.value, - required this.setter, - required this.instanceRefId}) - : super._(); - - @override - final String type; - @override - final String value; - @override - final Setter? setter; - @override - final String instanceRefId; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstanceDetails.enumeration(type: $type, value: $value, setter: $setter, instanceRefId: $instanceRefId)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstanceDetails.enumeration')) - ..add(DiagnosticsProperty('type', type)) - ..add(DiagnosticsProperty('value', value)) - ..add(DiagnosticsProperty('setter', setter)) - ..add(DiagnosticsProperty('instanceRefId', instanceRefId)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is EnumInstance && - const DeepCollectionEquality().equals(other.type, type) && - const DeepCollectionEquality().equals(other.value, value) && - (identical(other.setter, setter) || other.setter == setter) && - const DeepCollectionEquality() - .equals(other.instanceRefId, instanceRefId)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(type), - const DeepCollectionEquality().hash(value), - setter, - const DeepCollectionEquality().hash(instanceRefId)); - - @JsonKey(ignore: true) - @override - $EnumInstanceCopyWith get copyWith => - _$EnumInstanceCopyWithImpl(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(Setter? setter) nill, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - boolean, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - number, - required TResult Function( - String displayString, String instanceRefId, Setter? setter) - string, - required TResult Function(List keys, int hash, - String instanceRefId, Setter? setter) - map, - required TResult Function( - int length, int hash, String instanceRefId, Setter? setter) - list, - required TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance) - object, - required TResult Function( - String type, String value, Setter? setter, String instanceRefId) - enumeration, - }) { - return enumeration(type, value, setter, instanceRefId); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - }) { - return enumeration?.call(type, value, setter, instanceRefId); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(Setter? setter)? nill, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - boolean, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - number, - TResult Function( - String displayString, String instanceRefId, Setter? setter)? - string, - TResult Function(List keys, int hash, String instanceRefId, - Setter? setter)? - map, - TResult Function( - int length, int hash, String instanceRefId, Setter? setter)? - list, - TResult Function( - List fields, - String type, - int hash, - String instanceRefId, - Setter? setter, - EvalOnDartLibrary evalForInstance)? - object, - TResult Function( - String type, String value, Setter? setter, String instanceRefId)? - enumeration, - required TResult orElse(), - }) { - if (enumeration != null) { - return enumeration(type, value, setter, instanceRefId); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(NullInstance value) nill, - required TResult Function(BoolInstance value) boolean, - required TResult Function(NumInstance value) number, - required TResult Function(StringInstance value) string, - required TResult Function(MapInstance value) map, - required TResult Function(ListInstance value) list, - required TResult Function(ObjectInstance value) object, - required TResult Function(EnumInstance value) enumeration, - }) { - return enumeration(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - }) { - return enumeration?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(NullInstance value)? nill, - TResult Function(BoolInstance value)? boolean, - TResult Function(NumInstance value)? number, - TResult Function(StringInstance value)? string, - TResult Function(MapInstance value)? map, - TResult Function(ListInstance value)? list, - TResult Function(ObjectInstance value)? object, - TResult Function(EnumInstance value)? enumeration, - required TResult orElse(), - }) { - if (enumeration != null) { - return enumeration(this); - } - return orElse(); - } -} - -abstract class EnumInstance extends InstanceDetails { - factory EnumInstance( - {required String type, - required String value, - required Setter? setter, - required String instanceRefId}) = _$EnumInstance; - EnumInstance._() : super._(); - - String get type; - String get value; - @override - Setter? get setter; - String get instanceRefId; - @override - @JsonKey(ignore: true) - $EnumInstanceCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -class _$InstancePathTearOff { - const _$InstancePathTearOff(); - - _InstancePathFromInstanceId fromInstanceId(String instanceId, - {List pathToProperty = const []}) { - return _InstancePathFromInstanceId( - instanceId, - pathToProperty: pathToProperty, - ); - } - - _InstancePathFromProviderId fromProviderId(String providerId, - {List pathToProperty = const []}) { - return _InstancePathFromProviderId( - providerId, - pathToProperty: pathToProperty, - ); - } -} - -/// @nodoc -const $InstancePath = _$InstancePathTearOff(); - -/// @nodoc -mixin _$InstancePath { - List get pathToProperty => throw _privateConstructorUsedError; - - @optionalTypeArgs - TResult when({ - required TResult Function( - String instanceId, List pathToProperty) - fromInstanceId, - required TResult Function( - String providerId, List pathToProperty) - fromProviderId, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(String instanceId, List pathToProperty)? - fromInstanceId, - TResult Function(String providerId, List pathToProperty)? - fromProviderId, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(String instanceId, List pathToProperty)? - fromInstanceId, - TResult Function(String providerId, List pathToProperty)? - fromProviderId, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult map({ - required TResult Function(_InstancePathFromInstanceId value) fromInstanceId, - required TResult Function(_InstancePathFromProviderId value) fromProviderId, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(_InstancePathFromInstanceId value)? fromInstanceId, - TResult Function(_InstancePathFromProviderId value)? fromProviderId, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_InstancePathFromInstanceId value)? fromInstanceId, - TResult Function(_InstancePathFromProviderId value)? fromProviderId, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; - - @JsonKey(ignore: true) - $InstancePathCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $InstancePathCopyWith<$Res> { - factory $InstancePathCopyWith( - InstancePath value, $Res Function(InstancePath) then) = - _$InstancePathCopyWithImpl<$Res>; - $Res call({List pathToProperty}); -} - -/// @nodoc -class _$InstancePathCopyWithImpl<$Res> implements $InstancePathCopyWith<$Res> { - _$InstancePathCopyWithImpl(this._value, this._then); - - final InstancePath _value; - // ignore: unused_field - final $Res Function(InstancePath) _then; - - @override - $Res call({ - Object? pathToProperty = freezed, - }) { - return _then(_value.copyWith( - pathToProperty: pathToProperty == freezed - ? _value.pathToProperty - : pathToProperty // ignore: cast_nullable_to_non_nullable - as List, - )); - } -} - -/// @nodoc -abstract class _$InstancePathFromInstanceIdCopyWith<$Res> - implements $InstancePathCopyWith<$Res> { - factory _$InstancePathFromInstanceIdCopyWith( - _InstancePathFromInstanceId value, - $Res Function(_InstancePathFromInstanceId) then) = - __$InstancePathFromInstanceIdCopyWithImpl<$Res>; - @override - $Res call({String instanceId, List pathToProperty}); -} - -/// @nodoc -class __$InstancePathFromInstanceIdCopyWithImpl<$Res> - extends _$InstancePathCopyWithImpl<$Res> - implements _$InstancePathFromInstanceIdCopyWith<$Res> { - __$InstancePathFromInstanceIdCopyWithImpl(_InstancePathFromInstanceId _value, - $Res Function(_InstancePathFromInstanceId) _then) - : super(_value, (v) => _then(v as _InstancePathFromInstanceId)); - - @override - _InstancePathFromInstanceId get _value => - super._value as _InstancePathFromInstanceId; - - @override - $Res call({ - Object? instanceId = freezed, - Object? pathToProperty = freezed, - }) { - return _then(_InstancePathFromInstanceId( - instanceId == freezed - ? _value.instanceId - : instanceId // ignore: cast_nullable_to_non_nullable - as String, - pathToProperty: pathToProperty == freezed - ? _value.pathToProperty - : pathToProperty // ignore: cast_nullable_to_non_nullable - as List, - )); - } -} - -/// @nodoc - -class _$_InstancePathFromInstanceId extends _InstancePathFromInstanceId - with DiagnosticableTreeMixin { - const _$_InstancePathFromInstanceId(this.instanceId, - {this.pathToProperty = const []}) - : super._(); - - @override - final String instanceId; - @JsonKey() - @override - final List pathToProperty; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstancePath.fromInstanceId(instanceId: $instanceId, pathToProperty: $pathToProperty)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstancePath.fromInstanceId')) - ..add(DiagnosticsProperty('instanceId', instanceId)) - ..add(DiagnosticsProperty('pathToProperty', pathToProperty)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _InstancePathFromInstanceId && - const DeepCollectionEquality() - .equals(other.instanceId, instanceId) && - const DeepCollectionEquality() - .equals(other.pathToProperty, pathToProperty)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(instanceId), - const DeepCollectionEquality().hash(pathToProperty)); - - @JsonKey(ignore: true) - @override - _$InstancePathFromInstanceIdCopyWith<_InstancePathFromInstanceId> - get copyWith => __$InstancePathFromInstanceIdCopyWithImpl< - _InstancePathFromInstanceId>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function( - String instanceId, List pathToProperty) - fromInstanceId, - required TResult Function( - String providerId, List pathToProperty) - fromProviderId, - }) { - return fromInstanceId(instanceId, pathToProperty); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(String instanceId, List pathToProperty)? - fromInstanceId, - TResult Function(String providerId, List pathToProperty)? - fromProviderId, - }) { - return fromInstanceId?.call(instanceId, pathToProperty); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(String instanceId, List pathToProperty)? - fromInstanceId, - TResult Function(String providerId, List pathToProperty)? - fromProviderId, - required TResult orElse(), - }) { - if (fromInstanceId != null) { - return fromInstanceId(instanceId, pathToProperty); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(_InstancePathFromInstanceId value) fromInstanceId, - required TResult Function(_InstancePathFromProviderId value) fromProviderId, - }) { - return fromInstanceId(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(_InstancePathFromInstanceId value)? fromInstanceId, - TResult Function(_InstancePathFromProviderId value)? fromProviderId, - }) { - return fromInstanceId?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_InstancePathFromInstanceId value)? fromInstanceId, - TResult Function(_InstancePathFromProviderId value)? fromProviderId, - required TResult orElse(), - }) { - if (fromInstanceId != null) { - return fromInstanceId(this); - } - return orElse(); - } -} - -abstract class _InstancePathFromInstanceId extends InstancePath { - const factory _InstancePathFromInstanceId(String instanceId, - {List pathToProperty}) = _$_InstancePathFromInstanceId; - const _InstancePathFromInstanceId._() : super._(); - - String get instanceId; - @override - List get pathToProperty; - @override - @JsonKey(ignore: true) - _$InstancePathFromInstanceIdCopyWith<_InstancePathFromInstanceId> - get copyWith => throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class _$InstancePathFromProviderIdCopyWith<$Res> - implements $InstancePathCopyWith<$Res> { - factory _$InstancePathFromProviderIdCopyWith( - _InstancePathFromProviderId value, - $Res Function(_InstancePathFromProviderId) then) = - __$InstancePathFromProviderIdCopyWithImpl<$Res>; - @override - $Res call({String providerId, List pathToProperty}); -} - -/// @nodoc -class __$InstancePathFromProviderIdCopyWithImpl<$Res> - extends _$InstancePathCopyWithImpl<$Res> - implements _$InstancePathFromProviderIdCopyWith<$Res> { - __$InstancePathFromProviderIdCopyWithImpl(_InstancePathFromProviderId _value, - $Res Function(_InstancePathFromProviderId) _then) - : super(_value, (v) => _then(v as _InstancePathFromProviderId)); - - @override - _InstancePathFromProviderId get _value => - super._value as _InstancePathFromProviderId; - - @override - $Res call({ - Object? providerId = freezed, - Object? pathToProperty = freezed, - }) { - return _then(_InstancePathFromProviderId( - providerId == freezed - ? _value.providerId - : providerId // ignore: cast_nullable_to_non_nullable - as String, - pathToProperty: pathToProperty == freezed - ? _value.pathToProperty - : pathToProperty // ignore: cast_nullable_to_non_nullable - as List, - )); - } -} - -/// @nodoc - -class _$_InstancePathFromProviderId extends _InstancePathFromProviderId - with DiagnosticableTreeMixin { - const _$_InstancePathFromProviderId(this.providerId, - {this.pathToProperty = const []}) - : super._(); - - @override - final String providerId; - @JsonKey() - @override - final List pathToProperty; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'InstancePath.fromProviderId(providerId: $providerId, pathToProperty: $pathToProperty)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'InstancePath.fromProviderId')) - ..add(DiagnosticsProperty('providerId', providerId)) - ..add(DiagnosticsProperty('pathToProperty', pathToProperty)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _InstancePathFromProviderId && - const DeepCollectionEquality() - .equals(other.providerId, providerId) && - const DeepCollectionEquality() - .equals(other.pathToProperty, pathToProperty)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(providerId), - const DeepCollectionEquality().hash(pathToProperty)); - - @JsonKey(ignore: true) - @override - _$InstancePathFromProviderIdCopyWith<_InstancePathFromProviderId> - get copyWith => __$InstancePathFromProviderIdCopyWithImpl< - _InstancePathFromProviderId>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function( - String instanceId, List pathToProperty) - fromInstanceId, - required TResult Function( - String providerId, List pathToProperty) - fromProviderId, - }) { - return fromProviderId(providerId, pathToProperty); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(String instanceId, List pathToProperty)? - fromInstanceId, - TResult Function(String providerId, List pathToProperty)? - fromProviderId, - }) { - return fromProviderId?.call(providerId, pathToProperty); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(String instanceId, List pathToProperty)? - fromInstanceId, - TResult Function(String providerId, List pathToProperty)? - fromProviderId, - required TResult orElse(), - }) { - if (fromProviderId != null) { - return fromProviderId(providerId, pathToProperty); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(_InstancePathFromInstanceId value) fromInstanceId, - required TResult Function(_InstancePathFromProviderId value) fromProviderId, - }) { - return fromProviderId(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(_InstancePathFromInstanceId value)? fromInstanceId, - TResult Function(_InstancePathFromProviderId value)? fromProviderId, - }) { - return fromProviderId?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_InstancePathFromInstanceId value)? fromInstanceId, - TResult Function(_InstancePathFromProviderId value)? fromProviderId, - required TResult orElse(), - }) { - if (fromProviderId != null) { - return fromProviderId(this); - } - return orElse(); - } -} - -abstract class _InstancePathFromProviderId extends InstancePath { - const factory _InstancePathFromProviderId(String providerId, - {List pathToProperty}) = _$_InstancePathFromProviderId; - const _InstancePathFromProviderId._() : super._(); - - String get providerId; - @override - List get pathToProperty; - @override - @JsonKey(ignore: true) - _$InstancePathFromProviderIdCopyWith<_InstancePathFromProviderId> - get copyWith => throw _privateConstructorUsedError; -} diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_providers.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_providers.dart deleted file mode 100644 index 9a5a13068d8..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_providers.dart +++ /dev/null @@ -1,436 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:async'; - -import 'package:collection/collection.dart'; -import 'package:devtools_app_shared/service.dart'; -import 'package:devtools_app_shared/utils.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:vm_service/vm_service.dart' hide SentinelException; - -import '../../../shared/globals.dart'; -import 'eval.dart'; -import 'instance_details.dart'; -import 'result.dart'; - -Future _resolveInstanceRefForPath( - InstancePath path, { - required AutoDisposeRef ref, - required Disposable isAlive, - required InstanceDetails? parent, -}) async { - if (parent == null) { - // root of the provider tree - - return path.map( - fromProviderId: (path) async { - final eval = await ref.watch(providerEvalProvider.future); - // cause the instances to be re-evaluated when the devtool is notified - // that a provider changed - ref.watch(_providerChanged(path.providerId)); - - return eval.safeEval( - 'ProviderBinding.debugInstance.providerDetails["${path.providerId}"]?.value', - isAlive: isAlive, - ); - }, - fromInstanceId: (path) async { - final eval = await ref.watch(evalProvider.future); - return eval.safeEval( - 'value', - isAlive: isAlive, - scope: {'value': path.instanceId}, - ); - }, - ); - } - - final eval = await ref.watch(evalProvider.future); - - return parent.maybeMap( - // TODO: support sets - // TODO: iterables should use iterators / next() for iterable to navigate, to avoid recomputing the content - - map: (parent) { - final keyPath = path.pathToProperty.last as MapKeyPath; - final key = keyPath.ref == null ? 'null' : 'key'; - final keyPathRef = keyPath.ref; - - return eval.safeEval( - 'parent[$key]', - isAlive: isAlive, - scope: { - 'parent': parent.instanceRefId, - if (keyPathRef != null) 'key': keyPathRef, - }, - ); - }, - list: (parent) { - final indexPath = path.pathToProperty.last as ListIndexPath; - - return eval.safeEval( - 'parent[${indexPath.index}]', - isAlive: isAlive, - scope: {'parent': parent.instanceRefId}, - ); - }, - object: (parent) { - final propertyPath = path.pathToProperty.last as PropertyPath; - - // compare by both name and ref ID because an object may have multiple - // fields with the same name - final field = parent.fields.firstWhere( - (element) => - element.name == propertyPath.name && - element.ownerName == propertyPath.ownerName && - element.ownerUri == propertyPath.ownerUri, - ); - - final ref = field.ref.dataOrThrow; - - // we cannot do `eval('parent.propertyName')` because it is possible for - // objects to have multiple properties with the same name - return eval.safeGetInstance(ref, isAlive); - }, - orElse: () => throw Exception('Unexpected instance type.'), - ); -} - -/// Update a variable using the `=` operator. -/// -/// In rare cases, it is possible for this function to mutate the wrong property. -/// This can happen when an object contains multiple fields with the same name -/// (such as private properties or overridden properties), where the conflicting -/// fields are both defined in the same library. -Future _mutate( - String newValueExpression, { - required InstancePath path, - required AutoDisposeRef ref, - required Disposable isAlive, - required InstanceDetails parent, -}) async { - await parent.maybeMap( - list: (parent) async { - final eval = await ref.watch(evalProvider.future); - final indexPath = path.pathToProperty.last as ListIndexPath; - - return eval.safeEval( - 'parent[${indexPath.index}] = $newValueExpression', - isAlive: isAlive, - scope: { - 'parent': parent.instanceRefId, - }, - ); - }, - map: (parent) async { - final eval = await ref.watch(evalProvider.future); - final keyPath = path.pathToProperty.last as MapKeyPath; - final keyRefVar = keyPath.ref == null ? 'null' : 'key'; - final keyPathRef = keyPath.ref; - - return eval.safeEval( - 'parent[$keyRefVar] = $newValueExpression', - isAlive: isAlive, - scope: { - 'parent': parent.instanceRefId, - if (keyPathRef != null) 'key': keyPathRef, - }, - ); - }, - // TODO test can mutate properties of a mixin placed in a different library that the class that uses it - object: (parent) { - final propertyPath = path.pathToProperty.last as PropertyPath; - - final field = parent.fields.firstWhere( - (f) => - f.name == propertyPath.name && - f.ownerName == propertyPath.ownerName, - ); - - return field.eval.safeEval( - '(parent as ${propertyPath.ownerName}).${propertyPath.name} = $newValueExpression', - isAlive: isAlive, - scope: { - 'parent': parent.instanceRefId, - }, - ); - }, - orElse: () => throw StateError('Can only mutate lists/maps/objects'), - ); - - // TODO(rrousselGit): call notifyListeners/setState/notifyClients based on the modified object - - // Since the same object can be used in multiple locations at once, we need - // to refresh the entire tree instead of just the node that was modified. - ref.refresh(instanceProvider(path.root)); - - // Forces the UI to rebuild after the state change - await serviceConnection.serviceManager.performHotReload(); -} - -Future _resolveParent( - AutoDisposeRef ref, - InstancePath path, -) async { - return path.pathToProperty.isNotEmpty - ? await ref.watch(instanceProvider(path.parent!).future) - : null; -} - -Future _tryParseEnum( - Instance instance, { - required EvalOnDartLibrary eval, - required Disposable isAlive, - required String instanceRefId, - required Setter? setter, -}) async { - if (instance.kind != InstanceKind.kPlainInstance || - instance.fields?.length != 2) { - return null; - } - - InstanceRef? findPropertyWithName(String name) { - return instance.fields - ?.firstWhereOrNull((element) => element.name == name) - ?.value; - } - - final nameRef = findPropertyWithName('_name'); - final indexRef = findPropertyWithName('index'); - if (nameRef == null || indexRef == null) return null; - - final nameInstanceFuture = eval.safeGetInstance(nameRef, isAlive); - final indexInstanceFuture = eval.safeGetInstance(indexRef, isAlive); - - final index = await indexInstanceFuture; - if (index.kind != InstanceKind.kInt) return null; - - final name = await nameInstanceFuture; - if (name.kind != InstanceKind.kString) return null; - - // Some Dart versions have for name "EnumType.valueName", others only have "valueName". - // So we have to strip the type manually - final nameSplit = name.valueAsString!.split('.'); - - return EnumInstance( - type: instance.classRef!.name!, - value: nameSplit.last, - instanceRefId: instanceRefId, - setter: setter, - ); -} - -Setter? _parseSetter({ - required InstancePath path, - required AutoDisposeRef ref, - required Disposable isAlive, - required InstanceDetails? parent, -}) { - if (parent == null) return null; - - Future mutate(String expression) { - return _mutate( - expression, - path: path, - ref: ref, - isAlive: isAlive, - parent: parent, - ); - } - - return parent.maybeMap( - // TODO const collections should have no setter - map: (parent) => mutate, - list: (parent) => mutate, - object: (parent) { - final keyPath = path.pathToProperty.last as PropertyPath; - - // Mutate properties by name as we can't mutate them from a reference. - // This may edit the wrong property when an object has two properties with - // with the same name. - // TODO use ownerUri - final field = parent.fields.firstWhere( - (field) => - field.name == keyPath.name && field.ownerName == keyPath.ownerName, - ); - - if (field.isFinal) return null; - return mutate; - }, - orElse: () => throw Exception('Unexpected instance type.'), - ); -} - -/// Fetches informations related to an instance/provider at a given path -/// -/// The UI should not be used directly. Instead, use [instanceProvider]. -// ignore: avoid-explicit-type-declaration, required due to cyclic definition. -final AutoDisposeFutureProviderFamily - instanceProvider = - AutoDisposeFutureProviderFamily( - (ref, path) async { - ref.watch(hotRestartEventProvider); - - final eval = await ref.watch(evalProvider.future); - - final isAlive = Disposable(); - ref.onDispose(isAlive.dispose); - - final parent = await _resolveParent(ref, path); - - final instanceRef = await _resolveInstanceRefForPath( - path, - ref: ref, - parent: parent, - isAlive: isAlive, - ); - - final setter = _parseSetter( - path: path, - isAlive: isAlive, - ref: ref, - parent: parent, - ); - - final instance = await eval.safeGetInstance(instanceRef, isAlive); - - switch (instance.kind) { - case InstanceKind.kNull: - return InstanceDetails.nill(setter: setter); - case InstanceKind.kBool: - return InstanceDetails.boolean( - instance.valueAsString!, - instanceRefId: instanceRef.id!, - setter: setter, - ); - case InstanceKind.kInt: - case InstanceKind.kDouble: - return InstanceDetails.number( - instance.valueAsString!, - instanceRefId: instanceRef.id!, - setter: setter, - ); - case InstanceKind.kString: - return InstanceDetails.string( - instance.valueAsString!, - instanceRefId: instanceRef.id!, - setter: setter, - ); - - case InstanceKind.kMap: - - // voluntarily throw if a key failed to load - final keysRef = instance.associations!.map((e) => e.key as InstanceRef); - - final keysFuture = Future.wait([ - for (final keyRef in keysRef) - ref.watch( - instanceProvider(InstancePath.fromInstanceId(keyRef.id!)).future, - ), - ]); - - return InstanceDetails.map( - await keysFuture, - hash: await eval.getHashCode(instance, isAlive: isAlive), - instanceRefId: instanceRef.id!, - setter: setter, - ); - - // TODO(rrousselGit): support sets - // TODO(rrousselGit): support custom lists - // TODO(rrousselGit): support Type - case InstanceKind.kList: - return InstanceDetails.list( - length: instance.length!, - hash: await eval.getHashCode(instance, isAlive: isAlive), - instanceRefId: instanceRef.id!, - setter: setter, - ); - - case InstanceKind.kPlainInstance: - default: - final enumDetails = await _tryParseEnum( - instance, - eval: eval, - isAlive: isAlive, - instanceRefId: instanceRef.id!, - setter: setter, - ); - - if (enumDetails != null) return enumDetails; - - final classInstance = - await eval.safeGetClass(instance.classRef!, isAlive); - final evalForInstance = - // TODO(rrousselGit) when can `library` be null? - ref.watch(libraryEvalProvider(classInstance.library!.uri!).future); - - final appName = tryParsePackageName(eval.isolate!.rootLib!.uri!); - final fields = await _parseFields( - classInstance, - ref, - eval, - isAlive: isAlive, - appName: appName, - ); - - return InstanceDetails.object( - fields.sorted((a, b) => sortFieldsByName(a.name, b.name)), - hash: await eval.getHashCode(instance, isAlive: isAlive), - type: classInstance.name!, - instanceRefId: instanceRef.id!, - evalForInstance: await evalForInstance, - setter: setter, - ); - } - }, -); - -final _packageNameExp = RegExp( - r'package:(.+?)/', -); - -String? tryParsePackageName(String uri) { - return _packageNameExp.firstMatch(uri)?.group(1); -} - -Future> _parseFields( - Class owner, - AutoDisposeRef ref, - EvalOnDartLibrary eval, { - required Disposable isAlive, - required String? appName, -}) { - return owner.fields! - .map((field) async { - final owner = - await eval.safeGetClass(field.owner! as ClassRef, isAlive); - final ownerUri = field.location!.script!.uri!; - final ownerName = owner.mixin?.name ?? owner.name!; - final ownerPackageName = tryParsePackageName(ownerUri); - - return ObjectField( - name: field.name!, - isFinal: field.isFinal!, - ref: parseSentinel(field), - ownerName: ownerName, - ownerUri: ownerUri, - eval: await ref.watch(libraryEvalProvider(ownerUri).future), - isDefinedByDependency: ownerPackageName != appName, - ); - }) - .toList(growable: false) - .wait; -} - -final _providerChanged = - AutoDisposeStreamProviderFamily((ref, id) async* { - final service = await ref.watch(serviceProvider.future); - - yield* service.onExtensionEvent.where((event) { - return event.extensionKind == 'provider:provider_changed' && - event.extensionData?.data['id'] == id; - }); -}); diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_viewer.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_viewer.dart deleted file mode 100644 index 174dc58226f..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_viewer.dart +++ /dev/null @@ -1,639 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// TODO(rrousselGit) merge this code with the debugger view - -import 'dart:async'; -import 'dart:math' as math; - -import 'package:devtools_app_shared/service.dart'; -import 'package:devtools_app_shared/ui.dart'; -import 'package:devtools_app_shared/utils.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -import '../../../shared/diagnostics_text_styles.dart'; -import '../sliver_iterable_child_delegate.dart'; -import 'instance_details.dart'; -import 'instance_providers.dart'; - -const typeColor = Color.fromARGB(255, 78, 201, 176); -const boolColor = Color.fromARGB(255, 86, 156, 214); -const nullColor = boolColor; -const numColor = Color.fromARGB(255, 181, 206, 168); -const stringColor = Color.fromARGB(255, 206, 145, 120); - -const rowHeight = 20.0; - -final isExpandedProvider = StateProviderFamily((ref, path) { - // expands the root by default, but not children - return path.pathToProperty.isEmpty; -}); - -final estimatedChildCountProvider = - AutoDisposeProviderFamily((ref, rootPath) { - int estimatedChildCount(InstancePath path) { - int one(InstanceDetails _) => 1; - - int expandableEstimatedChildCount(Iterable keys) { - if (!ref.watch(isExpandedProvider(path))) { - return 1; - } - return keys.fold(1, (acc, element) { - return acc + - estimatedChildCount( - path.pathForChild(element), - ); - }); - } - - return ref.watch(instanceProvider(path)).when( - loading: () => 1, - error: (err, stack) => 1, - data: (instance) { - return instance.map( - nill: one, - boolean: one, - number: one, - string: one, - enumeration: one, - map: (instance) { - return expandableEstimatedChildCount( - instance.keys.map( - (key) => PathToProperty.mapKey(ref: key.instanceRefId), - ), - ); - }, - list: (instance) { - return expandableEstimatedChildCount( - List.generate(instance.length, $PathToProperty.listIndex), - ); - }, - object: (instance) { - return expandableEstimatedChildCount( - instance.fields.map( - (field) => PathToProperty.fromObjectField(field), - ), - ); - }, - ); - }, - ); - } - - return estimatedChildCount(rootPath); -}); - -void showErrorSnackBar(BuildContext context, Object error) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text('Error: $error')), - ); -} - -class InstanceViewer extends ConsumerStatefulWidget { - const InstanceViewer({ - super.key, - required this.rootPath, - required this.showInternalProperties, - }); - - final InstancePath rootPath; - final bool showInternalProperties; - - @override - ConsumerState createState() => _InstanceViewerState(); -} - -class _InstanceViewerState extends ConsumerState { - final scrollController = ScrollController(); - - @override - void dispose() { - scrollController.dispose(); - super.dispose(); - } - - Iterable _buildError( - Object error, - StackTrace? _, - InstancePath __, - ) { - if (error is SentinelException) { - final valueAsString = error.sentinel.valueAsString; - if (valueAsString != null) return [Text(valueAsString)]; - } - - return const [Text('')]; - } - - Iterable _buildListViewItems( - BuildContext context, - WidgetRef ref, { - required InstancePath path, - bool disableExpand = false, - }) { - return ref.watch(instanceProvider(path)).when( - loading: () => const [Text('loading...')], - error: (err, stack) => _buildError(err, stack, path), - data: (instance) sync* { - final isExpanded = ref.watch(isExpandedProvider(path).state); - yield _buildHeader( - instance, - path: path, - isExpanded: isExpanded, - disableExpand: disableExpand, - ); - - if (isExpanded.state) { - yield* instance.maybeMap( - object: (instance) => _buildObjectItem( - context, - ref, - instance, - path: path, - ), - list: (list) => _buildListItem( - context, - ref, - list, - path: path, - ), - map: (map) => _buildMapItem( - context, - ref, - map, - path: path, - ), - // Reaches when the root of the instance tree is a string/numbers/bool/.... - orElse: () => const [], - ); - } - }, - ); - } - - Widget _buildHeader( - InstanceDetails instance, { - required InstancePath path, - StateController? isExpanded, - bool disableExpand = false, - }) { - return _Expandable( - key: ValueKey(path), - isExpandable: !disableExpand && instance.isExpandable, - isExpanded: isExpanded, - title: instance.map( - enumeration: (instance) => _EditableField( - setter: instance.setter, - initialEditString: '${instance.type}.${instance.value}', - child: Text.rich( - TextSpan( - children: [ - TextSpan( - text: instance.type, - style: const TextStyle(color: typeColor), - ), - TextSpan(text: '.${instance.value}'), - ], - ), - ), - ), - nill: (instance) => _EditableField( - setter: instance.setter, - initialEditString: 'null', - child: const Text('null', style: TextStyle(color: nullColor)), - ), - string: (instance) => _EditableField( - setter: instance.setter, - initialEditString: '"${instance.displayString}"', - child: Text.rich( - TextSpan( - children: [ - const TextSpan(text: '"'), - TextSpan( - text: instance.displayString, - style: const TextStyle(color: stringColor), - ), - const TextSpan(text: '"'), - ], - ), - ), - ), - number: (instance) => _EditableField( - setter: instance.setter, - initialEditString: instance.displayString, - child: Text( - instance.displayString, - style: const TextStyle(color: numColor), - ), - ), - boolean: (instance) => _EditableField( - setter: instance.setter, - initialEditString: instance.displayString, - child: Text( - instance.displayString, - style: const TextStyle(color: boolColor), - ), - ), - map: (instance) => _ObjectHeader( - startToken: '{', - endToken: '}', - hash: instance.hash, - meta: instance.keys.isEmpty - ? null - : '${instance.keys.length} ${pluralize('element', instance.keys.length)}', - ), - list: (instance) => _ObjectHeader( - startToken: '[', - endToken: ']', - hash: instance.hash, - meta: instance.length == 0 - ? null - : '${instance.length} ${pluralize('element', instance.length)}', - ), - object: (instance) => _ObjectHeader( - type: instance.type, - hash: instance.hash, - startToken: '', - endToken: '', - // Never show the number of elements when using custom objects - meta: null, - ), - ), - ); - } - - Iterable _buildMapItem( - BuildContext context, - WidgetRef ref, - MapInstance instance, { - required InstancePath path, - }) sync* { - for (final key in instance.keys) { - final value = _buildListViewItems( - context, - ref, - path: path.pathForChild(PathToProperty.mapKey(ref: key.instanceRefId)), - ); - - final keyHeader = _buildHeader(key, disableExpand: true, path: path); - - var isFirstItem = true; - for (final child in value) { - yield child != null - ? Padding( - padding: const EdgeInsets.only(left: defaultSpacing), - child: isFirstItem - ? Row( - children: [ - keyHeader, - const Text(': '), - Expanded(child: child), - ], - ) - : child, - ) - : const SizedBox(); - - isFirstItem = false; - } - - assert( - !isFirstItem, - 'Bad state: the value of $key did not render any widget', - ); - } - } - - Iterable _buildListItem( - BuildContext context, - WidgetRef ref, - ListInstance instance, { - required InstancePath path, - }) sync* { - for (var index = 0; index < instance.length; index++) { - final children = _buildListViewItems( - context, - ref, - path: path.pathForChild(PathToProperty.listIndex(index)), - ); - - bool isFirst = true; - - for (final child in children) { - Widget? rowItem = child; - - // Add the item index only on the first line of the element - if (isFirst && rowItem != null) { - isFirst = false; - rowItem = Row( - children: [ - Text('[$index]: '), - Expanded(child: rowItem), - ], - ); - } - - yield rowItem != null - ? Padding( - padding: const EdgeInsets.only(left: defaultSpacing), - child: rowItem, - ) - : const SizedBox(); - } - } - } - - Iterable _buildObjectItem( - BuildContext context, - WidgetRef ref, - ObjectInstance instance, { - required InstancePath path, - }) sync* { - for (final field in instance.fields) { - if (!widget.showInternalProperties && - field.isDefinedByDependency && - field.isPrivate) { - // Hide private properties from classes defined by dependencies - continue; - } - - final children = _buildListViewItems( - context, - ref, - path: path.pathForChild(PathToProperty.fromObjectField(field)), - ); - - bool isFirst = true; - - for (final child in children) { - Widget? rowItem = child; - if (isFirst && rowItem != null) { - isFirst = false; - rowItem = Row( - children: [ - if (field.isFinal) - Text( - 'final ', - style: DiagnosticsTextStyles.unimportant( - Theme.of(context).colorScheme, - ), - ), - Text('${field.name}: '), - Expanded(child: rowItem), - ], - ); - } - - yield rowItem != null - ? Padding( - padding: const EdgeInsets.only(left: defaultSpacing), - child: rowItem, - ) - : const SizedBox(); - } - } - } - - @override - Widget build(BuildContext context) { - return Scrollbar( - thumbVisibility: true, - controller: scrollController, - child: ListView.custom( - controller: scrollController, - // TODO: item height should be based on font size - itemExtent: rowHeight, - padding: const EdgeInsets.symmetric( - vertical: denseSpacing, - horizontal: defaultSpacing, - ), - childrenDelegate: SliverIterableChildDelegate( - _buildListViewItems( - context, - ref, - path: widget.rootPath, - disableExpand: true, - // ignore: avoid-unnecessary-type-casts, this code will be removed soon. - ).cast(), // This cast is necessary to avoid Null type errors - estimatedChildCount: - ref.watch(estimatedChildCountProvider(widget.rootPath)), - ), - ), - ); - } -} - -class _ObjectHeader extends StatelessWidget { - const _ObjectHeader({ - this.type, - required this.hash, - required this.meta, - required this.startToken, - required this.endToken, - }); - - final String? type; - final int hash; - final String? meta; - final String startToken; - final String endToken; - - @override - Widget build(BuildContext context) { - final colorScheme = Theme.of(context).colorScheme; - - return Text.rich( - TextSpan( - children: [ - if (type != null) - TextSpan( - text: type, - style: const TextStyle(color: typeColor), - ), - TextSpan( - text: '#${shortHash(hash)}', - style: DiagnosticsTextStyles.unimportant(colorScheme), - ), - TextSpan(text: startToken), - if (meta != null) TextSpan(text: meta), - TextSpan(text: endToken), - ], - ), - ); - } -} - -class _EditableField extends StatefulWidget { - const _EditableField({ - required this.setter, - required this.child, - required this.initialEditString, - }); - - final Widget child; - final String initialEditString; - final Future Function(String)? setter; - - @override - _EditableFieldState createState() => _EditableFieldState(); -} - -class _EditableFieldState extends State<_EditableField> { - final controller = TextEditingController(); - final focusNode = FocusNode(debugLabel: 'editable-field'); - final textFieldFocusNode = FocusNode(debugLabel: 'text-field'); - var isHovering = false; - - final _isAlive = Disposable(); - - @override - void dispose() { - _isAlive.dispose(); - controller.dispose(); - focusNode.dispose(); - textFieldFocusNode.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - if (widget.setter == null) return widget.child; - - final colorScheme = Theme.of(context).colorScheme; - - final editingChild = TextField( - autofocus: true, - controller: controller, - focusNode: textFieldFocusNode, - onSubmitted: (value) async { - try { - final setter = widget.setter; - if (setter != null) await setter(value); - } catch (err) { - if (!context.mounted) return; - showErrorSnackBar(context, err); - } - }, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(densePadding), - isDense: true, - border: OutlineInputBorder( - borderRadius: const BorderRadius.all(Radius.circular(5)), - borderSide: BorderSide(color: colorScheme.surface), - ), - ), - ); - - final displayChild = Stack( - clipBehavior: Clip.none, - children: [ - if (isHovering) - Positioned( - bottom: -5, - left: -5, - top: -5, - right: -5, - child: DecoratedBox( - decoration: BoxDecoration( - borderRadius: defaultBorderRadius, - border: Border.all(color: colorScheme.surface), - ), - ), - ), - GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - focusNode.requestFocus(); - textFieldFocusNode.requestFocus(); - controller.text = widget.initialEditString; - controller.selection = TextSelection( - baseOffset: 0, - extentOffset: widget.initialEditString.length, - ); - }, - child: Align( - alignment: Alignment.centerLeft, - heightFactor: 1, - child: widget.child, - ), - ), - ], - ); - - return AnimatedBuilder( - animation: focusNode, - builder: (context, _) { - final isEditing = focusNode.hasFocus; - - return Focus( - focusNode: focusNode, - onKeyEvent: (node, key) { - if (key.physicalKey == PhysicalKeyboardKey.escape) { - focusNode.unfocus(); - return KeyEventResult.handled; - } - return KeyEventResult.ignored; - }, - child: MouseRegion( - onEnter: (_) => setState(() => isHovering = true), - onExit: (_) => setState(() => isHovering = false), - // use a Stack to show the borders, to avoid the UI "moving" when hovering - child: isEditing ? editingChild : displayChild, - ), - ); - }, - ); - } -} - -class _Expandable extends StatelessWidget { - const _Expandable({ - super.key, - required this.isExpanded, - required this.isExpandable, - required this.title, - }); - - final StateController? isExpanded; - final bool isExpandable; - final Widget title; - - @override - Widget build(BuildContext context) { - if (!isExpandable) { - return Align( - alignment: Alignment.centerLeft, - child: title, - ); - } - - final isExpanded = this.isExpanded!; - - return GestureDetector( - onTap: () => isExpanded.state = !isExpanded.state, - behavior: HitTestBehavior.opaque, - child: Row( - children: [ - TweenAnimationBuilder( - tween: Tween(end: isExpanded.state ? 0 : -math.pi / 2), - duration: defaultDuration, - builder: (context, angle, _) { - return Transform.rotate( - angle: angle, - child: Icon( - Icons.expand_more, - size: defaultIconSize, - ), - ); - }, - ), - title, - ], - ), - ); - } -} diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/result.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/result.dart deleted file mode 100644 index 746129b8e75..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/result.dart +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:collection/collection.dart'; -import 'package:devtools_app_shared/service.dart'; -import 'package:flutter/foundation.dart'; -import 'package:vm_service/vm_service.dart' hide SentinelException, Error; - -import 'fake_freezed_annotation.dart'; - -// This part is generated using `package:freezed`, but without the devtool depending -// on the package. -// To update the generated files, temporarily add freezed/freezed_annotation/build_runner -// as dependencies; replace the `fake_freezed_annotation.dart` import with the -// real annotation package, then execute `pub run build_runner build`. -part 'result.freezed.dart'; - -@freezed -class Result with _$Result { - Result._(); - factory Result.data(T value) = _ResultData; - factory Result.error(Object error, StackTrace stackTrace) = _ResultError; - - factory Result.guard(T Function() cb) { - try { - return Result.data(cb()); - } catch (err, stack) { - return Result.error(err, stack); - } - } - - static Future> guardFuture(Future Function() cb) async { - try { - return Result.data(await cb()); - } catch (err, stack) { - return Result.error(err, stack); - } - } - - Result chain(Res Function(T value) cb) { - return when( - data: (value) { - try { - return Result.data(cb(value)); - } catch (err, stack) { - return Result.error(err, stack); - } - }, - error: (err, stack) => Result.error(err, stack), - ); - } - - T get dataOrThrow { - return when( - data: (value) => value, - error: Error.throwWithStackTrace, - ); - } -} - -Result parseSentinel(Object? value) { - if (value is T) return Result.data(value); - - if (value == null) { - return Result.error( - ArgumentError( - 'Expected $value to be an instance of $T but received `null`', - ), - StackTrace.current, - ); - } - - if (value is Sentinel) { - return Result.error( - SentinelException(value), - StackTrace.current, - ); - } - - return Result.error(value, StackTrace.current); -} diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/result.freezed.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/result.freezed.dart deleted file mode 100644 index 5463597051f..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/result.freezed.dart +++ /dev/null @@ -1,389 +0,0 @@ -// coverage:ignore-file -// GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target - -part of 'result.dart'; - -// ************************************************************************** -// FreezedGenerator -// ************************************************************************** - -T _$identity(T value) => value; - -final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); - -/// @nodoc -class _$ResultTearOff { - const _$ResultTearOff(); - - _ResultData data(T value) { - return _ResultData( - value, - ); - } - - _ResultError error(Object error, StackTrace stackTrace) { - return _ResultError( - error, - stackTrace, - ); - } -} - -/// @nodoc -const $Result = _$ResultTearOff(); - -/// @nodoc -mixin _$Result { - @optionalTypeArgs - TResult when({ - required TResult Function(T value) data, - required TResult Function(Object error, StackTrace stackTrace) error, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(T value)? data, - TResult Function(Object error, StackTrace stackTrace)? error, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(T value)? data, - TResult Function(Object error, StackTrace stackTrace)? error, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult map({ - required TResult Function(_ResultData value) data, - required TResult Function(_ResultError value) error, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(_ResultData value)? data, - TResult Function(_ResultError value)? error, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ResultData value)? data, - TResult Function(_ResultError value)? error, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $ResultCopyWith { - factory $ResultCopyWith(Result value, $Res Function(Result) then) = - _$ResultCopyWithImpl; -} - -/// @nodoc -class _$ResultCopyWithImpl implements $ResultCopyWith { - _$ResultCopyWithImpl(this._value, this._then); - - final Result _value; - // ignore: unused_field - final $Res Function(Result) _then; -} - -/// @nodoc -abstract class _$ResultDataCopyWith { - factory _$ResultDataCopyWith( - _ResultData value, $Res Function(_ResultData) then) = - __$ResultDataCopyWithImpl; - $Res call({T value}); -} - -/// @nodoc -class __$ResultDataCopyWithImpl extends _$ResultCopyWithImpl - implements _$ResultDataCopyWith { - __$ResultDataCopyWithImpl( - _ResultData _value, $Res Function(_ResultData) _then) - : super(_value, (v) => _then(v as _ResultData)); - - @override - _ResultData get _value => super._value as _ResultData; - - @override - $Res call({ - Object? value = freezed, - }) { - return _then(_ResultData( - value == freezed - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as T, - )); - } -} - -/// @nodoc - -class _$_ResultData extends _ResultData with DiagnosticableTreeMixin { - _$_ResultData(this.value) : super._(); - - @override - final T value; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'Result<$T>.data(value: $value)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'Result<$T>.data')) - ..add(DiagnosticsProperty('value', value)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _ResultData && - const DeepCollectionEquality().equals(other.value, value)); - } - - @override - int get hashCode => - Object.hash(runtimeType, const DeepCollectionEquality().hash(value)); - - @JsonKey(ignore: true) - @override - _$ResultDataCopyWith> get copyWith => - __$ResultDataCopyWithImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(T value) data, - required TResult Function(Object error, StackTrace stackTrace) error, - }) { - return data(value); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(T value)? data, - TResult Function(Object error, StackTrace stackTrace)? error, - }) { - return data?.call(value); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(T value)? data, - TResult Function(Object error, StackTrace stackTrace)? error, - required TResult orElse(), - }) { - if (data != null) { - return data(value); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ResultData value) data, - required TResult Function(_ResultError value) error, - }) { - return data(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(_ResultData value)? data, - TResult Function(_ResultError value)? error, - }) { - return data?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ResultData value)? data, - TResult Function(_ResultError value)? error, - required TResult orElse(), - }) { - if (data != null) { - return data(this); - } - return orElse(); - } -} - -abstract class _ResultData extends Result { - factory _ResultData(T value) = _$_ResultData; - _ResultData._() : super._(); - - T get value; - @JsonKey(ignore: true) - _$ResultDataCopyWith> get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class _$ResultErrorCopyWith { - factory _$ResultErrorCopyWith( - _ResultError value, $Res Function(_ResultError) then) = - __$ResultErrorCopyWithImpl; - $Res call({Object error, StackTrace stackTrace}); -} - -/// @nodoc -class __$ResultErrorCopyWithImpl extends _$ResultCopyWithImpl - implements _$ResultErrorCopyWith { - __$ResultErrorCopyWithImpl( - _ResultError _value, $Res Function(_ResultError) _then) - : super(_value, (v) => _then(v as _ResultError)); - - @override - _ResultError get _value => super._value as _ResultError; - - @override - $Res call({ - Object? error = freezed, - Object? stackTrace = freezed, - }) { - return _then(_ResultError( - error == freezed - ? _value.error - : error // ignore: cast_nullable_to_non_nullable - as Object, - stackTrace == freezed - ? _value.stackTrace - : stackTrace // ignore: cast_nullable_to_non_nullable - as StackTrace, - )); - } -} - -/// @nodoc - -class _$_ResultError extends _ResultError with DiagnosticableTreeMixin { - _$_ResultError(this.error, this.stackTrace) : super._(); - - @override - final Object error; - @override - final StackTrace stackTrace; - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'Result<$T>.error(error: $error, stackTrace: $stackTrace)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'Result<$T>.error')) - ..add(DiagnosticsProperty('error', error)) - ..add(DiagnosticsProperty('stackTrace', stackTrace)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _ResultError && - const DeepCollectionEquality().equals(other.error, error) && - const DeepCollectionEquality() - .equals(other.stackTrace, stackTrace)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(error), - const DeepCollectionEquality().hash(stackTrace)); - - @JsonKey(ignore: true) - @override - _$ResultErrorCopyWith> get copyWith => - __$ResultErrorCopyWithImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(T value) data, - required TResult Function(Object error, StackTrace stackTrace) error, - }) { - return error(this.error, stackTrace); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult Function(T value)? data, - TResult Function(Object error, StackTrace stackTrace)? error, - }) { - return error?.call(this.error, stackTrace); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(T value)? data, - TResult Function(Object error, StackTrace stackTrace)? error, - required TResult orElse(), - }) { - if (error != null) { - return error(this.error, stackTrace); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ResultData value) data, - required TResult Function(_ResultError value) error, - }) { - return error(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult Function(_ResultData value)? data, - TResult Function(_ResultError value)? error, - }) { - return error?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ResultData value)? data, - TResult Function(_ResultError value)? error, - required TResult orElse(), - }) { - if (error != null) { - return error(this); - } - return orElse(); - } -} - -abstract class _ResultError extends Result { - factory _ResultError(Object error, StackTrace stackTrace) = _$_ResultError; - _ResultError._() : super._(); - - Object get error; - StackTrace get stackTrace; - @JsonKey(ignore: true) - _$ResultErrorCopyWith> get copyWith => - throw _privateConstructorUsedError; -} diff --git a/packages/devtools_app/lib/src/screens/provider/provider_list.dart b/packages/devtools_app/lib/src/screens/provider/provider_list.dart deleted file mode 100644 index 891bd6b67e2..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/provider_list.dart +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:devtools_app_shared/ui.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -import 'provider_nodes.dart'; - -const _tilePadding = EdgeInsets.only( - left: defaultSpacing, - right: densePadding, - top: densePadding, - bottom: densePadding, -); - -final selectedProviderIdProvider = - AutoDisposeStateNotifierProvider, String?>( - (ref) { - final controller = StateController(null); - - ref.listen>>( - sortedProviderNodesProvider, - (prev, value) { - final nodes = value.asData?.value; - if (nodes == null) return; - - if (controller.state == null) { - if (nodes.isNotEmpty) controller.state = nodes.first.id; - return; - } - - if (nodes.isEmpty) { - controller.state = null; - } - - /// The previously selected provider was unmounted - else if (!nodes.any((node) => node.id == controller.state)) { - controller.state = nodes.first.id; - } - }, - fireImmediately: true, - ); - - return controller; - }, - name: 'selectedProviderIdProvider', -); - -class ProviderList extends ConsumerStatefulWidget { - const ProviderList({super.key}); - - @override - ConsumerState createState() => _ProviderListState(); -} - -class _ProviderListState extends ConsumerState { - final scrollController = ScrollController(); - - @override - void dispose() { - scrollController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final nodes = ref.watch(sortedProviderNodesProvider); - - return nodes.when( - loading: () => const Center(child: CircularProgressIndicator()), - error: (err, stack) => const Padding( - padding: _tilePadding, - child: Text(''), - ), - data: (nodes) { - return Scrollbar( - controller: scrollController, - thumbVisibility: true, - child: ListView.builder( - primary: false, - controller: scrollController, - itemCount: nodes.length, - itemBuilder: (context, index) { - final node = nodes[index]; - return ProviderNodeItem( - key: Key('provider-${node.id}'), - node: node, - ); - }, - ), - ); - }, - ); - } -} - -class ProviderNodeItem extends ConsumerWidget { - const ProviderNodeItem({ - super.key, - required this.node, - }); - - final ProviderNode node; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final isSelected = ref.watch(selectedProviderIdProvider) == node.id; - - final colorScheme = Theme.of(context).colorScheme; - final backgroundColor = - isSelected ? colorScheme.selectedRowBackgroundColor : null; - - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - ref.read(selectedProviderIdProvider.notifier).state = node.id; - }, - child: Container( - color: backgroundColor, - padding: _tilePadding, - child: Text('${node.type}()'), - ), - ); - } -} diff --git a/packages/devtools_app/lib/src/screens/provider/provider_nodes.dart b/packages/devtools_app/lib/src/screens/provider/provider_nodes.dart deleted file mode 100644 index e0ec37655ce..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/provider_nodes.dart +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:async'; - -import 'package:devtools_app_shared/service.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:vm_service/vm_service.dart'; - -import 'instance_viewer/eval.dart'; - -@immutable -class ProviderNode { - const ProviderNode({ - required this.id, - required this.type, - }); - - final String id; - final String type; -} - -final _providerListChanged = AutoDisposeStreamProvider((ref) async* { - final service = await ref.watch(serviceProvider.future); - - yield* service.onExtensionEvent.where((event) { - return event.extensionKind == 'provider:provider_list_changed'; - }); -}); - -final _rawProviderIdsProvider = AutoDisposeFutureProvider>( - (ref) async { - // recompute the list of providers on hot-restart - ref.watch(hotRestartEventProvider); - // cause the list of providers to be re-evaluated when notified of a change - ref.watch(_providerListChanged); - - final isAlive = Disposable(); - ref.onDispose(isAlive.dispose); - - final eval = await ref.watch(providerEvalProvider.future); - - final providerIdRefs = await eval.evalInstance( - 'ProviderBinding.debugInstance.providerDetails.keys.toList()', - isAlive: isAlive, - ); - - final providerIdInstances = await Future.wait([ - for (final idRef in providerIdRefs.elements!.cast()) - eval.safeGetInstance(idRef, isAlive), - ]); - - return [ - for (final idInstance in providerIdInstances) idInstance.valueAsString!, - ]; - }, - name: '_rawProviderIdsProvider', -); - -final _rawProviderNodeProvider = - AutoDisposeFutureProviderFamily( - (ref, id) async { - // recompute the providers informations on hot-restart - ref.watch(hotRestartEventProvider); - - final isAlive = Disposable(); - ref.onDispose(isAlive.dispose); - - final eval = await ref.watch(providerEvalProvider.future); - - final providerNodeInstance = await eval.evalInstance( - "ProviderBinding.debugInstance.providerDetails['$id']", - isAlive: isAlive, - ); - - Future getFieldWithName(String name) { - return eval.safeGetInstance( - providerNodeInstance.fields!.firstWhere((e) => e.name == name).value - as InstanceRef, - isAlive, - ); - } - - final type = await getFieldWithName('type'); - - return ProviderNode( - id: id, - type: type.valueAsString!, - ); - }, - name: '_rawProviderNodeProvider', -); - -/// Combines [providerIdsProvider] with [providerNodeProvider] to obtain all -/// the [ProviderNode]s at once, sorted alphabetically. -final sortedProviderNodesProvider = - AutoDisposeFutureProvider>((ref) async { - final ids = await ref.watch(_rawProviderIdsProvider.future); - - final nodes = await Future.wait( - ids.map((id) => ref.watch(_rawProviderNodeProvider(id).future)), - ); - - return nodes.toList()..sort((a, b) => a.type.compareTo(b.type)); -}); diff --git a/packages/devtools_app/lib/src/screens/provider/provider_screen.dart b/packages/devtools_app/lib/src/screens/provider/provider_screen.dart index a86016aa7a9..30162a6ea83 100644 --- a/packages/devtools_app/lib/src/screens/provider/provider_screen.dart +++ b/packages/devtools_app/lib/src/screens/provider/provider_screen.dart @@ -2,49 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:async'; - -import 'package:collection/collection.dart'; import 'package:devtools_app_shared/ui.dart'; -import 'package:devtools_app_shared/utils.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../shared/analytics/analytics.dart' as ga; -import '../../shared/banner_messages.dart'; import '../../shared/common_widgets.dart'; -import '../../shared/globals.dart'; import '../../shared/screen.dart'; -import 'instance_viewer/eval.dart'; -import 'instance_viewer/instance_details.dart'; -import 'instance_viewer/instance_providers.dart'; -import 'instance_viewer/instance_viewer.dart'; -import 'provider_list.dart'; -import 'provider_nodes.dart'; - -final _hasErrorProvider = Provider.autoDispose((ref) { - if (ref.watch(sortedProviderNodesProvider) is AsyncError) return true; - - final selectedProviderId = ref.watch(selectedProviderIdProvider); - - if (selectedProviderId == null) return false; - - final instance = ref.watch( - instanceProvider(InstancePath.fromProviderId(selectedProviderId)), - ); - - return instance is AsyncError; -}); - -final _selectedProviderNode = AutoDisposeProvider((ref) { - final selectedId = ref.watch(selectedProviderIdProvider); - - return ref.watch(sortedProviderNodesProvider).asData?.value.firstWhereOrNull( - (node) => node.id == selectedId, - ); -}); - -final _showInternals = StateProvider((ref) => false); class ProviderScreen extends Screen { ProviderScreen() : super.fromMetaData(ScreenMetaData.provider); @@ -53,151 +15,19 @@ class ProviderScreen extends Screen { @override Widget buildScreenBody(BuildContext context) { - return const ProviderScreenWrapper(); - } -} - -class ProviderScreenWrapper extends StatefulWidget { - const ProviderScreenWrapper({super.key}); - - @override - State createState() => _ProviderScreenWrapperState(); -} - -class _ProviderScreenWrapperState extends State - with AutoDisposeMixin { - @override - void initState() { - super.initState(); - ga.screen(ProviderScreen.id); - - cancelListeners(); - addAutoDisposeListener(serviceConnection.serviceManager.connectedState, () { - if (serviceConnection.serviceManager.connectedState.value.connected) { - setServiceConnectionForProviderScreen( - serviceConnection.serviceManager.service!, - ); - } - }); - } - - @override - Widget build(BuildContext context) { - return const ProviderScreenBody(); - } -} - -class ProviderScreenBody extends ConsumerWidget { - const ProviderScreenBody({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final splitAxis = SplitPane.axisFor(context, 0.85); - - // A provider will automatically be selected as soon as one is detected - final selectedProviderId = ref.watch(selectedProviderIdProvider); - final detailsTitleText = selectedProviderId != null - ? ref.watch(_selectedProviderNode)?.type ?? '' - : '[No provider selected]'; - - ref.listen(_hasErrorProvider, (_, hasError) { - if (hasError) showProviderErrorBanner(); - }); - - return SplitPane( - axis: splitAxis, - initialFractions: const [0.33, 0.67], - children: [ - const RoundedOutlinedBorder( - clip: true, - child: Column( - children: [ - AreaPaneHeader( - roundedTopBorder: false, - includeTopBorder: false, - title: Text('Providers'), - ), - Expanded( - child: ProviderList(), - ), - ], - ), + return CenteredMessage( + richMessage: [ + const TextSpan( + text: 'The Provider screen is now shipped as a DevTools extension.\n' + 'If you want to use this tool, please upgrade your ', ), - RoundedOutlinedBorder( - clip: true, - child: Column( - children: [ - AreaPaneHeader( - roundedTopBorder: false, - includeTopBorder: false, - title: Text(detailsTitleText), - actions: [ - ToolbarAction( - icon: Icons.settings, - onPressed: () { - unawaited( - showDialog( - context: context, - builder: (_) => _StateInspectorSettingsDialog(), - ), - ); - }, - ), - ], - ), - if (selectedProviderId != null) - Expanded( - child: InstanceViewer( - rootPath: InstancePath.fromProviderId(selectedProviderId), - showInternalProperties: ref.watch(_showInternals), - ), - ), - ], - ), + TextSpan( + text: 'package:provider', + style: Theme.of(context).fixedFontStyle, + ), + const TextSpan( + text: ' dependency to the latest version, and then re-open DevTools.', ), - ], - ); - } -} - -void showProviderErrorBanner() { - bannerMessages.addMessage( - ProviderUnknownErrorBanner(screenId: ProviderScreen.id).build(), - ); -} - -class _StateInspectorSettingsDialog extends ConsumerWidget { - static const title = 'State inspector configurations'; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return DevToolsDialog( - title: const DialogTitleText(title), - content: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - InkWell( - onTap: () => - ref.read(_showInternals.notifier).update((state) => !state), - child: Row( - children: [ - Checkbox( - value: ref.watch(_showInternals), - onChanged: (_) => ref - .read(_showInternals.notifier) - .update((state) => !state), - ), - const Text( - 'Show private properties inherited from SDKs/packages', - ), - ], - ), - ), - ], - ), - actions: const [ - DialogCloseButton(), ], ); } diff --git a/packages/devtools_app/lib/src/screens/provider/riverpod_error_logger_observer.dart b/packages/devtools_app/lib/src/screens/provider/riverpod_error_logger_observer.dart deleted file mode 100644 index 0134399717e..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/riverpod_error_logger_observer.dart +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:devtools_app_shared/service.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:logging/logging.dart'; - -final _log = Logger('riverpod_error_logger_observer'); - -class ErrorLoggerObserver extends ProviderObserver { - const ErrorLoggerObserver(); - - @override - void didAddProvider( - ProviderBase provider, - Object? value, - ProviderContainer container, - ) { - _maybeLogError(provider, value); - } - - @override - void didUpdateProvider( - ProviderBase provider, - Object? previousValue, - Object? newValue, - ProviderContainer container, - ) { - _maybeLogError(provider, newValue); - } - - void _maybeLogError(ProviderBase provider, Object? value) { - if (value is AsyncError) { - if (value.error is SentinelException) return; - _log.shout('Provider $provider failed with "${value.error}"'); - - final stackTrace = value.stackTrace; - if (stackTrace != null) { - _log.info(stackTrace); - } - } - } -} diff --git a/packages/devtools_app/lib/src/screens/provider/sliver_iterable_child_delegate.dart b/packages/devtools_app/lib/src/screens/provider/sliver_iterable_child_delegate.dart deleted file mode 100644 index da32e4c60ff..00000000000 --- a/packages/devtools_app/lib/src/screens/provider/sliver_iterable_child_delegate.dart +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/widgets.dart'; - -/// A delegate that allows using ListView with an undetermined list length -/// while preserve the "build only what is visible" behaviour. -class SliverIterableChildDelegate extends SliverChildDelegate { - SliverIterableChildDelegate( - this.children, { - this.estimatedChildCount, - }); - - final Iterable children; - int? _lastAccessedIndex; - late Iterator _lastAccessedIterator; - - @override - Widget? build(BuildContext context, int index) { - if (_lastAccessedIndex == null || _lastAccessedIndex! > index) { - _lastAccessedIndex = -1; - _lastAccessedIterator = children.iterator; - } - - while (_lastAccessedIndex! < index) { - _lastAccessedIterator.moveNext(); - _lastAccessedIndex = _lastAccessedIndex! + 1; - } - - return _lastAccessedIterator.current; - } - - @override - final int? estimatedChildCount; - - @override - bool shouldRebuild(SliverIterableChildDelegate oldDelegate) { - return children != oldDelegate.children || - _lastAccessedIndex != oldDelegate._lastAccessedIndex || - _lastAccessedIterator != oldDelegate._lastAccessedIterator; - } -} diff --git a/packages/devtools_app/lib/src/shared/common_widgets.dart b/packages/devtools_app/lib/src/shared/common_widgets.dart index 553731dca5c..a0c39ddaa9d 100644 --- a/packages/devtools_app/lib/src/shared/common_widgets.dart +++ b/packages/devtools_app/lib/src/shared/common_widgets.dart @@ -825,20 +825,34 @@ class LeftBorder extends StatelessWidget { final goldenRatio = 1 + sqrt(5) / 2; /// A centered text widget with the default DevTools text style applied. +/// +/// Only one of [message] or [richMessage] can be specified. class CenteredMessage extends StatelessWidget { - const CenteredMessage(this.message, {super.key}); + const CenteredMessage({ + this.message, + this.richMessage, + super.key, + }) : assert((message == null) != (richMessage == null)); + + final String? message; - final String message; + final List? richMessage; @override Widget build(BuildContext context) { - return Center( - child: Text( - message, + Widget child; + if (message != null) { + child = Text( + message!, textAlign: TextAlign.center, style: Theme.of(context).regularTextStyle, - ), - ); + ); + } else { + child = RichText( + text: TextSpan(children: richMessage), + ); + } + return Center(child: child); } } diff --git a/packages/devtools_app/lib/src/shared/file_import.dart b/packages/devtools_app/lib/src/shared/file_import.dart index 7cd880eb870..79b36cbc329 100644 --- a/packages/devtools_app/lib/src/shared/file_import.dart +++ b/packages/devtools_app/lib/src/shared/file_import.dart @@ -128,7 +128,7 @@ class _FileImportContainerState extends State { ), const SizedBox(height: extraLargeSpacing), ], - CenteredMessage(widget.instructions), + CenteredMessage(message: widget.instructions), const SizedBox(height: denseSpacing), _buildImportFileRow(), if (widget.actionText != null && widget.onAction != null) diff --git a/packages/devtools_app/lib/src/shared/offline_screen.dart b/packages/devtools_app/lib/src/shared/offline_screen.dart index 02a5dda5181..8a4f0a7bc7b 100644 --- a/packages/devtools_app/lib/src/shared/offline_screen.dart +++ b/packages/devtools_app/lib/src/shared/offline_screen.dart @@ -88,7 +88,7 @@ class _OfflineLoadError extends StatelessWidget { return Column( children: [ CenteredMessage( - 'Cannot load offline data for screen \'$screenId\'', + message: 'Cannot load offline data for screen \'$screenId\'', ), const SizedBox(height: defaultSpacing), ExitOfflineButton(gaScreen: gac.simple), diff --git a/packages/devtools_app/pubspec.yaml b/packages/devtools_app/pubspec.yaml index 39f66f89872..07f350215aa 100644 --- a/packages/devtools_app/pubspec.yaml +++ b/packages/devtools_app/pubspec.yaml @@ -31,8 +31,6 @@ dependencies: flutter: sdk: flutter flutter_markdown: ^0.7.1 - # TODO: https://github.com/flutter/devtools/issues/4569 - unpin this version - flutter_riverpod: 2.0.0-dev.9 flutter_web_plugins: sdk: flutter http: ^1.1.0 diff --git a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md index 53f59c93396..df3400cc6f8 100644 --- a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md +++ b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md @@ -10,14 +10,18 @@ To learn more about DevTools, check out the ## General updates -* Fixed a bug that was causing the DevTools release notes to always -show. - [#8277](https://github.com/flutter/devtools/pull/8277) - * Add a setting that allows users to opt-in to loading DevTools with WebAssembly. - [#8270](https://github.com/flutter/devtools/pull/8270) ![Wasm opt-in setting](images/wasm_setting.png "DevTools setting to opt into wasm.") +* Removed the legacy Provider screen from DevTools. The `package:provider` tool is now +distributed as a DevTools extension from `package:provider`. Upgrade your `package:provider` +dependency to use the extension. - [#8364](https://github.com/flutter/devtools/pull/8364) + +* Fixed a bug that was causing the DevTools release notes to always +show. - [#8277](https://github.com/flutter/devtools/pull/8277) + * Added support for loading extensions in pub workspaces [8347](https://github.com/flutter/devtools/pull/8347). diff --git a/packages/devtools_app/test/shared/instance_viewer_test.dart b/packages/devtools_app/test/shared/instance_viewer_test.dart deleted file mode 100644 index 88fe5fbe333..00000000000 --- a/packages/devtools_app/test/shared/instance_viewer_test.dart +++ /dev/null @@ -1,1544 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:devtools_app/devtools_app.dart'; -import 'package:devtools_app/src/screens/provider/instance_viewer/instance_details.dart'; -import 'package:devtools_app/src/screens/provider/instance_viewer/instance_providers.dart'; -import 'package:devtools_app/src/screens/provider/instance_viewer/instance_viewer.dart'; -import 'package:devtools_app/src/screens/provider/instance_viewer/result.dart'; -import 'package:devtools_app_shared/service.dart'; -import 'package:devtools_app_shared/ui.dart'; -import 'package:devtools_app_shared/utils.dart'; -import 'package:devtools_test/devtools_test.dart'; -import 'package:devtools_test/helpers.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../test_infra/matchers/matchers.dart'; - -final alwaysExpandedOverride = isExpandedProvider - .overrideWithProvider((param) => StateProvider((ref) => true)); - -final neverExpandedOverride = isExpandedProvider - .overrideWithProvider((param) => StateProvider((ref) => false)); - -final emptyObjectInstance = AsyncValue.data( - InstanceDetails.object( - const [], - hash: 0, - instanceRefId: 'map0', - setter: null, - evalForInstance: FakeEvalOnDartLibrary(), - type: 'MyClass', - ), -); - -final object2Instance = AsyncValue.data( - InstanceDetails.object( - [ - ObjectField( - name: 'first', - isFinal: true, - ownerName: '', - ownerUri: '', - eval: FakeEvalOnDartLibrary(), - ref: Result.error(Error(), StackTrace.empty), - isDefinedByDependency: false, - ), - ObjectField( - name: 'second', - isFinal: true, - ownerName: '', - ownerUri: '', - eval: FakeEvalOnDartLibrary(), - ref: Result.error(Error(), StackTrace.empty), - isDefinedByDependency: false, - ), - ], - hash: 0, - instanceRefId: 'object', - setter: null, - evalForInstance: FakeEvalOnDartLibrary(), - type: 'MyClass', - ), -); - -final emptyMapInstance = AsyncValue.data( - InstanceDetails.map(const [], hash: 0, instanceRefId: 'map0', setter: null), -); - -final map2Instance = AsyncValue.data( - InstanceDetails.map( - [ - stringInstance.value!, - list2Instance.value!, - ], - hash: 0, - instanceRefId: '0', - setter: null, - ), -); - -final emptyListInstance = AsyncValue.data( - InstanceDetails.list( - length: 0, - hash: 0, - instanceRefId: 'list0', - setter: null, - ), -); - -final list2Instance = AsyncValue.data( - InstanceDetails.list( - length: 2, - hash: 0, - instanceRefId: 'list2', - setter: null, - ), -); - -final stringInstance = AsyncValue.data( - InstanceDetails.string('string', instanceRefId: 'string', setter: null), -); - -final nullInstance = AsyncValue.data(InstanceDetails.nill(setter: null)); - -final trueInstance = AsyncValue.data( - InstanceDetails.boolean('true', instanceRefId: 'true', setter: null), -); - -final int42Instance = AsyncValue.data( - InstanceDetails.number('42', instanceRefId: '42', setter: null), -); - -final enumValueInstance = AsyncValue.data( - InstanceDetails.enumeration( - type: 'Enum', - value: 'value', - setter: null, - instanceRefId: 'Enum.value', - ), -); - -void main() { - setUpAll(() async => await loadFonts()); - - setUp(() { - setGlobal( - DevToolsEnvironmentParameters, - ExternalDevToolsEnvironmentParameters(), - ); - setGlobal(IdeTheme, getIdeTheme()); - setGlobal(ServiceConnectionManager, FakeServiceConnectionManager()); - }); - - group('InstanceViewer', () { - testWidgets( - 'showInternalProperties: false hides private properties from dependencies', - (tester) async { - const objPath = InstancePath.fromInstanceId('obj'); - - InstancePath pathForProperty(String name) { - return objPath.pathForChild( - PathToProperty.objectProperty( - name: name, - ownerUri: '', - ownerName: '', - ), - ); - } - - await tester.pumpWidget( - ProviderScope( - overrides: [ - instanceProvider(objPath).overrideWithValue( - AsyncValue.data( - ObjectInstance( - [ - ObjectField( - name: 'first', - isFinal: false, - ownerName: '', - ownerUri: '', - eval: FakeEvalOnDartLibrary(), - ref: Result.error(Error(), StackTrace.empty), - isDefinedByDependency: true, - ), - ObjectField( - name: '_second', - isFinal: false, - ownerName: '', - ownerUri: '', - eval: FakeEvalOnDartLibrary(), - ref: Result.error(Error(), StackTrace.empty), - isDefinedByDependency: true, - ), - ObjectField( - name: 'third', - isFinal: false, - ownerName: '', - ownerUri: '', - eval: FakeEvalOnDartLibrary(), - ref: Result.error(Error(), StackTrace.empty), - isDefinedByDependency: false, - ), - ObjectField( - name: '_forth', - isFinal: false, - ownerName: '', - ownerUri: '', - eval: FakeEvalOnDartLibrary(), - ref: Result.error(Error(), StackTrace.empty), - isDefinedByDependency: false, - ), - ], - hash: 0, - instanceRefId: 'object', - setter: null, - evalForInstance: FakeEvalOnDartLibrary(), - type: 'MyClass', - ), - ), - ), - instanceProvider(pathForProperty('first')) - .overrideWithValue(int42Instance), - instanceProvider(pathForProperty('_second')) - .overrideWithValue(int42Instance), - instanceProvider(pathForProperty('third')) - .overrideWithValue(int42Instance), - instanceProvider(pathForProperty('_forth')) - .overrideWithValue(int42Instance), - ], - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: false, - rootPath: objPath, - ), - ), - ), - ), - ); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/show_internal_properties.png', - ), - ); - }, - ); - - testWidgets('field editing flow', (tester) async { - const objPath = InstancePath.fromInstanceId('obj'); - final propertyPath = objPath.pathForChild( - const PathToProperty.objectProperty( - name: 'first', - ownerUri: '', - ownerName: '', - ), - ); - - await tester.pumpWidget( - ProviderScope( - overrides: [ - instanceProvider(objPath).overrideWithValue( - AsyncValue.data( - ObjectInstance( - [ - ObjectField( - name: 'first', - isFinal: false, - ownerName: '', - ownerUri: '', - eval: FakeEvalOnDartLibrary(), - ref: Result.error(Error(), StackTrace.empty), - isDefinedByDependency: false, - ), - ], - hash: 0, - instanceRefId: 'object', - setter: null, - evalForInstance: FakeEvalOnDartLibrary(), - type: 'MyClass', - ), - ), - ), - instanceProvider(propertyPath).overrideWithValue( - AsyncValue.data( - InstanceDetails.number( - '0', - instanceRefId: '0', - setter: (_) async {}, - ), - ), - ), - ], - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: objPath, - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await tester.tap(find.byKey(ValueKey(propertyPath))); - - await tester.pump(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden('../test_infra/goldens/instance_viewer/edit.png'), - ); - - // can press esc to unfocus active node - await tester.sendKeyEvent(LogicalKeyboardKey.escape); - - await tester.pump(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/edit_esc.png', - ), - ); - }); - - testWidgets( - 'renders while an instance is fetched', - (tester) async { - await tester.pumpWidget( - ProviderScope( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('0')) - .overrideWithValue(const AsyncValue.loading()), - ], - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('0'), - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/loading.png', - ), - ); - }, - ); - - // TODO(rrousselGit) find a way to test "data then loading then wait then loading then wait shows "loading" after a total of one second" - // This is tricky because tester.pump(duration) completes the Timer even if the duration is < 1 second - - testWidgets( - 'once valid data was fetched, going back to loading and emiting an error immediately updates the UI', - (tester) async { - const app = MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('0'), - ), - ), - ); - - await tester.pumpWidget( - ProviderScope( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('0')) - .overrideWithValue(nullInstance), - ], - child: app, - ), - ); - await tester.pumpAndSettle(); - await tester.pumpWidget( - ProviderScope( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('0')) - .overrideWithValue(const AsyncValue.loading()), - ], - child: app, - ), - ); - await tester.pump(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/null.png', - ), - ); - - await tester.pumpWidget( - ProviderScope( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('0')) - .overrideWithValue( - AsyncValue.error(StateError('test error')), - ), - ], - child: app, - ), - ); - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/error.png', - ), - ); - }, - ); - - testWidgets( - 'once valid data was fetched, going back to loading and emiting a new value immediately updates the UI', - (tester) async { - const app = MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('0'), - ), - ), - ); - - await tester.pumpWidget( - ProviderScope( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('0')) - .overrideWithValue(nullInstance), - ], - child: app, - ), - ); - await tester.pumpAndSettle(); - await tester.pumpWidget( - ProviderScope( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('0')) - .overrideWithValue(const AsyncValue.loading()), - ], - child: app, - ), - ); - await tester.pump(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/null.png', - ), - ); - - await tester.pumpWidget( - ProviderScope( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('0')) - .overrideWithValue(int42Instance), - ], - child: app, - ), - ); - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/num.png', - ), - ); - }, - ); - - testWidgets('renders enums', (tester) async { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('enum')) - .overrideWithValue(enumValueInstance), - ], - ); - addTearDown(container.dispose); - - await tester.pumpWidget( - UncontrolledProviderScope( - container: container, - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('enum'), - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden('../test_infra/goldens/instance_viewer/enum.png'), - ); - }); - - testWidgets('renders null', (tester) async { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('null')) - .overrideWithValue(nullInstance), - ], - ); - addTearDown(container.dispose); - - await tester.pumpWidget( - UncontrolledProviderScope( - container: container, - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('null'), - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden('../test_infra/goldens/instance_viewer/null.png'), - ); - }); - - testWidgets('renders bools', (tester) async { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('bool')) - .overrideWithValue(trueInstance), - ], - ); - addTearDown(container.dispose); - - await tester.pumpWidget( - UncontrolledProviderScope( - container: container, - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('bool'), - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden('../test_infra/goldens/instance_viewer/bool.png'), - ); - }); - - testWidgets('renders strings', (tester) async { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('string')) - .overrideWithValue(stringInstance), - ], - ); - addTearDown(container.dispose); - - await tester.pumpWidget( - UncontrolledProviderScope( - container: container, - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('string'), - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/string.png', - ), - ); - }); - - testWidgets('renders numbers', (tester) async { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('num')) - .overrideWithValue(int42Instance), - ], - ); - addTearDown(container.dispose); - - await tester.pumpWidget( - UncontrolledProviderScope( - container: container, - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('num'), - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden('../test_infra/goldens/instance_viewer/num.png'), - ); - }); - - testWidgets('renders maps', (tester) async { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('map')) - .overrideWithValue(map2Instance), - // {'string': 42, [...]: ['string', null]} - instanceProvider( - const InstancePath.fromInstanceId( - 'map', - pathToProperty: [PathToProperty.mapKey(ref: 'string')], - ), - ).overrideWithValue(int42Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'map', - pathToProperty: [PathToProperty.mapKey(ref: 'list2')], - ), - ).overrideWithValue(list2Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'map', - pathToProperty: [ - PathToProperty.mapKey(ref: 'list2'), - PathToProperty.listIndex(0), - ], - ), - ).overrideWithValue(stringInstance), - instanceProvider( - const InstancePath.fromInstanceId( - 'map', - pathToProperty: [ - PathToProperty.mapKey(ref: 'list2'), - PathToProperty.listIndex(1), - ], - ), - ).overrideWithValue(nullInstance), - ], - ); - addTearDown(container.dispose); - - await tester.pumpWidget( - UncontrolledProviderScope( - container: container, - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('map'), - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/collasped_map.png', - ), - ); - - container - .read( - isExpandedProvider( - const InstancePath.fromInstanceId( - 'map', - pathToProperty: [PathToProperty.mapKey(ref: 'list2')], - ), - ).notifier, - ) - .state = true; - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/expanded_map.png', - ), - ); - }); - - testWidgets('renders objects', (tester) async { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('object')) - .overrideWithValue(object2Instance), - // MyClass(first: 42, second: ['string', null]) - instanceProvider( - const InstancePath.fromInstanceId( - 'object', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'first', - ownerUri: '', - ownerName: '', - ), - ], - ), - ).overrideWithValue(int42Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'object', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'second', - ownerUri: '', - ownerName: '', - ), - ], - ), - ).overrideWithValue(list2Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'object', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'second', - ownerUri: '', - ownerName: '', - ), - PathToProperty.listIndex(0), - ], - ), - ).overrideWithValue(stringInstance), - instanceProvider( - const InstancePath.fromInstanceId( - 'object', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'second', - ownerUri: '', - ownerName: '', - ), - PathToProperty.listIndex(1), - ], - ), - ).overrideWithValue(nullInstance), - ], - ); - addTearDown(container.dispose); - - await tester.pumpWidget( - UncontrolledProviderScope( - container: container, - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('object'), - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/collasped_object.png', - ), - ); - - container - .read( - isExpandedProvider( - const InstancePath.fromInstanceId( - 'object', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'second', - ownerUri: '', - ownerName: '', - ), - ], - ), - ).notifier, - ) - .state = true; - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/expanded_object.png', - ), - ); - }); - - testWidgets('renders lists', (tester) async { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('list')) - .overrideWithValue(list2Instance), - // [true, {'string': 42, [...]: null}] - instanceProvider( - const InstancePath.fromInstanceId( - 'list', - pathToProperty: [ - PathToProperty.listIndex(0), - ], - ), - ).overrideWithValue(trueInstance), - instanceProvider( - const InstancePath.fromInstanceId( - 'list', - pathToProperty: [ - PathToProperty.listIndex(1), - ], - ), - ).overrideWithValue(map2Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'list', - pathToProperty: [ - PathToProperty.listIndex(1), - PathToProperty.mapKey(ref: 'string'), - ], - ), - ).overrideWithValue(int42Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'list', - pathToProperty: [ - PathToProperty.listIndex(1), - PathToProperty.mapKey(ref: 'list2'), - ], - ), - ).overrideWithValue(nullInstance), - ], - ); - addTearDown(container.dispose); - - await tester.pumpWidget( - UncontrolledProviderScope( - container: container, - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('list'), - ), - ), - ), - ), - ); - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/collasped_list.png', - ), - ); - - container - .read( - isExpandedProvider( - const InstancePath.fromInstanceId( - 'list', - pathToProperty: [PathToProperty.listIndex(1)], - ), - ).notifier, - ) - .state = true; - - await tester.pumpAndSettle(); - - await expectLater( - find.byType(MaterialApp), - matchesDevToolsGolden( - '../test_infra/goldens/instance_viewer/expanded_list.png', - ), - ); - }); - - testWidgets('does not listen to unexpanded nodes', (tester) async { - final container = ProviderContainer( - overrides: [ - neverExpandedOverride, - instanceProvider(const InstancePath.fromInstanceId('list2')) - .overrideWithValue(list2Instance), - ], - ); - addTearDown(container.dispose); - - await tester.pumpWidget( - UncontrolledProviderScope( - container: container, - child: const MaterialApp( - home: Scaffold( - body: InstanceViewer( - showInternalProperties: true, - rootPath: InstancePath.fromInstanceId('list2'), - ), - ), - ), - ), - ); - - expect( - container - .readProviderElement( - instanceProvider(const InstancePath.fromInstanceId('list2')), - ) - .hasListeners, - isTrue, - ); - expect( - container - .readProviderElement( - instanceProvider( - const InstancePath.fromInstanceId( - 'list2', - pathToProperty: [PathToProperty.listIndex(0)], - ), - ), - ) - .hasListeners, - isFalse, - ); - expect( - container - .readProviderElement( - instanceProvider( - const InstancePath.fromInstanceId( - 'list2', - pathToProperty: [PathToProperty.listIndex(1)], - ), - ), - ) - .hasListeners, - isFalse, - ); - }); - }); - - group('estimatedChildCountProvider', () { - group('primitives', () { - test('count for one line when not expanded', () { - final container = ProviderContainer( - overrides: [ - neverExpandedOverride, - instanceProvider(const InstancePath.fromInstanceId('string')) - .overrideWithValue(stringInstance), - instanceProvider(const InstancePath.fromInstanceId('null')) - .overrideWithValue(nullInstance), - instanceProvider(const InstancePath.fromInstanceId('bool')) - .overrideWithValue(trueInstance), - instanceProvider(const InstancePath.fromInstanceId('num')) - .overrideWithValue(int42Instance), - instanceProvider(const InstancePath.fromInstanceId('enum')) - .overrideWithValue(enumValueInstance), - ], - ); - addTearDown(container.dispose); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('string'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('null'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('bool'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('num'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('enum'), - ), - ), - 1, - ); - }); - - test('count for one line when expanded', () { - final container = ProviderContainer( - overrides: [ - // force expanded status - alwaysExpandedOverride, - instanceProvider(const InstancePath.fromInstanceId('string')) - .overrideWithValue(stringInstance), - instanceProvider(const InstancePath.fromInstanceId('null')) - .overrideWithValue(nullInstance), - instanceProvider(const InstancePath.fromInstanceId('bool')) - .overrideWithValue(trueInstance), - instanceProvider(const InstancePath.fromInstanceId('num')) - .overrideWithValue(int42Instance), - instanceProvider(const InstancePath.fromInstanceId('enum')) - .overrideWithValue(enumValueInstance), - ], - ); - addTearDown(container.dispose); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('string'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('null'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('bool'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('num'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('enum'), - ), - ), - 1, - ); - }); - }); - - group('lists', () { - test( - 'count for one line when not expanded regarless of the list length', - () { - final container = ProviderContainer( - overrides: [ - neverExpandedOverride, - instanceProvider(const InstancePath.fromInstanceId('empty')) - .overrideWithValue(emptyListInstance), - instanceProvider(const InstancePath.fromInstanceId('list-2')) - .overrideWithValue(emptyListInstance), - ], - ); - addTearDown(container.dispose); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('empty'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('list-2'), - ), - ), - 1, - ); - }, - ); - - test('when expanded, recursively traverse the list content', () { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('empty')) - .overrideWithValue(emptyListInstance), - // ['string', [42, true]] - instanceProvider(const InstancePath.fromInstanceId('list-2')) - .overrideWithValue(list2Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'list-2', - pathToProperty: [PathToProperty.listIndex(0)], - ), - ).overrideWithValue(stringInstance), - instanceProvider( - const InstancePath.fromInstanceId( - 'list-2', - pathToProperty: [PathToProperty.listIndex(1)], - ), - ).overrideWithValue(list2Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'list-2', - pathToProperty: [ - PathToProperty.listIndex(1), - PathToProperty.listIndex(0), - ], - ), - ).overrideWithValue(int42Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'list-2', - pathToProperty: [ - PathToProperty.listIndex(1), - PathToProperty.listIndex(1), - ], - ), - ).overrideWithValue(trueInstance), - ], - ); - addTearDown(container.dispose); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('empty'), - ), - ), - 1, - ); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('list-2'), - ), - ), - // header + 2 items - 3, - ); - - // expand the nested list - container - .read( - isExpandedProvider( - const InstancePath.fromInstanceId( - 'list-2', - pathToProperty: [PathToProperty.listIndex(1)], - ), - ).notifier, - ) - .state = true; - - // now the estimatedChildCount traverse the nested list too - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('list-2'), - ), - ), - // header + string + sub-list header + sub-list 2 items - 5, - ); - }); - }); - - group('maps', () { - test( - 'count for one line when not expanded regarless of the map length', - () { - final container = ProviderContainer( - overrides: [ - neverExpandedOverride, - instanceProvider(const InstancePath.fromInstanceId('empty')) - .overrideWithValue(emptyMapInstance), - instanceProvider(const InstancePath.fromInstanceId('map-2')) - .overrideWithValue(map2Instance), - ], - ); - addTearDown(container.dispose); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('empty'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('map-2'), - ), - ), - 1, - ); - }, - ); - - test('when expanded, recursively traverse the map content', () { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('empty')) - .overrideWithValue(emptyMapInstance), - // {'string': 'string', [...]: [42, true]] - instanceProvider(const InstancePath.fromInstanceId('map-2')) - .overrideWithValue(map2Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'map-2', - pathToProperty: [PathToProperty.mapKey(ref: 'string')], - ), - ).overrideWithValue(stringInstance), - instanceProvider( - const InstancePath.fromInstanceId( - 'map-2', - pathToProperty: [PathToProperty.mapKey(ref: 'list2')], - ), - ).overrideWithValue(list2Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'map-2', - pathToProperty: [ - PathToProperty.mapKey(ref: 'list2'), - PathToProperty.listIndex(0), - ], - ), - ).overrideWithValue(int42Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'map-2', - pathToProperty: [ - PathToProperty.mapKey(ref: 'list2'), - PathToProperty.listIndex(1), - ], - ), - ).overrideWithValue(trueInstance), - ], - ); - addTearDown(container.dispose); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('empty'), - ), - ), - 1, - ); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('map-2'), - ), - ), - // header + 2 items - 3, - ); - - // expand the nested list - container - .read( - isExpandedProvider( - const InstancePath.fromInstanceId( - 'map-2', - pathToProperty: [PathToProperty.mapKey(ref: 'list2')], - ), - ).notifier, - ) - .state = true; - - // now the estimatedChildCount traverse the nested list too - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('map-2'), - ), - ), - // header + string + sub-list header + sub-list 2 items - 5, - ); - }); - }); - - group('objects', () { - test( - 'count for one line when not expanded regarless of the number of fields', - () { - final container = ProviderContainer( - overrides: [ - neverExpandedOverride, - instanceProvider(const InstancePath.fromInstanceId('empty')) - .overrideWithValue(emptyObjectInstance), - instanceProvider(const InstancePath.fromInstanceId('object-2')) - .overrideWithValue(object2Instance), - ], - ); - addTearDown(container.dispose); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('empty'), - ), - ), - 1, - ); - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('object-2'), - ), - ), - 1, - ); - }, - ); - - test('when expanded, recursively traverse the object content', () { - final container = ProviderContainer( - overrides: [ - instanceProvider(const InstancePath.fromInstanceId('empty')) - .overrideWithValue(emptyObjectInstance), - // Class(first: 'string', second: [42, true]) - instanceProvider(const InstancePath.fromInstanceId('object-2')) - .overrideWithValue(object2Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'object-2', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'first', - ownerUri: '', - ownerName: '', - ), - ], - ), - ).overrideWithValue(stringInstance), - instanceProvider( - const InstancePath.fromInstanceId( - 'object-2', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'second', - ownerUri: '', - ownerName: '', - ), - ], - ), - ).overrideWithValue(list2Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'object-2', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'second', - ownerUri: '', - ownerName: '', - ), - PathToProperty.listIndex(0), - ], - ), - ).overrideWithValue(int42Instance), - instanceProvider( - const InstancePath.fromInstanceId( - 'object-2', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'second', - ownerUri: '', - ownerName: '', - ), - PathToProperty.listIndex(1), - ], - ), - ).overrideWithValue(trueInstance), - ], - ); - addTearDown(container.dispose); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('empty'), - ), - ), - 1, - ); - - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('object-2'), - ), - ), - // header + 2 items - 3, - ); - - // expand the nested list - container - .read( - isExpandedProvider( - const InstancePath.fromInstanceId( - 'object-2', - pathToProperty: [ - PathToProperty.objectProperty( - name: 'second', - ownerUri: '', - ownerName: '', - ), - ], - ), - ).notifier, - ) - .state = true; - - // now the estimatedChildCount traverse the nested list too - expect( - container.read( - estimatedChildCountProvider( - const InstancePath.fromInstanceId('object-2'), - ), - ), - // header + string + sub-list header + sub-list 2 items - 5, - ); - }); - }); - }); - - group('isExpandedProvider', () { - test('the graph root starts as expanded', () { - final container = ProviderContainer(); - addTearDown(container.dispose); - - expect( - container - .read( - isExpandedProvider(const InstancePath.fromProviderId('0')) - .notifier, - ) - .state, - isTrue, - ); - - expect( - container - .read( - isExpandedProvider(const InstancePath.fromInstanceId('0')) - .notifier, - ) - .state, - isTrue, - ); - }); - - test('children nodes are not expanded by default', () { - final container = ProviderContainer(); - addTearDown(container.dispose); - - expect( - container - .read( - isExpandedProvider( - const InstancePath.fromProviderId( - '0', - pathToProperty: [PathToProperty.listIndex(0)], - ), - ).notifier, - ) - .state, - isFalse, - ); - - expect( - container - .read( - isExpandedProvider( - const InstancePath.fromInstanceId( - '0', - pathToProperty: [PathToProperty.listIndex(0)], - ), - ).notifier, - ) - .state, - isFalse, - ); - }); - }); -} - -// ignore: subtype_of_sealed_class, fake for testing. -class FakeEvalOnDartLibrary extends Fake implements EvalOnDartLibrary {} diff --git a/packages/devtools_app/test/test_infra/goldens/provider_screen/list_error_banner.png b/packages/devtools_app/test/test_infra/goldens/provider_screen/list_error_banner.png deleted file mode 100644 index 8887d55997162a6856c14fb9fbedf2975178d67f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20795 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 OfH>s%1Nr;YKm9lAki7!{ diff --git a/packages/devtools_app/test/test_infra/goldens/provider_screen/selected_provider.png b/packages/devtools_app/test/test_infra/goldens/provider_screen/selected_provider.png deleted file mode 100644 index 29a690ecae3b2aad75c3d5e9525e8bbab36d3545..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22721 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 MFgsp!?B`$q10dT8iU0rr diff --git a/packages/devtools_app/test/test_infra/goldens/provider_screen/selected_provider_error_banner.png b/packages/devtools_app/test/test_infra/goldens/provider_screen/selected_provider_error_banner.png deleted file mode 100644 index 107174a24dde94e95e66aa6f24a61f2fbb5133cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25050 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 diff --git a/packages/devtools_app/test/test_infra/goldens/riverpod_screen/no_selected_provider.png b/packages/devtools_app/test/test_infra/goldens/riverpod_screen/no_selected_provider.png deleted file mode 100644 index 5757489bf69db058e40c3d9e8f22ffdcee9a7536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11468 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 diff --git a/packages/devtools_app/test/test_infra/goldens/riverpod_screen/selected_provider_error_banner.png b/packages/devtools_app/test/test_infra/goldens/riverpod_screen/selected_provider_error_banner.png deleted file mode 100644 index c1474a42e94491d1a075fbe2cd4db9e9dbd9542c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32762 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 NlFf<;t`1Dj`3Ff$P^bU^