Repository: flutter
Issue: Document that MethodChannels should be dereferenced when no longer needed
Labels: framework,d: api docs,P2,team-framework,triaged-framework

<!-- Thank you for using Flutter!

     If you are looking for support, please check out our documentation
     or consider asking a question on Stack Overflow:
      * https://flutter.dev/
      * https://api.flutter.dev/
      * https://stackoverflow.com/questions/tagged/flutter?sort=frequent

     If you have found a bug or if our documentation doesn't have an answer
     to what you're looking for, then fill out the template below. Please read
     our guide to filing a bug first: https://flutter.dev/docs/resources/bug-reports
-->

## Steps to Reproduce

<!-- Please include full steps to reproduce so that we can reproduce the problem. -->

1- Run flutter app then lock the screen.
2- Unlock the screen then press the home button open multiple other apps.
3-After 5 to 10 minutes navigate back to the app.
4-Black screen should appear.

This problem occurred on different devices on both Android and iPhone from Samsung A52s running Android 12 , Huawei Nova 3 running Android 9 and iPhone XS running iOS 16.

**Expected results:** <!-- what did you want to see? -->
The app should open in it's previous state or at least restart.

**Actual results:** <!-- what did you see? -->
Black screen instead of app ui.

<details>
  <summary>Logs</summary>

```
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 0
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 1
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 0
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 1
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme key 0
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme key 1
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 0
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 1
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 0
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 1
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 0
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 1
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 0
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 1
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme key 0
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme key 1
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 0
    I/ViewRootImpl@61356d8[MainActivity](11518): ViewPostIme pointer 1
    D/InputMethodManager(11518): startInputInner - Id : 0
    I/InputMethodManager(11518): startInputInner - mService.startInputOrWindowGainedFocus
    I/ViewRootImpl@61356d8[MainActivity](11518): handleAppVisibility mAppVisible=true visible=false
    I/SurfaceView@dc4cc30(11518): onWindowVisibilityChanged(8) false io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265} of ViewRootImpl@61356d8[MainActivity]
    I/SurfaceView@dc4cc30(11518): pST: mTmpTransaction.apply, mTmpTransaction = android.view.SurfaceControl$Transaction@7147402
    I/SurfaceView@dc4cc30(11518): surfaceDestroyed callback.size 1 #2 io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265}
    I/SurfaceView@dc4cc30(11518): updateSurface: mVisible = false mSurface.isValid() = true
    I/SurfaceView@dc4cc30(11518): tryReleaseSurfaces: set mRtReleaseSurfaces = true
    I/SurfaceView@dc4cc30(11518): 219084706 wPL, frameNr = 0
    I/SurfaceView@dc4cc30(11518): remove() from RT android.view.SurfaceView$SurfaceViewPositionUpdateListener@d0ef7a2 Surface(name=SurfaceView - com.app.example/com.app.example.activities.MainActivity@dc4cc30@0)/@0x81efc33
    I/SurfaceView@dc4cc30(11518): remove() io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265} Surface(name=SurfaceView - com.app.example/com.app.example.activities.MainActivity@dc4cc30@0)/@0x81efc33
    I/SurfaceView@dc4cc30(11518): aOrMT: uB = true t = android.view.SurfaceControl$Transaction@b08ebee fN = 0 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionLost:1785 android.graphics.RenderNode$CompositePositionUpdateListener.positionLost:326 
    I/SurfaceView@dc4cc30(11518): aOrMT: vR.mWNT, vR = ViewRootImpl@61356d8[MainActivity]
    I/ViewRootImpl@61356d8[MainActivity](11518): mWNT: t = android.view.SurfaceControl$Transaction@b08ebee fN = 0 android.view.SurfaceView.applyOrMergeTransaction:1628 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionLost:1785 
    I/ViewRootImpl@61356d8[MainActivity](11518): mWNT: merge t to BBQ
    D/OpenGLRenderer(11518): setSurface called with nullptr
    D/OpenGLRenderer(11518): setSurface() destroyed EGLSurface
    D/OpenGLRenderer(11518): destroyEglSurface
    I/ViewRootImpl@61356d8[MainActivity](11518): Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)8 dur=20 res=0x5 s={false 0} ch=true fn=44
    I/SurfaceView@dc4cc30(11518): windowStopped(true) false io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265} of ViewRootImpl@61356d8[MainActivity]
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    I/ViewRootImpl@61356d8[MainActivity](11518): stopped(true) old=false
    I/ViewRootImpl@61356d8[MainActivity](11518): MSG_WINDOW_FOCUS_CHANGED 0 1
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    D/InputTransport(11518): Input channel destroyed: 'ClientS', fd=136
    D/InputTransport(11518): Input channel destroyed: 'ClientS', fd=167
    D/InputTransport(11518): Input channel destroyed: 'ClientS', fd=158
    I/ViewRootImpl@61356d8[MainActivity](11518): handleAppVisibility mAppVisible=false visible=true
    I/SurfaceView@dc4cc30(11518): onWindowVisibilityChanged(4) false io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265} of ViewRootImpl@61356d8[MainActivity]
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    D/OpenGLRenderer(11518): setSurface called with nullptr
    I/ViewRootImpl@61356d8[MainActivity](11518): Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)4 dur=7 res=0x1 s={false 0} ch=false fn=-1
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    I/ViewRootImpl@61356d8[MainActivity](11518): stopped(false) old=true
    I/ViewRootImpl@61356d8[MainActivity](11518): stopped(false) old=false
    I/DecorView(11518): notifyKeepScreenOnChanged: keepScreenOn=false
    I/SurfaceView@dc4cc30(11518): onWindowVisibilityChanged(0) false io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265} of ViewRootImpl@61356d8[MainActivity]
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    D/OpenGLRenderer(11518): setSurface called with nullptr
    I/ViewRootImpl@61356d8[MainActivity](11518): Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)0 dur=5 res=0x7 s={true -5476376670085108368} ch=true fn=-1
    D/OpenGLRenderer(11518): eglCreateWindowSurface
    I/SurfaceView@dc4cc30(11518): windowStopped(false) true io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ......ID 0,0-1080,2400} of ViewRootImpl@61356d8[MainActivity]
    I/SurfaceView@dc4cc30(11518): pST: sr = Rect(0, 0 - 1080, 2400) sw = 1080 sh = 2400
    I/SurfaceView@dc4cc30(11518): onSSPAndSRT: pl = 0 pt = 0 sx = 1.0 sy = 1.0
    I/SurfaceView@dc4cc30(11518): pST: mTmpTransaction.apply, mTmpTransaction = android.view.SurfaceControl$Transaction@7147402
    I/SurfaceView@dc4cc30(11518): updateSurface: mVisible = true mSurface.isValid() = true
    I/SurfaceView@dc4cc30(11518): updateSurface: mSurfaceCreated = false surfaceChanged = true visibleChanged = true
    I/SurfaceView@dc4cc30(11518): surfaceCreated 1 #1 io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ......ID 0,0-1080,2400}
    I/SurfaceView@dc4cc30(11518): surfaceChanged (1080,2400) 1 #1 io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ......ID 0,0-1080,2400}
    I/ViewRootImpl@61356d8[MainActivity](11518): [DP] dp(1) 1 android.view.SurfaceView.updateSurface:1375 android.view.SurfaceView.setWindowStopped:383 android.view.SurfaceView.surfaceCreated:2051 
    I/ViewRootImpl@61356d8[MainActivity](11518): [DP] pdf(0) 1 android.view.SurfaceView.notifyDrawFinished:599 android.view.SurfaceView.performDrawFinished:586 android.view.SurfaceView.$r8$lambda$st27mCkd9jfJkTrN_P3qIGKX6NY:0 
    I/ViewRootImpl@61356d8[MainActivity](11518): [DP] rdf()
    D/ViewRootImpl@61356d8[MainActivity](11518): reportDrawFinished (fn: -1) 
    I/ViewRootImpl@61356d8[MainActivity](11518): [DP] dp(1) 1 android.view.ViewRootImpl.reportNextDraw:11420 android.view.ViewRootImpl.performTraversals:4193 android.view.ViewRootImpl.doTraversal:2919 
    D/ViewRootImpl@61356d8[MainActivity](11518): Creating frameDrawingCallback nextDrawUseBlastSync=false reportNextDraw=true hasBlurUpdates=false
    D/ViewRootImpl@61356d8[MainActivity](11518): Creating frameCompleteCallback
    I/SurfaceView@dc4cc30(11518): uSP: rtp = Rect(0, 0 - 1080, 2400) rtsw = 1080 rtsh = 2400
    I/SurfaceView@dc4cc30(11518): onSSPAndSRT: pl = 0 pt = 0 sx = 1.0 sy = 1.0
    I/SurfaceView@dc4cc30(11518): aOrMT: uB = true t = android.view.SurfaceControl$Transaction@ba3bb95 fN = 1 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:319 
    I/SurfaceView@dc4cc30(11518): aOrMT: vR.mWNT, vR = ViewRootImpl@61356d8[MainActivity]
    I/ViewRootImpl@61356d8[MainActivity](11518): mWNT: t = android.view.SurfaceControl$Transaction@ba3bb95 fN = 1 android.view.SurfaceView.applyOrMergeTransaction:1628 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 
    I/ViewRootImpl@61356d8[MainActivity](11518): mWNT: merge t to BBQ
    D/ViewRootImpl@61356d8[MainActivity](11518): Received frameDrawingCallback frameNum=1. Creating transactionCompleteCallback=false
    I/BufferQueueProducer(11518): [ViewRootImpl@61356d8[MainActivity]#2(BLAST Consumer)2](id:2cfe00000002,api:1,p:11518,c:11518) queueBuffer: queued for the first time.
    D/ViewRootImpl@61356d8[MainActivity](11518): Received frameCompleteCallback  lastAcquiredFrameNum=1 lastAttemptedDrawFrameNum=1
    I/ViewRootImpl@61356d8[MainActivity](11518): [DP] pdf(0) 1 android.view.ViewRootImpl.lambda$addFrameCompleteCallbackIfNeeded$3$ViewRootImpl:4995 android.view.ViewRootImpl$$ExternalSyntheticLambda16.run:6 android.os.Handler.handleCallback:938 
    I/ViewRootImpl@61356d8[MainActivity](11518): [DP] rdf()
    D/ViewRootImpl@61356d8[MainActivity](11518): reportDrawFinished (fn: -1) 
    I/SurfaceView@dc4cc30(11518): pST: sr = Rect(0, 0 - 1080, 2265) sw = 1080 sh = 2265
    I/SurfaceView@dc4cc30(11518): onSSPAndSRT: pl = 0 pt = 0 sx = 1.0 sy = 1.0
    I/SurfaceView@dc4cc30(11518): pST: mTmpTransaction.apply, mTmpTransaction = android.view.SurfaceControl$Transaction@7147402
    I/SurfaceView@dc4cc30(11518): updateSurface: mVisible = true mSurface.isValid() = true
    I/SurfaceView@dc4cc30(11518): updateSurface: mSurfaceCreated = true surfaceChanged = false visibleChanged = false
    I/SurfaceView@dc4cc30(11518): surfaceChanged (1080,2265) 1 #5 io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ......ID 0,0-1080,2265}
    I/ViewRootImpl@61356d8[MainActivity](11518): [DP] dp(1) 1 android.view.SurfaceView.updateSurface:1375 android.view.SurfaceView.setFrame:675 android.view.View.layout:24458 
    I/ViewRootImpl@61356d8[MainActivity](11518): [DP] pdf(0) 1 android.view.SurfaceView.notifyDrawFinished:599 android.view.SurfaceView.performDrawFinished:586 android.view.SurfaceView.$r8$lambda$st27mCkd9jfJkTrN_P3qIGKX6NY:0 
    I/ViewRootImpl@61356d8[MainActivity](11518): [DP] rdf()
    D/ViewRootImpl@61356d8[MainActivity](11518): reportDrawFinished (fn: -1) 
    I/SurfaceView@dc4cc30(11518): uSP: rtp = Rect(0, 0 - 1080, 2265) rtsw = 1080 rtsh = 2265
    I/SurfaceView@dc4cc30(11518): onSSPAndSRT: pl = 0 pt = 0 sx = 1.0 sy = 1.0
    I/SurfaceView@dc4cc30(11518): aOrMT: uB = true t = android.view.SurfaceControl$Transaction@21c74aa fN = 2 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:319 
    I/SurfaceView@dc4cc30(11518): aOrMT: vR.mWNT, vR = ViewRootImpl@61356d8[MainActivity]
    I/ViewRootImpl@61356d8[MainActivity](11518): mWNT: t = android.view.SurfaceControl$Transaction@21c74aa fN = 2 android.view.SurfaceView.applyOrMergeTransaction:1628 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 
    I/ViewRootImpl@61356d8[MainActivity](11518): mWNT: merge t to BBQ
    D/InsetsSourceConsumer(11518): ensureControlAlpha: for ITYPE_NAVIGATION_BAR on com.app.example/com.app.example.activities.MainActivity
    D/InsetsSourceConsumer(11518): ensureControlAlpha: for ITYPE_STATUS_BAR on com.app.example/com.app.example.activities.MainActivity
    I/ViewRootImpl@61356d8[MainActivity](11518): MSG_WINDOW_FOCUS_CHANGED 1 1
    D/InputMethodManager(11518): startInputInner - Id : 0
    I/InputMethodManager(11518): startInputInner - mService.startInputOrWindowGainedFocus
    I/BufferQueueProducer(11518): [SurfaceView - com.app.example/com.app.example.activities.MainActivity@dc4cc30@1#3(BLAST Consumer)3](id:2cfe00000003,api:1,p:11518,c:11518) queueBuffer: queued for the first time.
    D/InputTransport(11518): Input channel destroyed: 'ClientS', fd=137
    I/ViewRootImpl@61356d8[MainActivity](11518): MSG_WINDOW_FOCUS_CHANGED 0 1
    D/InputTransport(11518): Input channel destroyed: 'ClientS', fd=150
    I/com.app.example(11518): Background concurrent copying GC freed 85935(2681KB) AllocSpace objects, 30(3292KB) LOS objects, 55% free, 4828KB/10MB, paused 10.638ms,26us total 35.368ms
    I/ViewRootImpl@61356d8[MainActivity](11518): handleAppVisibility mAppVisible=true visible=false
    I/SurfaceView@dc4cc30(11518): onWindowVisibilityChanged(8) false io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265} of ViewRootImpl@61356d8[MainActivity]
    I/SurfaceView@dc4cc30(11518): pST: mTmpTransaction.apply, mTmpTransaction = android.view.SurfaceControl$Transaction@7147402
    I/SurfaceView@dc4cc30(11518): surfaceDestroyed callback.size 1 #2 io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265}
    I/SurfaceView@dc4cc30(11518): updateSurface: mVisible = false mSurface.isValid() = true
    I/SurfaceView@dc4cc30(11518): tryReleaseSurfaces: set mRtReleaseSurfaces = true
    I/SurfaceView@dc4cc30(11518): 52667395 wPL, frameNr = 0
    I/SurfaceView@dc4cc30(11518): remove() from RT android.view.SurfaceView$SurfaceViewPositionUpdateListener@323a403 Surface(name=SurfaceView - com.app.example/com.app.example.activities.MainActivity@dc4cc30@1)/@0xf77ef80
    I/SurfaceView@dc4cc30(11518): remove() io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265} Surface(name=SurfaceView - com.app.example/com.app.example.activities.MainActivity@dc4cc30@1)/@0xf77ef80
    I/SurfaceView@dc4cc30(11518): aOrMT: uB = true t = android.view.SurfaceControl$Transaction@b08ebee fN = 0 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionLost:1785 android.graphics.RenderNode$CompositePositionUpdateListener.positionLost:326 
    I/SurfaceView@dc4cc30(11518): aOrMT: vR.mWNT, vR = ViewRootImpl@61356d8[MainActivity]
    I/ViewRootImpl@61356d8[MainActivity](11518): mWNT: t = android.view.SurfaceControl$Transaction@b08ebee fN = 0 android.view.SurfaceView.applyOrMergeTransaction:1628 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionLost:1785 
    I/ViewRootImpl@61356d8[MainActivity](11518): mWNT: merge t to BBQ
    D/OpenGLRenderer(11518): setSurface called with nullptr
    D/OpenGLRenderer(11518): setSurface() destroyed EGLSurface
    D/OpenGLRenderer(11518): destroyEglSurface
    I/ViewRootImpl@61356d8[MainActivity](11518): Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)8 dur=4 res=0x5 s={false 0} ch=true fn=18
    I/SurfaceView@dc4cc30(11518): windowStopped(true) false io.flutter.embedding.android.FlutterSurfaceView{dc4cc30 V.E...... ........ 0,0-1080,2265} of ViewRootImpl@61356d8[MainActivity]
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    I/ViewRootImpl@61356d8[MainActivity](11518): stopped(true) old=false
    D/SurfaceView@dc4cc30(11518): updateSurface: surface is not valid
    I/PhenotypeProcessReaper(11518): Memory state is: 400
    I/PhenotypeProcessReaper(11518): Killing process to refresh experiment configuration
    I/Process (11518): Sending signal. PID: 11518 SIG: 9
    Lost connection to device.
```
</details>

Output of flutter doctor -v

<details>
<summary>flutter doctor -v</summary>

```
[✓] Flutter (Channel stable, 3.3.7, on Microsoft Windows [Version 10.0.19044.2130], locale en-US)
    • Flutter version 3.3.7 on channel stable at E:\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision e99c9c7cd9 (3 days ago), 2022-11-01 16:59:00 -0700
    • Engine revision 857bd6b74c
    • Dart version 2.18.4
    • DevTools version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at E:\Android_SDK\android-sdk-windows
    • Platform android-33, build-tools 33.0.0
    • ANDROID_HOME = E:\Android_SDK\android-sdk-windows
    • ANDROID_SDK_ROOT = E:\Android_SDK\android-sdk-windows
    • Java binary at: E:\android-studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
    • All Android licenses accepted.

[✓] Chrome - develop for the web
    • Chrome at C:\Users\PC\AppData\Local\Google\Chrome\Application\chrome.exe

[!] Visual Studio - develop for Windows (Visual Studio Community 2022 17.4.0 Preview 3.0)
    • Visual Studio at E:\Program Files\Microsoft Visual Studio\2022\Preview
    • Visual Studio Community 2022 version 17.4.33006.217
    • The current Visual Studio installation is a pre-release version. It may not be supported by Flutter yet.
    • Windows 10 SDK version 10.0.18362.0
    ✗ Visual Studio is missing necessary components. Please re-run the Visual Studio installer for the "Desktop development with C++" workload, and
      include these components:
        MSVC v142 - VS 2019 C++ x64/x86 build tools
         - If there are multiple build tool versions available, install the latest
        C++ CMake tools for Windows
        Windows 10 SDK

[✓] Android Studio (version 2021.3)
    • Android Studio at E:\android-studio
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] VS Code (version 1.72.2)
    • VS Code at C:\Users\PC\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.52.0

[✓] Connected device (4 available)
    • SM A528B (mobile) • ############# • android-arm64  • Android 12 (API 31)
    • Windows (desktop) • windows     • windows-x64    • Microsoft Windows [Version 10.0.19044.2130]
    • Chrome (web)      • chrome      • web-javascript • Google Chrome 107.0.5304.88
    • Edge (web)        • edge        • web-javascript • Microsoft Edge 106.0.1370.42

[✓] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 1 category.
```
</details>