Hi @Wally - Here’s a working version of your app. It doesn’t actually need an init()
method as the number widget value is initialized from a session variable anyway when the program first starts. Then I use a callback to memoize the number session variable from the number widget value. This would also work in a multi-page app.
import streamlit as st
session = st.session_state
if 'N' not in session:
session.N = 3
def main() -> None:
def _set_number_cb():
session.N = session.n
hide = st.checkbox('hide?', value=False)
if not hide:
st.number_input(label='Number', min_value=1, max_value=5, step=1, value=session.N, key='n', on_change=_set_number_cb)
st.write(session.N)
st.button("click to trigger re-run")
st.json(session)
if __name__ == "__main__":
main()