Skip to content

Instantly share code, notes, and snippets.

@loic-sharma
Last active July 21, 2023 23:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save loic-sharma/8f34d8c5ddff9538343f7d5aa56fc0a4 to your computer and use it in GitHub Desktop.
Save loic-sharma/8f34d8c5ddff9538343f7d5aa56fc0a4 to your computer and use it in GitHub Desktop.
Flutter Windows object model
---
title: Today's Flutter Windows object model
---
flowchart LR
  subgraph "Windows embedder (internal)"
    FlutterWindowsEngine
    FlutterWindowsView
    FlutterDesktopViewControllerState

    FlutterWindowsEngine-- points to -->FlutterWindowsView
    FlutterWindowsView-- std::unique_ptr -->FlutterWindowsEngine
    FlutterDesktopViewControllerState-- std::unique_ptr -->FlutterWindowsView
  end

  subgraph "Public C API"
    FlutterDesktopEngineRef
    FlutterDesktopViewControllerRef
  end


  app["Native app"]

  app-- owns -->FlutterDesktopViewControllerRef
  app-- points to -->FlutterDesktopEngineRef

  FlutterDesktopEngineRef-- "alias of" ---FlutterWindowsEngine
  FlutterDesktopViewControllerRef-- "alias of" ---FlutterDesktopViewControllerState
---
title: Flutter Windows object model
---
flowchart LR
  subgraph "Windows embedder (internal)"
    FlutterWindowsEngine
    fvcs1[FlutterDesktopViewControllerState]
    fwv1[FlutterWindowsView]

    FlutterWindowsEngine-- points to -->fwv1
    fwv1-- points to-->FlutterWindowsEngine
    fvcs1-- std::unique_ptr -->fwv1
  end

  subgraph "Public C API"
    FlutterDesktopEngineRef
    fvcref1[FlutterDesktopViewControllerRef]
  end

  app["Native app"]
  
  app-- owns-->FlutterDesktopEngineRef
  app-- owns -->fvcref1

  FlutterDesktopEngineRef-- "alias of" ---FlutterWindowsEngine
  fvcref1-- "alias of" ---fvcs1
---
title: Flutter Windows object model
---
flowchart LR
  subgraph "Windows embedder (internal)"
    FlutterWindowsEngine

    subgraph "View 1"
      fvcs1[FlutterDesktopViewControllerState]
      fwv1[FlutterWindowsView]

      fvcs1--std::unique_ptr-->fwv1
    end
    subgraph "View 2"
      fvcs2[FlutterDesktopViewControllerState]
      fwv2[FlutterWindowsView]

      fvcs2-- std::unique_ptr-->fwv2
    end

    FlutterWindowsEngine-- points to -->fwv1
    FlutterWindowsEngine-- points to-->fwv2
    fwv1-- points to -->FlutterWindowsEngine
    fwv2-- points to -->FlutterWindowsEngine
  end

  subgraph "Public C API"
    FlutterDesktopEngineRef

    subgraph "View 1"
        fvcref1[FlutterDesktopViewControllerRef]
    end
    subgraph "View 2"
        fvcref2[FlutterDesktopViewControllerRef]
    end
  end
  
  app["Native app"]
  
  app-- owns -->FlutterDesktopEngineRef
  app-- owns -->fvcref1
  app-- owns -->fvcref2

  FlutterDesktopEngineRef-- "alias of" ---FlutterWindowsEngine
  fvcref1-- "alias of" ---fvcs1
  fvcref2-- "alias of" ---fvcs2
---
title: Flutter Windows object model
---
flowchart LR
  subgraph "Windows embedder (internal)"
    FlutterWindowsEngine
    fvcs1[FlutterDesktopViewControllerState]
    fwv1[FlutterWindowsView]

    FlutterWindowsEngine-- points to -->fwv1
    fwv1-- points to-->FlutterWindowsEngine
    fvcs1-- std::unique_ptr -->FlutterWindowsEngine
    fvcs1-- std::unique_ptr -->fwv1

  end

  subgraph "Public C API"
    FlutterDesktopEngineRef
    fvcref1[FlutterDesktopViewControllerRef]
  end
  
  app["Native app"]
  
  app-- owns -->fvcref1
  app-- points to-->FlutterDesktopEngineRef

  FlutterDesktopEngineRef-- "alias of" ---FlutterWindowsEngine
  fvcref1-- "alias of" ---fvcs1
---
title: Today's Flutter Windows object model
---
flowchart LR
  subgraph "Windows embedder (internal)"
    FlutterWindowsEngine
    FlutterWindowsView
    FlutterDesktopViewControllerState

    FlutterWindowsEngine -- points to -->FlutterWindowsView
    FlutterWindowsView-- std::unique_ptr -->FlutterWindowsEngine
    FlutterDesktopViewControllerState-- std::unique_ptr -->FlutterWindowsView
  end

  subgraph "Public C API"
    FlutterDesktopEngineRef
    FlutterDesktopViewControllerRef
  end

  subgraph "Public C++ API"
    FlutterEngine
    FlutterViewController

    FlutterViewController-- std::unique_ptr -->FlutterEngine
  end

  app["Native app"]

  app-- owns -->FlutterViewController

  FlutterEngine-- points to -->FlutterDesktopEngineRef
  FlutterViewController-- owns -->FlutterDesktopViewControllerRef

  FlutterDesktopEngineRef-- "alias of" ---FlutterWindowsEngine
  FlutterDesktopViewControllerRef-- "alias of" ---FlutterDesktopViewControllerState
---
title: Flutter Windows object model
---
flowchart LR
  subgraph "Windows embedder (internal)"
    FlutterWindowsEngine
    fvcs1[FlutterDesktopViewControllerState]
    fwv1[FlutterWindowsView]

    FlutterWindowsEngine-- points to -->fwv1
    fwv1-- points to-->FlutterWindowsEngine
    fvcs1-- std::unique_ptr -->fwv1

  end

  subgraph "Public C API"
    FlutterDesktopEngineRef
    fvcref1[FlutterDesktopViewControllerRef]
  end

  subgraph "Public C++ API"
    fvc1[FlutterViewController]
    FlutterEngine

    fvc1-- std::shared_ptr -->FlutterEngine
  end
  
  app["Native app"]
  
  app-- owns -->fvc1

  FlutterEngine-- owns -->FlutterDesktopEngineRef
  fvc1-- owns -->fvcref1

  FlutterDesktopEngineRef-- "alias of" ---FlutterWindowsEngine
  fvcref1-- "alias of" ---fvcs1
---
title: Flutter Windows object model
---
flowchart LR
  subgraph "Windows embedder (internal)"
    FlutterWindowsEngine

    subgraph "View 1"
      fvcs1[FlutterDesktopViewControllerState]
      fwv1[FlutterWindowsView]

      fvcs1-- std::unique_ptr -->fwv1
    end
    subgraph "View 2"
      fvcs2[FlutterDesktopViewControllerState]
      fwv2[FlutterWindowsView]

      fvcs2-- std::unique_ptr -->fwv2
    end

    FlutterWindowsEngine-- points to -->fwv1
    FlutterWindowsEngine-- points to -->fwv2
    fwv1-- points to -->FlutterWindowsEngine
    fwv2-- points to -->FlutterWindowsEngine
  end

  subgraph "Public C API"
    FlutterDesktopEngineRef

    subgraph "View 1"
        fvcref1[FlutterDesktopViewControllerRef]
    end
    subgraph "View 2"
        fvcref2[FlutterDesktopViewControllerRef]
    end
  end

  subgraph "Public C++ API"
    subgraph "View 1"
        fvc1[FlutterViewController]
    end
    subgraph "View 2"
        fvc2[FlutterViewController]
    end

    FlutterEngine

    fvc1-- std::shared_ptr -->FlutterEngine
    fvc2-- std::shared_ptr -->FlutterEngine
  end
  
  app["Native app"]
  
  app-- std::shared_ptr -->FlutterEngine
  app-- owns -->fvc1
  app-- owns -->fvc2


  FlutterEngine-- owns -->FlutterDesktopEngineRef
  fvc1-- owns -->fvcref1
  fvc2-- owns -->fvcref2

  FlutterDesktopEngineRef-- "alias of" ---FlutterWindowsEngine
  fvcref1-- "alias of" ---fvcs1
  fvcref2-- "alias of" ---fvcs2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment