Components
Source section: `https://appsudo.com/doc#components`
High-level taxonomy
- Layout: `HorizontalView`, `VerticalView`, `ScrollView`, `RelativeView`, `RepeatView`, `View`, `BottomView`, `DrawerView`, `PopupView`
- Input: `Button`, `TextBox`, `Checkbox`, `CheckboxList`, `Radio`, `RadioList`, `DatePicker`, `Dropdown`, `Slider`, `SpinBox`, `Switch`
- Display/navigation/media: `Label`, `Icon`, `Progress`, `BottomMenu`, `BottomNavigation`, `Divider`, `Image`, `Video`, `WebView`, `TabWebView`, `Map`
- Control: `Canvas`
Common cross-component patterns
- Use `id` for later lookup via `find_element_by_id(...)`.
- Many components support `width`, `height`, `margin`, `padding`, `background-color`, `border-*`, `alignment`, `enabled`, and `style`.
- The docs show layout containers becoming tappable with `clickable="true"` and `on-click="handler"`.
- `style="namespace.rule_name"` references ASCSS definitions.
Representative examples from the docs
`HorizontalView` XML:
```xml
```
Weighted layout:
```xml
```
Clickable container:
```xml
```
`RepeatView` XML:
```xml
```
`RepeatView` Python:
```python
from components.view import RepeatView
class TextData:
def __init__(self, text):
self.text = text
def setup(self):
self.list = [TextData("Item 1"), TextData("Item 2"), TextData("Item 3")]
self.repeat_view = RepeatView()
self.repeat_view.set_on_create_view(self.on_create_view)
self.repeat_view.set_on_bind_view(self.on_bind_view)
self.repeat_view.set_items(self.list)
self.repeat_view.set_layout_type("vertical")
def on_create_view(self, parent):
return self.inflater.inflate("item_template", None)
def on_bind_view(self, view, item):
label = view.find_element_by_id("item_label")
label.set_text(item.text)
```
`WebView` Python:
```python
from components.basic import WebView
web_view = WebView()
web_view.set_url("https://example.com")
web_view.set_javascript_enabled(True)
web_view_html = WebView()
web_view_html.set_html("
Hello, World!
This is HTML content.
")
web_view_html.set_base_url("https://example.com")
```
`TabWebView` Python:
```python
from components.basic import TabWebView
tab_web_view = TabWebView()
tab_web_view.launch_url("https://example.com")
```
`Canvas` Python:
```python
from components.canvas import Canvas
canvas = Canvas()
# def on_draw(self, canvas_obj):
# canvas_obj.draw_rect(10, 10, 100, 50, "#ff0000")
# canvas_obj.draw_text("Hello, Canvas!", 20, 40, "#ffffff")
# canvas_obj.draw_circle("#0000ff", 150, 100, 30)
```
Important callback signatures shown by the docs
- Normal tap handlers: `def handler(self, element): ...`
- `TextBox on-change`: `def on_text_change(self, element, value): ...`
- `Checkbox on-change`: `def on_checkbox_change(self, element, checked): ...`
- `Dropdown on-change`: `def on_dropdown_change(self, element, index): ...`
- `Slider on-change`: `def on_slider_change(self, element, progress_value): ...`
- `SpinBox on-change`: `def on_spin_box_change(self, element, old_value, new_value): ...`
- In a `RepeatView` template, some click handlers receive `(self, element, item)`.
Component-specific notes worth preserving
- `RepeatView` is documented as the component for displaying lists, grids, or collections of data.
- `WebView` can load URLs or raw HTML and supports navigation methods.
- `Map.add_marker(...)` is Python-only, not ASXML.
- `Canvas` is the drawing surface for games and custom rendering.
Code Snippets From Docs
- The blocks below were extracted from the corresponding section of `appsudo.com/doc`.
Snippet 1
```
```
Snippet 2
```
```
Snippet 3
```
```
Snippet 4
```
from components.view import HorizontalView
from components.form import Button
horizontal_view = HorizontalView()
button1 = Button()
button1.set_text("Button 1")
button2 = Button()
button2.set_text("Button 2")
horizontal_view.add_element(button1)
horizontal_view.add_element(button2)
horizontal_view.refresh()
def on_click_payment_option(self, element):
pass
```
Snippet 5
```
```
Snippet 6
```
```
Snippet 7
```
```
Snippet 8
```
from components.view import VerticalView
from components.form import Button
vertical_view = VerticalView()
button1 = Button()
button1.set_text("Button 1")
button2 = Button()
button2.set_text("Button 2")
vertical_view.add_element(button1)
vertical_view.add_element(button2)
vertical_view.refresh()
def on_question_item_click(self, element, item):
pass
```
Snippet 9
```
```
Snippet 10
```
from components.view import ScrollView, VerticalView
from components.form import Label
# Create a scroll view
scroll_view = ScrollView()
# Create a vertical view as content
content = VerticalView()
# Add items to the content
for i in range(20):
label = Label()
label.set_text(f"Item {i+1}")
content.add_element(label)
# Add the content to the scroll view
scroll_view.add_element(content)
scroll_view.refresh()
```
Snippet 11
```
```
Snippet 12
```
from components.view import RelativeView
from components.form import Button
# Create a relative view
relative_view = RelativeView()
# Create buttons
center_button = Button()
center_button.set_text("Center")
center_button.set_id("centerButton")
center_button.set_align_to("parent@center")
top_button = Button()
top_button.set_text("Top")
top_button.set_id("topButton")
top_button.set_align_to("parent@top|parent@center_horizontal")
bottom_button = Button()
bottom_button.set_text("Bottom")
bottom_button.set_id("bottomButton")
bottom_button.set_align_to("parent@bottom|parent@center_horizontal")
# Add buttons to the relative view
relative_view.add_element(center_button)
relative_view.add_element(top_button)
relative_view.add_element(bottom_button)
relative_view.refresh()
```
Snippet 13
```
```
Snippet 14
```
from components.view import RepeatView
# In your App class:
# Assuming TextData class is defined elsewhere or is a simple placeholder
class TextData:
def __init__(self, text):
self.text = text
def setup(self):
self.list = [TextData("Item 1"), TextData("Item 2"), TextData("Item 3")]
self.repeat_view = RepeatView()
self.repeat_view.set_on_create_view(self.on_create_view)
self.repeat_view.set_on_bind_view(self.on_bind_view)
self.repeat_view.set_items(self.list)
self.repeat_view.set_layout_type("vertical")
def on_create_view(self, parent):
# Create and return a view for each item
view = self.inflater.inflate("item_template", None) # Assuming item_template.asxml exists
return view
def on_bind_view(self, view, item):
# Bind data to the view
label = view.find_element_by_id("item_label") # Assuming item_label ID in item_template.asxml
label.set_text(item.text)
```
Snippet 15
```
```
Snippet 16
```
from components.view import View
from components.form import Label
# Create a view
view = View()
# Add a label to it
label = Label()
label.set_text("Custom View Content")
view.add_element(label)
view.refresh()
```
Snippet 17
```
```
Snippet 18
```
from components.view import BottomView
bottom_view = self.ui_view.find_element_by_id("bottom_view")
bottom_view.show()
def on_cancel(self, element):
bottom_view.dismiss()
def on_confirm(self, element):
self.process_payment()
bottom_view.dismiss()
```
Snippet 19
```
self.drawer_menu = {
"": [
{"title": "Sudo AI", "icon": application_path + "/res/images/sudo_ai.png"},
{"title": "New Chat", "icon": application_path + "/res/images/new_chat.png"},
{"title": "Settings", "icon": application_path + "/res/images/setting_icon.png"}
],
"Chats": [
{"title": "Chat Title A", "checked": True},
{"title": "Chat Title B", "checked": False}
]
}
```
Snippet 20
```
```
Snippet 21
```
from components.view import DrawerView
def on_navigate_click(self, element, menu_name):
if menu_name == "New Chat":
self.reset_chat()
elif menu_name == "Settings":
self.open_settings()
self.ui_view.close()
self.data.drawer_menu["Chats"].append({"title": "Chat Title C", "checked": False})
self.ui_view.set_drawer_menu(self.data.drawer_menu)
```
Snippet 22
```
```
Snippet 23
```
from components.view import PopupView
popup_view = self.ui_view.find_element_by_id("popup_view")
popup_view.show()
def on_close_popup(self, element):
popup_view.dismiss()
def on_dismiss_payment_option(self, element):
bottom_view = self.ui_view.find_element_by_id("bottom_view")
bottom_view.show()
```
Snippet 24
```
```
Snippet 25
```
from components.form import Button
# Create a button
button = Button()
button.set_text("Click Me")
# button.set_on_click(self.on_click) # Assuming self.on_click is defined in the app class
# Define the click handler in your app class
# def on_click(self, element):
# # Handle button click
# print("Button clicked!")
```
Snippet 26
```
```
Snippet 27
```
from components.form import TextBox
# Create a text box
text_box = TextBox()
text_box.set_text("Initial text")
text_box.set_placeholder("Enter text...")
text_box.set_input_type("single")
# text_box.set_on_change(self.on_text_change) # Assuming self.on_text_change is defined
# Define the change handler in your app class
def on_text_change(self, element, value):
print(f"Text changed: {value}")
```
Snippet 28
```
```
Snippet 29
```
from components.form import Checkbox
# Create a checkbox
checkbox = Checkbox()
checkbox.set_text("Enable feature")
checkbox.set_checked(True)
checkbox.set_enabled(True)
# checkbox.set_on_change(self.on_checkbox_change) # Assuming self.on_checkbox_change is defined
# Define the change handler in your app class
# def on_checkbox_change(self, element, checked):
# print(f"Checkbox changed: {checked}")
```
Snippet 30
```
```
Snippet 31
```
from components.form import CheckboxList
# Create a checkbox list
checkbox_list = CheckboxList()
checkbox_list.set_options(["Option 1", "Option 2", "Option 3"])
checkbox_list.set_checked_states([True, False, False])
checkbox_list.set_enabled(True)
# checkbox_list.set_on_change(self.on_checkbox_list_change) # Assuming self.on_checkbox_list_change
# Define the change handler in your app class
# def on_checkbox_list_change(self, index, element, is_checked):
# print(f"Option {index} changed: {is_checked}")
# Get checked options
# checked_options = checkbox_list.get_checked_options()
```
Snippet 32
```
```
Snippet 33
```
from components.form import Radio
# Create a radio button
radio = Radio()
radio.set_text("Select this option")
radio.set_checked(True)
radio.set_enabled(True)
# radio.set_on_change(self.on_radio_change) # Assuming self.on_radio_change is defined
# Define the change handler in your app class
# def on_radio_change(self, element, checked):
# print(f"Radio changed: {checked}")
# Check if radio is checked
# is_checked = radio.get_checked()
```
Snippet 34
```
```
Snippet 35
```
from components.form import RadioList
# Create a radio list
radio_list = RadioList()
radio_list.set_options(["Option 1", "Option 2", "Option 3"])
radio_list.set_selected_index(0)
radio_list.set_enabled(True)
# radio_list.set_on_change(self.on_radio_list_change) # Assuming self.on_radio_list_change
# Define the change handler in your app class
# def on_radio_list_change(self, element, checked_index):
# print(f"Selected option: {checked_index}")
```
Snippet 36
```
```
Snippet 37
```
from components.form import DatePicker
# Create a date picker for date only
date_picker = DatePicker()
date_picker.set_mode("date")
date_picker.set_date((2023, 5, 15)) # Year, Month, Day
date_picker.set_show_calender_view(True)
# date_picker.set_on_date_change(self.on_date_change) # Assuming self.on_date_change
# Create a time picker
time_picker = DatePicker()
time_picker.set_mode("time")
time_picker.set_time((14, 30)) # Hours, Minutes
time_picker.set_24h_view(True)
# time_picker.set_on_time_change(self.on_time_change) # Assuming self.on_time_change
# Define change handlers in your app class
# def on_date_change(self, element, year, month, day):
# print(f"Date changed: {year}-{month}-{day}")
# def on_time_change(self, element, hours, minutes):
# print(f"Time changed: {hours}:{minutes}")
# Get selected date and time
# selected_date = date_picker.get_selected_date()
# selected_time = time_picker.get_selected_time()
```
Snippet 38
```
```
Snippet 39
```
from components.form import Dropdown
# Create a dropdown
dropdown = Dropdown()
dropdown.set_options(["Option 1", "Option 2", "Option 3"])
dropdown.set_selected_index(0)
dropdown.set_prompt("Select an option")
dropdown.set_enabled(True)
# dropdown.set_on_change(self.on_dropdown_change) # Assuming self.on_dropdown_change
# Define the change handler in your app class
# def on_dropdown_change(self, element, index):
# print(f"Selected option: {index}")
# Get selected option
# selected_option = dropdown.get_selected_option()
# selected_index = dropdown.get_selected_index()
```
Snippet 40
```
```
Snippet 41
```
from components.form import Slider
# Create a slider
slider = Slider()
slider.set_range((0, 100))
slider.set_value(50)
slider.set_enabled(True)
# slider.set_on_change(self.on_slider_change) # Assuming self.on_slider_change
# slider.set_on_start(self.on_slider_start) # Assuming self.on_slider_start
# slider.set_on_stop(self.on_slider_stop) # Assuming self.on_slider_stop
# Define handlers in your app class
# def on_slider_change(self, element, progress_value):
# print(f"Slider value: {progress_value}")
# def on_slider_start(self, element):
# print("Slider interaction started")
# def on_slider_stop(self, element):
# print("Slider interaction stopped")
```
Snippet 42
```
```
Snippet 43
```
from components.form import SpinBox
# Create a spin box
spin_box = SpinBox()
spin_box.set_range((0, 100))
spin_box.set_value(50)
spin_box.set_enabled(True)
# spin_box.set_on_change(self.on_spin_box_change) # Assuming self.on_spin_box_change
# Define the change handler in your app class
# def on_spin_box_change(self, element, old_value, new_value):
# print(f"Value changed from {old_value} to {new_value}")
# Get current value
# current_value = spin_box.get_value()
```
Snippet 44
```
```
Snippet 45
```
from components.form import Switch
# Create a switch
switch_control = Switch() # Renamed to avoid conflict with keyword
switch_control.set_text("Enable feature")
switch_control.set_checked(True)
switch_control.set_enabled(True)
# switch_control.set_on_change(self.on_switch_change) # Assuming self.on_switch_change
# Define the change handler in your app class
# def on_switch_change(self, element, is_checked):
# print(f"Switch changed: {is_checked}")
# Get switch state
# is_on = switch_control.get_checked()
```
Snippet 46
```
```
Snippet 47
```
from components.form import Label
# Create a label
label = Label()
label.set_text("Hello, World!")
# Optional: set click handler
# label.set_on_click(self.on_label_click) # Assuming self.on_label_click
# Get label text
# text = label.get_text()
# Define click handler in your app class
# def on_label_click(self, element):
# print("Label clicked")
```
Snippet 48
```
```
Snippet 49
```
from components.form import Icon
# Assuming application_path is defined in the context where this code runs
# For example, in an App class: self.application_path
# Create an icon
icon = Icon()
# icon.set_src(application_path + "/res/images/icon.png")
icon.set_color("#4a6cff")
icon.set_size("24dp")
```
Snippet 50
```
```
Snippet 51
```
from components.form import Progress
# Create a determinate progress bar
progress_bar = Progress()
progress_bar.set_progress(50) # Current value
progress_bar.set_max_progress(100) # Maximum value
progress_bar.set_progress_style("horizontal")
# Create an indeterminate progress indicator
loading_indicator = Progress()
loading_indicator.set_indeterminate(True)
loading_indicator.set_progress_style("default")
```
Snippet 52
```
BottomMenu is primarily created and managed in Python code.
```
Snippet 53
```
from components.basic import BottomMenu
# Assuming application_path is defined, e.g., self.application_path in an App class
# Create a bottom menu
bottom_menu = BottomMenu()
bottom_menu.set_icon_size(24) # Set icon size to 24dp
# bottom_menu.set_menu_items([
# ("Home", application_path + "/res/images/home_icon.png"),
# ("Search", application_path + "/res/images/search_icon.png"),
# ("Profile", application_path + "/res/images/profile_icon.png")
# ])
# Set click handlers
# bottom_menu.set_click_handlers([
# self.on_home_click, # Assuming these methods are defined in the app class
# self.on_search_click,
# self.on_profile_click
# ])
# Define click handlers in your app class
# def on_home_click(self):
# print("Home menu clicked")
# def on_search_click(self):
# print("Search menu clicked")
# def on_profile_click(self):
# print("Profile menu clicked")
# Show the bottom menu
# bottom_menu.show()
# Hide the bottom menu when needed
# bottom_menu.dismiss()
```
Snippet 54
```
self.menus = [
{"title": "Home", "icon": application_path + "/res/images/home.png"},
{"title": "Search", "icon": application_path + "/res/images/search.png"},
{"title": "Post", "icon": application_path + "/res/images/post.png"},
{"title": "Profile","icon": application_path + "/res/images/profile.png"}
]
```
Snippet 55
```
```
Snippet 56
```
from core import Logger
def on_navigation_click(self, element, menu):
Logger.write(menu)
if menu == "Home":
self.load_home_view()
elif menu == "Search":
self.load_search_view()
elif menu == "Post":
self.load_post_view()
elif menu == "Profile":
self.load_profile_view()
```
Snippet 57
```
```
Snippet 58
```
```
Snippet 59
```
from components.media import Image
from runtime.ImageHelper import ImageHelper
# Assuming application_path is defined, e.g., self.application_path in an App class
# Create an image from local path
image = Image()
# image.set_src(application_path + "/res/images/photo.jpg")
image.set_scale_type("center_crop")
# Create a rounded image
rounded_image = Image()
# rounded_image.set_src(application_path + "/res/images/avatar.jpg")
rounded_image.set_scale_type("rounded")
rounded_image.set_radius("20dp")
# Load a remote image by passing the URL string directly
remote_image = Image()
remote_image.set_src("https://example.com/image.jpg")
```
Snippet 60
```
```
Snippet 61
```
from components.media import Video
# Assuming application_path is defined for local files
# Create a video player
video = Video()
video.set_uri("https://example.com/video.mp4") # HTTP location
# Or use local file:
# video.set_uri(application_path + "/res/videos/sample.mp4")
# video.set_on_play_state_change(self.on_video_state_change) # Assuming self.on_video_state_change
# video.set_on_player_error(self.on_video_error) # Assuming self.on_video_error
# Control playback
# video.play()
# video.pause()
# video.stop()
# video.seek_to(30000) # Seek to 30 seconds (in milliseconds)
# Get video information
# duration = video.get_duration()
# current_position = video.get_current_position()
# Define event handlers in your app class
# def on_video_state_change(self, element, playback_state):
# print(f"Playback state changed: {playback_state}")
# def on_video_error(self, element, error):
# print(f"Video player error: {error}")
```
Snippet 62
```
```
Snippet 63
```
from components.basic import WebView
# Create a web view with a URL
web_view = WebView()
web_view.set_url("https://example.com")
web_view.set_javascript_enabled(True)
# Alternative: Load HTML content
web_view_html = WebView()
web_view_html.set_html("Hello, World!
This is HTML content.
")
web_view_html.set_base_url("https://example.com") # Optional base URL for relative paths
# Navigation methods
# web_view.load_url("https://example.com/page2")
# web_view.load_html("New Content
", "https://example.com")
# web_view.go_back()
# web_view.go_forward()
# web_view.reload()
```
Snippet 63a
```
from components.basic import TabWebView
tab_web_view = TabWebView()
tab_web_view.launch_url("https://example.com")
```
Snippet 64
```
```
Snippet 65
```
from components.basic import Map
# Create a map
map_view = Map()
map_view.set_location((40.7128, -74.0060, 12)) # Latitude, Longitude, Zoom level
# Add markers
map_view.add_marker(40.7128, -74.0060, "New York City")
map_view.add_marker(37.7749, -122.4194, "San Francisco")
# Update the map (after adding markers or changing location)
map_view.update_map()
```
Snippet 66
```
Canvas is primarily created and managed in Python code.
```
Snippet 67
```
from components.canvas import Canvas
# Assuming application_path is defined, e.g., self.application_path in an App class
# Create a canvas
canvas = Canvas()
# Define the draw handler in your app class
# def on_draw(self, canvas_obj): # Renamed 'canvas' to 'canvas_obj' to avoid conflict
# # Draw a rectangle
# canvas_obj.draw_rect(10, 10, 100, 50, "#ff0000")
# # Draw text
# canvas_obj.draw_text("Hello, Canvas!", 20, 40, "#ffffff")
# # Draw a circle
# canvas_obj.draw_circle("#0000ff", 150, 100, 30)
# # Draw a line
# canvas_obj.draw_line(200, 10, 300, 50, "#00ff00", 2)
# # Draw a polygon
# points = [(50, 50), (100, 50), (75, 100)]
# canvas_obj.draw_polygon("#ffff00", points)
# # Draw an ellipse
# canvas_obj.draw_ellipse("#ff00ff", (200, 200, 100, 50))
# # Draw an arc
# canvas_obj.draw_arc("#00ffff", (300, 300, 100, 100), 0, 180)
# # Draw a bitmap
# from runtime.ImageHelper import ImageHelper
# bitmap = ImageHelper.get_bitmap(application_path + "/res/images/logo.png")
# canvas_obj.draw_bitmap(bitmap, 400, 50)
# Set the draw handler
# canvas.on_draw = self.on_draw
# Handle touch events in your app class
# def on_touch(self, element, action, x, y):
# print(f"Touch at ({x}, {y}) with action {action}")
# canvas.on_touch = self.on_touch
# Handle key events in your app class
# def on_keyup(self, element, key_code, event):
# print(f"Key pressed: {key_code}")
# canvas.on_keyup = self.on_keyup
# Get canvas dimensions
# width = canvas.get_width()
# height = canvas.get_height()
# Update and clear
# canvas.update() # Refresh the display
# canvas.clear() # Clear all drawings
```
Detailed Coverage Map
- The entries below were derived from the section structure in `appsudo.com/doc`.
Categories
- Layout
- Input
- Display
- Media
- Control
Articles
- `component-horizontalview`: HorizontalView
Methods/attributes: width, height, weight-sum, weight, clickable, on-click, alignment, padding, margin, background-color, background, border-color, border-width, border-radius, align-to, id, style, enabled
- `component-verticalview`: VerticalView
Methods/attributes: width, height, weight-sum, weight, clickable, on-click, alignment, padding / margin, background-color / background, border-color / border-width / border-radius, align-to, id, style, enabled
- `component-scrollview`: ScrollView
- `component-relativeview`: RelativeView
- `component-repeatview`: RepeatView
Methods/attributes: set_on_create_view, set_on_bind_view, set_items, set_layout_type
- `component-view`: View
Methods/attributes: add_element, refresh, find_element_by_id
- `component-bottomview`: BottomView
Methods/attributes: show, dismiss, find_element_by_id, add_element, id, width / height, padding / margin, background-color, border-width / border-color, border-radius-top-left / -top-right, border-radius-bottom-left / -bottom-right, weight / weight-sum, clickable, on-click, align-to
- `component-drawerview`: DrawerView
Methods/attributes: set_drawer_menu, close, find_element_by_id, on_navigate_click, drawer-menu, toolbar-title, on-navigate, width / height, padding / margin, background-color / background, weight / weight-sum / clickable / on-click, id, DrawerToolbarView, DrawerHeaderView, DrawerFooterView
- `component-popupview`: PopupView
Methods/attributes: show, dismiss, find_element_by_id, add_element, on_dismiss, id, width / height, padding / margin, background-color / background, border-color / border-width / border-radius, on-dismiss, weight / weight-sum / clickable / on-click, alignment
- `component-button`: Button
Methods/attributes: set_text, set_on_click
- `component-textbox`: TextBox
Methods/attributes: set_text, get_text, set_input_type, set_placeholder, set_on_change
- `component-checkbox`: Checkbox
Methods/attributes: set_text, set_checked, set_enabled, set_on_change, get_checked
- `component-checkboxlist`: CheckboxList
Methods/attributes: set_options, set_checked_states, set_enabled, set_on_change, get_checked_options
- `component-radio`: Radio
Methods/attributes: set_text, set_checked, set_enabled, get_checked, set_on_change, is_checked
- `component-radiolist`: RadioList
Methods/attributes: set_options, set_selected_index, set_enabled, set_on_change
- `component-datepicker`: DatePicker
Methods/attributes: set_mode, set_date, set_time, set_show_calender_view, set_on_date_change, set_on_time_change, set_24h_view, get_selected_date, get_selected_time
- `component-dropdown`: Dropdown
Methods/attributes: set_options, set_selected_index, set_prompt, set_enabled, set_on_change, get_selected_option, get_selected_index
- `component-slider`: Slider
Methods/attributes: set_range, set_value, set_enabled, set_on_change, set_on_start, set_on_stop
- `component-spinbox`: SpinBox
Methods/attributes: set_range, set_value, get_value, set_enabled, set_on_change
- `component-switch`: Switch
Methods/attributes: set_text, set_checked, set_enabled, set_on_change, get_checked
- `component-label`: Label
Methods/attributes: set_text, get_text, set_on_click
- `component-icon`: Icon
Methods/attributes: set_src, set_color, set_size
- `component-progress`: Progress
Methods/attributes: set_progress, set_max_progress, set_indeterminate, set_progress_style
- `component-bottommenu`: BottomMenu
Methods/attributes: set_icon_size, set_menu_items, show, dismiss, set_click_handlers
- `component-bottomnavigation`: BottomNavigation
Methods/attributes: on_item_selected, menu-items, on-item-selected, label-mode, align-to, width / height, background-color, padding / margin, border-color / border-width, id
- `component-divider`: Divider
Methods/attributes: width, height, thickness, color, margin-top / -bottom / -left / -right, padding / padding-*, background-color, align-to, id
- `component-image`: Image
Methods/attributes: set_src, set_scale_type, set_radius
- `component-video`: Video
Methods/attributes: set_uri, set_on_play_state_change, set_on_player_error, play, pause, stop, seek_to, get_duration, get_current_position
- `component-webview`: WebView
Methods/attributes: set_url, set_html, set_base_url, set_javascript_enabled, load_url, load_html, go_back, go_forward, reload
- `component-tabwebview`: TabWebView
Methods/attributes: launch_url
- `component-map`: Map
Methods/attributes: set_location, add_marker, update_map
- `component-canvas`: Canvas
Methods/attributes: get_width, get_height, on_touch, on_keyup, close, is_disposed, update, clear, on_draw, draw_text, draw_rect, draw_circle, draw_line, draw_color, draw_ellipse, draw_arc, draw_polygon, draw_colors, draw_bitmap