anchor.diff:  
   class MemoryBodyState extends State<MemoryBody>
       with AutoDisposeMixin, SingleTickerProviderStateMixin {
  -  events.EventChartController eventChartController;
  -  vm.VMChartController vmChartController;
  -  android.AndroidChartController androidChartController;
  -
  -  MemoryController controller;
  -
  -  OverlayEntry hoverOverlayEntry;
  -  OverlayEntry legendOverlayEntry;
  -
  -  bool isAdvancedSettingsEnabled = false;
  +  late events.EventChartController _eventChartController;
  +  late vm.VMChartController _vmChartController;
  +  late android.AndroidChartController _androidChartController;
  +
  +  late MemoryController _controller;
  +
  +  bool _controllersInitialized = false;
  +
  +  OverlayEntry? _hoverOverlayEntry;
  +  OverlayEntry? _legendOverlayEntry;
  +
  +  bool _isAdvancedSettingsEnabled = false;
   
     /// Updated when the MemoryController's _androidCollectionEnabled ValueNotifier changes.
  -  bool isAndroidCollection = MemoryController.androidADBDefault;
  +  bool _isAndroidCollection = MemoryController.androidADBDefault;
   
     final _focusNode = FocusNode(debugLabel: 'memory');
   
  
positive.code:         return;
        }
  
        controller.refreshAllCharts();
      });
  
      addAutoDisposeListener(controller.legendVisibleNotifier, () {
        setState(() {
          if (controller.isLegendVisible) {
            ga.select(
              analytics_constants.memory,
              analytics_constants.memoryLegend,
  
negative.code:   }
  
    Widget _memorySourceDropdown(TextTheme textTheme) {
      final files = _controller.memoryLog.offlineFiles();
  
      // Can we display dropdowns in verbose mode?
      final isVerbose = _controller.memorySourcePrefix ==
          MemoryScreen.memorySourceMenuItemPrefix;
  
      // First item is 'Live Feed', then followed by memory log filenames.
  