Fabulous
API Reference
2.0
2.0
  • Fabulous 2.0
  • Get Started
  • Basics
    • MVU
    • Application state
      • Commands
      • State validation
    • User interface
      • Widgets and modifiers
      • Styling
      • Animations
    • Testing
    • Error monitoring
  • Advanced
    • Saving and Restoring app state
    • Performance optimization
    • Composing larger applications
      • Splitting into independent MVU states
      • Integrating commands
      • Communicating between MVU states
  • Architecture
    • Attribute definitions
    • Virtualized collections
    • Using nightly builds
  • Xamarin.Forms
    • Get Started
    • Samples & Tutorials
      • Videos
    • User interface
      • Custom controls
      • Effects
      • Navigation
      • Pop-ups
    • Extensions
      • FFImageLoading
      • OxyPlot
      • SkiaSharp
      • VideoManager
      • Xamarin.Forms.Maps
  • .NET MAUI
    • Get Started
    • Samples & Tutorials
      • Samples
    • Advanced
      • Optimizing performances
        • Profiling Fabulous apps
  • Avalonia
    • Get Started
Powered by GitBook
On this page
Edit on GitHub
  1. Advanced

Saving and Restoring app state

Application state is very simple to save by serializing the model into app.Properties. For example, you can store as JSON as follows using Json.NET:

type Application() =
    ....
    let modelId = "model"
    override __.OnSleep() =

        let json = Newtonsoft.Json.JsonConvert.SerializeObject(runner.CurrentModel)
        Debug.WriteLine("OnSleep: saving model into app.Properties, json = {0}", json)

        app.Properties.[modelId] <- json

    override __.OnResume() =
        Debug.WriteLine "OnResume: checking for model in app.Properties"
        try
            match app.Properties.TryGetValue modelId with
            | true, (:? string as json) ->

                Debug.WriteLine("OnResume: restoring model from app.Properties, json = {0}", json)
                let model = Newtonsoft.Json.JsonConvert.DeserializeObject<App.Model>(json)

                Debug.WriteLine("OnResume: restoring model from app.Properties, model = {0}", (sprintf "%0A" model))
                runner.SetCurrentModel (model, Cmd.none)

            | _ -> ()
        with ex ->
            App.program.onError("Error while restoring model found in app.Properties", ex)

    override this.OnStart() =
        Debug.WriteLine "OnStart: using same logic as OnResume()"
        this.OnResume()
PreviousAdvancedNextPerformance optimization

Last updated 1 year ago