|  | @@ -78,10 +78,84 @@ class EditorPageState extends State<EditorPage> {
 | 
	
		
			
			| 78 | 78 |  ```
 | 
	
		
			
			| 79 | 79 |  
 | 
	
		
			
			| 80 | 80 |  In the above example we created a page with an AppBar and Zefyr editor in its
 | 
	
		
			
			| 81 |  | -body. We also initialize editor with a simple one-line document. Here is how
 | 
	
		
			
			|  | 81 | +body. We also initialize our editor with a simple one-line document. Here is how
 | 
	
		
			
			| 82 | 82 |  it might look when we run the app and navigate to editor page:
 | 
	
		
			
			| 83 | 83 |  
 | 
	
		
			
			| 84 | 84 |  <img src="https://github.com/memspace/zefyr/raw/gitbook/assets/quick-start-screen-01.png" width="375">
 | 
	
		
			
			| 85 | 85 |  
 | 
	
		
			
			| 86 | 86 |  At this point we can already edit the document and apply styles, however if
 | 
	
		
			
			| 87 |  | -we navigate back from this page our changes will be lost. Let's fix this.
 | 
	
		
			
			|  | 87 | +we navigate back from this page our changes will be lost. Let's fix this and
 | 
	
		
			
			|  | 88 | +add a button which saves the document to device's file system.
 | 
	
		
			
			|  | 89 | +
 | 
	
		
			
			|  | 90 | +First we need a function to save the document:
 | 
	
		
			
			|  | 91 | +
 | 
	
		
			
			|  | 92 | +```dart
 | 
	
		
			
			|  | 93 | +class EditorPageState extends State<EditorPage> {
 | 
	
		
			
			|  | 94 | +
 | 
	
		
			
			|  | 95 | +  // ... add after _loadDocument()
 | 
	
		
			
			|  | 96 | +
 | 
	
		
			
			|  | 97 | +  void _saveDocument(BuildContext context) {
 | 
	
		
			
			|  | 98 | +    // Notus documents can be easily serialized to JSON by passing to
 | 
	
		
			
			|  | 99 | +    // `jsonEncode` directly:
 | 
	
		
			
			|  | 100 | +    final contents = jsonEncode(_controller.document);
 | 
	
		
			
			|  | 101 | +    // For this example we save our document to a temporary file.
 | 
	
		
			
			|  | 102 | +    final file = File(Directory.systemTemp.path + "/quick_start.json");
 | 
	
		
			
			|  | 103 | +    // And show a snack bar on success.
 | 
	
		
			
			|  | 104 | +    file.writeAsString(contents).then((_) {
 | 
	
		
			
			|  | 105 | +      Scaffold.of(context).showSnackBar(SnackBar(content: Text("Saved.")));
 | 
	
		
			
			|  | 106 | +    });
 | 
	
		
			
			|  | 107 | +  }
 | 
	
		
			
			|  | 108 | +}
 | 
	
		
			
			|  | 109 | +```
 | 
	
		
			
			|  | 110 | +
 | 
	
		
			
			|  | 111 | +> Notice that we pass `BuildContext` to `_saveDocument`. This is required
 | 
	
		
			
			|  | 112 | +> to get access to our page's `Scaffold` state, so that we can show `SnackBar`.
 | 
	
		
			
			|  | 113 | +
 | 
	
		
			
			|  | 114 | +Now we just need to add a button to the AppBar, so we need to modify `build`
 | 
	
		
			
			|  | 115 | +method as follows:
 | 
	
		
			
			|  | 116 | +
 | 
	
		
			
			|  | 117 | +```dart
 | 
	
		
			
			|  | 118 | +class EditorPageState extends State<EditorPage> {
 | 
	
		
			
			|  | 119 | +
 | 
	
		
			
			|  | 120 | +  // ... replace build method with following
 | 
	
		
			
			|  | 121 | +
 | 
	
		
			
			|  | 122 | +  @override
 | 
	
		
			
			|  | 123 | +  Widget build(BuildContext context) {
 | 
	
		
			
			|  | 124 | +    // Note that the editor requires special `ZefyrScaffold` widget to be
 | 
	
		
			
			|  | 125 | +    // present somewhere up the widget tree.
 | 
	
		
			
			|  | 126 | +    return Scaffold(
 | 
	
		
			
			|  | 127 | +      appBar: AppBar(
 | 
	
		
			
			|  | 128 | +        title: Text("Editor page"),
 | 
	
		
			
			|  | 129 | +        // <<< begin change
 | 
	
		
			
			|  | 130 | +        actions: <Widget>[
 | 
	
		
			
			|  | 131 | +          Builder(
 | 
	
		
			
			|  | 132 | +            builder: (context) => IconButton(
 | 
	
		
			
			|  | 133 | +              icon: Icon(Icons.save),
 | 
	
		
			
			|  | 134 | +              onPressed: () => _saveDocument(context),
 | 
	
		
			
			|  | 135 | +            ),
 | 
	
		
			
			|  | 136 | +          )
 | 
	
		
			
			|  | 137 | +        ],
 | 
	
		
			
			|  | 138 | +        // end change >>>
 | 
	
		
			
			|  | 139 | +      ),
 | 
	
		
			
			|  | 140 | +      body: ZefyrScaffold(
 | 
	
		
			
			|  | 141 | +        child: ZefyrEditor(
 | 
	
		
			
			|  | 142 | +          padding: EdgeInsets.all(16),
 | 
	
		
			
			|  | 143 | +          controller: _controller,
 | 
	
		
			
			|  | 144 | +          focusNode: _focusNode,
 | 
	
		
			
			|  | 145 | +        ),
 | 
	
		
			
			|  | 146 | +      ),
 | 
	
		
			
			|  | 147 | +    );
 | 
	
		
			
			|  | 148 | +  }
 | 
	
		
			
			|  | 149 | +}
 | 
	
		
			
			|  | 150 | +```
 | 
	
		
			
			|  | 151 | +
 | 
	
		
			
			|  | 152 | +We have to use `Builder` here for our icon button because we need access to
 | 
	
		
			
			|  | 153 | +build context within the scope of this page's Scaffold. Everything else here
 | 
	
		
			
			|  | 154 | +should be straightforward.
 | 
	
		
			
			|  | 155 | +
 | 
	
		
			
			|  | 156 | +Now we can reload our app, hit "Save" button and see the snack bar.
 | 
	
		
			
			|  | 157 | +
 | 
	
		
			
			|  | 158 | +<img src="https://github.com/memspace/zefyr/raw/gitbook/assets/quick-start-screen-02.png" width="375">
 | 
	
		
			
			|  | 159 | +
 | 
	
		
			
			|  | 160 | +Since we now have this document saved to a file, let's update our
 | 
	
		
			
			|  | 161 | +`_loadDocument` method to load saved file if it exists.
 |