Screen behaviour and Spark DSL entry point.
Usage
defmodule MyApp.CounterScreen do
use Dala.Screen
attributes do
attribute :count, :integer, default: 0
end
screen do
name :counter
column do
gap :space_sm
text "Count: @count"
button "Increment", on_tap: :increment
end
end
def handle_event(:increment, _params, socket) do
{:noreply, Dala.Ui.Socket.assign(socket, :count, socket.assigns.count + 1)}
end
endStarting a screen
Dala.Screen.start_root(MyApp.CounterScreen, %{})Dispatching events
Dala.Screen.Screen.dispatch(pid, "increment", %{})
Summary
Functions
Returns a specification to start this module under a supervisor.
Send a message to a screen identified by identifier (id, name, or pid).
Dispatch a UI event to the screen process. Returns :ok synchronously once
the event has been processed and the state updated.
Return the module of the currently active screen in the navigation stack. Intended for testing and debugging.
Return the navigation history (list of {module, socket} pairs, head = most recent).
Intended for testing and debugging.
Return the current socket state of a running screen. Intended for testing and debugging — not for production app logic.
Apply a navigation action directly. Used by Dala.Test to drive navigation
programmatically without needing a UI event. Synchronous — the caller blocks
until the navigation (and re-render, in production mode) completes.
List all registered screens.
Start a screen process linked to the calling process.
Start a screen as the root UI screen. Calls mount, renders the component tree
via Dala.Ui.Renderer, and calls set_root on the resulting view.
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec dispatch(identifier :: pid() | atom() | integer(), message :: term()) :: :ok | {:error, :not_found}
Send a message to a screen identified by identifier (id, name, or pid).
Returns :ok if sent, {:error, :not_found} if identifier doesn't match any screen.
Examples
MyApp.MyScreen.dispatch(:my_screen, {:update, data})
MyApp.MyScreen.dispatch(123, {:update, data})
MyApp.MyScreen.dispatch(pid, {:update, data})
Dispatch a UI event to the screen process. Returns :ok synchronously once
the event has been processed and the state updated.
Return the module of the currently active screen in the navigation stack. Intended for testing and debugging.
Return the current socket state of a running screen. Intended for testing and debugging — not for production app logic.
Apply a navigation action directly. Used by Dala.Test to drive navigation
programmatically without needing a UI event. Synchronous — the caller blocks
until the navigation (and re-render, in production mode) completes.
Valid actions mirror the Dala.Ui.Socket navigation functions:
{:push, dest, params}— push a new screen{:pop}— pop to the previous screen{:pop_to, dest}— pop to a specific screen in history{:pop_to_root}— pop to the root of the current stack{:reset, dest, params}— replace the entire nav stack
List all registered screens.
Returns a list of maps with :id, :name, :pid, :module.
@spec start_link(module(), map(), keyword()) :: GenServer.on_start()
Start a screen process linked to the calling process.
params is passed as the first argument to mount/3.
@spec start_root(module(), map(), keyword()) :: GenServer.on_start()
Start a screen as the root UI screen. Calls mount, renders the component tree
via Dala.Ui.Renderer, and calls set_root on the resulting view.
This is the main entry point for production use. start_link/2 is for tests
(no NIF calls).