| 
					
				 | 
			
			
				@@ -1,9 +1,13 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import 'dart:convert'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import 'dart:io'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import 'package:appflowy_editor/appflowy_editor.dart'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import 'package:example/pages/simple_editor.dart'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import 'package:file_picker/file_picker.dart'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import 'package:flutter/foundation.dart'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import 'package:flutter/material.dart'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import 'package:flutter/services.dart'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import 'package:universal_html/html.dart' as html; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class HomePage extends StatefulWidget { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const HomePage({Key? key}) : super(key: key); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -56,18 +60,20 @@ class _HomePageState extends State<HomePage> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           _buildSeparator(context, 'AppFlowy Editor Demo'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           _buildListTile(context, 'With Example.json', () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             final jsonString = rootBundle.loadString('assets/example.json'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _loadJsonEditor(context, jsonString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            _loadEditor(context, jsonString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           _buildListTile(context, 'With Empty Document', () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             final jsonString = Future<String>.value( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              json.encode(EditorState.empty().document.toJson()).toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              jsonEncode(EditorState.empty().document.toJson()).toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _loadJsonEditor(context, jsonString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            _loadEditor(context, jsonString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           // Encoder Demo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           _buildSeparator(context, 'Encoder Demo'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          _buildListTile(context, 'Export To JSON', () {}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          _buildListTile(context, 'Export To JSON', () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            _exportJson(_editorState); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           _buildListTile(context, 'Export to Markdown', () {}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           // Decoder Demo 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -133,7 +139,7 @@ class _HomePageState extends State<HomePage> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  void _loadJsonEditor(BuildContext context, Future<String> jsonString) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void _loadEditor(BuildContext context, Future<String> jsonString) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     setState( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         _widgetBuilder = (context) => SimpleEditor( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -145,4 +151,59 @@ class _HomePageState extends State<HomePage> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void _exportJson(EditorState editorState) async { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    final document = editorState.document.toJson(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    final json = jsonEncode(document); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!kIsWeb) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      final path = await FilePicker.platform.saveFile( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dialogTitle: 'Export to JSON', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fileName: 'document.json', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (path != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await File(path).writeAsString(json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (mounted) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ScaffoldMessenger.of(context).showSnackBar( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SnackBar( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              content: Text('The document.json is saved to the $path'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      final blob = html.Blob([json], 'text/plain', 'native'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      html.AnchorElement( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        href: html.Url.createObjectUrlFromBlob(blob).toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ..setAttribute('download', 'document.json') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ..click(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // void _exportDocument(EditorState editorState) async { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   final document = editorState.document.toJson(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   final json = jsonEncode(document); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   if (kIsWeb) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     final blob = html.Blob([json], 'text/plain', 'native'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     html.AnchorElement( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       href: html.Url.createObjectUrlFromBlob(blob).toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       ..setAttribute('download', 'editor.json') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       ..click(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     final directory = await getTemporaryDirectory(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     final path = directory.path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     final file = File('$path/editor.json'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     await file.writeAsString(json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     if (mounted) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       ScaffoldMessenger.of(context).showSnackBar( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //         SnackBar( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //           content: Text('The document is saved to the ${file.path}'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //         ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |