Part 4 — State and Data [Mutable Fields]
In this part, you will learn how to change the values of state and data fields. And how they can be used in the application.
Table of contents
Step 1 — Mutable state && data fields
Remember the Part 6 State Machine?
But what if we want to change the value of the timer?
For these purposes, we have two types of fields
available:
state — for storing lightweight values
data — for storing heavyweight values
In order to use mutable fields while the application is running:
All required fields must be initialized before calling
app.run
Fields keys must be written in
CamelCase
registerdata
fields can't read the values of widgets, so for widgets you need to usestate
src/main.py (partially)
def main():
data = {}
state = {}
# initialize required fields here
state['timerValue'] = 0
data['timeLeft'] = None
app.run(data=data, state=state)
Step 2 — GET && SET field
To get
or set
field, we need to refer to the api
of the application.
Here's a simple example:
src/main.py (partially)
app = sly.AppService()
app_api = app.public_api
logger = sly.logger
@app.callback('start_timer')
def start_timer(api: sly.Api, task_id, context, state, app_logger):
timer_value = app_api.app.get_field(task_id=task_id,
field='state.timerValue') # getting field
...
app_api.app.set_field(task_id=task_id,
field='data.timeLeft',
payload=0) # setting field
Step 3 — Results
Let's run the app and take a look at our improved timer!
Last updated
Was this helpful?