parent
0f3a24c82e
commit
0d5884f321
3 changed files with 131 additions and 1 deletions
@ -0,0 +1,127 @@ |
||||
import 'dart:async'; |
||||
import 'dart:convert'; |
||||
import 'dart:io'; |
||||
|
||||
import 'package:app/pages/read_only_page.dart'; |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter/services.dart'; |
||||
import 'package:flutter_quill/models/documents/document.dart'; |
||||
import 'package:flutter_quill/widgets/controller.dart'; |
||||
import 'package:flutter_quill/widgets/editor.dart'; |
||||
import 'package:flutter_quill/widgets/toolbar.dart'; |
||||
|
||||
class HomePage extends StatefulWidget { |
||||
@override |
||||
_HomePageState createState() => _HomePageState(); |
||||
} |
||||
|
||||
class _HomePageState extends State<HomePage> { |
||||
QuillController _controller; |
||||
final FocusNode _focusNode = FocusNode(); |
||||
|
||||
@override |
||||
void initState() { |
||||
super.initState(); |
||||
_loadFromAssets(); |
||||
} |
||||
|
||||
Future<void> _loadFromAssets() async { |
||||
try { |
||||
final result = await rootBundle.loadString('assets/sample_data.json'); |
||||
final doc = Document.fromJson(jsonDecode(result)); |
||||
setState(() { |
||||
_controller = QuillController( |
||||
document: doc, selection: TextSelection.collapsed(offset: 0)); |
||||
}); |
||||
} catch (error) { |
||||
final doc = Document()..insert(0, 'Empty asset'); |
||||
setState(() { |
||||
_controller = QuillController( |
||||
document: doc, selection: TextSelection.collapsed(offset: 0)); |
||||
}); |
||||
} |
||||
} |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
if (_controller == null) { |
||||
return Scaffold(body: Center(child: Text('Loading...'))); |
||||
} |
||||
|
||||
return Scaffold( |
||||
appBar: AppBar( |
||||
backgroundColor: Colors.grey.shade800, |
||||
elevation: 0, |
||||
centerTitle: false, |
||||
title: Text( |
||||
'Flutter Quill', |
||||
), |
||||
actions: [], |
||||
), |
||||
drawer: Material( |
||||
color: Colors.grey.shade800, |
||||
child: _buildMenuBar(context), |
||||
), |
||||
body: _buildWelcomeEditor(context), |
||||
); |
||||
} |
||||
|
||||
Widget _buildWelcomeEditor(BuildContext context) { |
||||
return Column( |
||||
children: [ |
||||
QuillToolbar.basic( |
||||
controller: _controller, |
||||
uploadFileCallback: _fakeUploadImageCallBack), |
||||
Divider(height: 1, thickness: 1, color: Colors.grey.shade200), |
||||
Expanded( |
||||
child: Container( |
||||
color: Colors.white, |
||||
padding: const EdgeInsets.only(left: 16.0, right: 16.0), |
||||
child: QuillEditor( |
||||
controller: _controller, |
||||
scrollController: ScrollController(), |
||||
scrollable: true, |
||||
focusNode: _focusNode, |
||||
autoFocus: true, |
||||
readOnly: false, |
||||
enableInteractiveSelection: true, |
||||
expands: false, |
||||
padding: EdgeInsets.zero, |
||||
), |
||||
), |
||||
), |
||||
], |
||||
); |
||||
} |
||||
|
||||
Future<String> _fakeUploadImageCallBack(File file) async { |
||||
print(file); |
||||
var completer = new Completer<String>(); |
||||
completer.complete( |
||||
'https://user-images.githubusercontent.com/122956/72955931-ccc07900-3d52-11ea-89b1-d468a6e2aa2b.png'); |
||||
return completer.future; |
||||
} |
||||
|
||||
Widget _buildMenuBar(BuildContext context) { |
||||
final itemStyle = TextStyle(color: Colors.white); |
||||
return ListView( |
||||
children: [ |
||||
ListTile( |
||||
title: Text('Read only demo', style: itemStyle), |
||||
dense: true, |
||||
visualDensity: VisualDensity.compact, |
||||
onTap: _readOnly, |
||||
) |
||||
], |
||||
); |
||||
} |
||||
|
||||
void _readOnly() { |
||||
Navigator.push( |
||||
context, |
||||
MaterialPageRoute( |
||||
builder: (BuildContext context) => ReadOnlyPage(), |
||||
), |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue