diff --git a/packages/devtools_app/lib/src/screens/network/network_controller.dart b/packages/devtools_app/lib/src/screens/network/network_controller.dart index 3137680fbdd..7bc352d367b 100644 --- a/packages/devtools_app/lib/src/screens/network/network_controller.dart +++ b/packages/devtools_app/lib/src/screens/network/network_controller.dart @@ -57,9 +57,9 @@ class NetworkController extends DisposableController OfflineScreenControllerMixin, AutoDisposeControllerMixin { NetworkController() { - _initHelper(); _networkService = NetworkService(this); _currentNetworkRequests = CurrentNetworkRequests(); + _initHelper(); addAutoDisposeListener( _currentNetworkRequests, _filterAndRefreshSearchMatches, @@ -197,14 +197,25 @@ class NetworkController extends DisposableController } } - void loadOfflineData(OfflineNetworkData offlineData) { + Future loadOfflineData(OfflineNetworkData offlineData) async { + // Set filtered data to the requests available in offline data. filteredData ..clear() ..addAll(offlineData.requests); + // If a selectedRequestId is available, select it in offline mode. if (offlineData.selectedRequestId != null) { - selectedRequest.value = - _currentNetworkRequests.getRequest(offlineData.selectedRequestId!); + final selected = offlineData.getRequest(offlineData.selectedRequestId!); + if (selected != null) { + selectedRequest.value = selected; + if (selectedRequest.value is DartIOHttpRequestData) { + unawaited( + (selectedRequest.value as DartIOHttpRequestData) + .getFullRequestData(), + ); + } + resetDropDown(); + } } } diff --git a/packages/devtools_app/lib/src/screens/network/offline_network_data.dart b/packages/devtools_app/lib/src/screens/network/offline_network_data.dart index ee030659dce..2322b7dc691 100644 --- a/packages/devtools_app/lib/src/screens/network/offline_network_data.dart +++ b/packages/devtools_app/lib/src/screens/network/offline_network_data.dart @@ -6,6 +6,7 @@ import 'package:devtools_shared/devtools_shared.dart'; import '../../shared/http/http_request_data.dart'; import '../../shared/primitives/utils.dart'; +import 'network_model.dart'; /// Class to encapsulate offline data for the [NetworkController]. /// It is responsible for serializing and deserializing offline network data. @@ -40,6 +41,16 @@ class OfflineNetworkData with Serializable { /// List of current [DartIOHttpRequestData] network requests. final List requests; + /// Get a request by matching its `id` field. + // Temporarily added to check selection in the filtered requests data, + // until we have current requests data in place + NetworkRequest? getRequest(String id) { + // Search through the list of requests and return the one with the matching ID. + return requests.firstWhere( + (request) => request.id == id, + ); + } + /// The ID of the currently selected request, if any. final String? selectedRequestId;