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.runFields keys must be written in
CamelCaseregisterdatafields 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 fieldStep 3 — Results
Let's run the app and take a look at our improved timer!
\
Last updated
Was this helpful?