Buttons will only be True immediately after clicked, then go back to False. So if you want a button to conditionally display something, and keep it displaying while you proceed with other interaction, yes, you’d need to use session state.
if 'show' not in st.session_state:
st.session_state.show = False
def toggle_show():
st.session_state.show = not st.session_state.show
st.button('Show', on_click=toggle_show)
if st.session_state.show:
# Your code, including widgets if you want
Instead of setting your condition directly on the button, you use the button to affect something in session state, then condition on that data stored in session state so it persists.
I did a little introductory video on session state geared around widget interaction: Session State Introduction