In short:
- create a struct representing the data you wish to save
- when ready to save, harvest data from widgets and add it to an array of struct
- push the data into the save game object and save it to disk
- when loading, fetch the array, re-spawn the widgets using saved data
And that’s pretty much how all other saving works, too - as far as the native framework is concerned.