Closed foued-firas closed 1 month ago
import 'package:docs_clone/colors.dart'; import 'package:docs_clone/commun/widgets/loader.dart'; import 'package:docs_clone/models/document_model.dart'; import 'package:docs_clone/models/error_model.dart'; import 'package:docs_clone/repository/auth_repository.dart'; import 'package:docs_clone/repository/document_repository.dart'; import 'package:docs_clone/repository/socket_repository.dart'; import 'package:flutter/material.dart'; import 'package:flutter_quill/flutter_quill.dart' as quill; import 'package:flutter_riverpod/flutter_riverpod.dart'; class DocumentScreen extends ConsumerStatefulWidget { final String id; const DocumentScreen({ Key? key, required this.id, }) : super(key: key); @override ConsumerState<ConsumerStatefulWidget> createState() => _DocumentScreenState(); } class _DocumentScreenState extends ConsumerState<DocumentScreen> { TextEditingController titleController =TextEditingController(text: 'Untitled Document'); quill.QuillController? _controller ; ErrorModel? errorModel; SocketRepository socketRepository =SocketRepository(); @override void initState() { super.initState(); socketRepository.joinRoom(widget.id); fetchDocumentData(); socketRepository.changeListener((data){ _controller?.compose( quill.Delta.fromJson(data['delta']), _controller?.selection ?? const TextSelection.collapsed(offset: 0), quill.ChangeSource.remote, ); }); } void fetchDocumentData()async{ errorModel = await ref.read(documentRepositoryProvider).getDocumentById(ref.read(userProvider)!.token ,widget.id ); if (errorModel!.data != null) { titleController.text = (errorModel!.data as DocumentModel).title; _controller = quill.QuillController( document: errorModel!.data.content.isEmpty ? quill.Document() : quill.Document.fromJson(errorModel!.data.content), selection: const TextSelection.collapsed(offset: 0), ); setState(() {}); } _controller!.document.changes.listen((event) { if (event.source == quill.ChangeSource.local) { Map<String, dynamic> map = { 'delta': event.source, // Use the 'delta' property 'room': widget.id, }; socketRepository.typing(map); } }); } @override void dispose() { // TODO: implement dispose super.dispose(); titleController.dispose(); } void updateTitle(WidgetRef ref , String title){ ref.read(documentRepositoryProvider).updateTitle( token: ref.read(userProvider)!.token, id: widget.id, title: title ); } @override Widget build(BuildContext context) { if(_controller==null){ return Scaffold( body: Loader(), ); } return Scaffold( appBar: AppBar( backgroundColor:kwhiteColor , elevation: 0, actions: [ Padding( padding: const EdgeInsets.all(10.0), child: ElevatedButton.icon( onPressed: (){}, icon: const Icon( Icons.lock, size: 14, ), label: const Text('Share'), style: ElevatedButton.styleFrom( backgroundColor: kblueColor, ), ), ) ], title: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(9.0), child: SingleChildScrollView( child: Row( children: [ Image.asset('assets/docs-logo.png', height: 24 ,), const SizedBox(height: 10,), SizedBox( width: 180, child: SingleChildScrollView( child: SingleChildScrollView( child: TextField( controller: titleController, decoration: const InputDecoration( border: InputBorder.none, focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: kblueColor ) ), contentPadding: EdgeInsets.only(left: 10), ), onSubmitted: (value)=>updateTitle(ref, value), ), ), ), ) ], ), ), ), ), bottom: PreferredSize(preferredSize: const Size.fromHeight(1), child: Container( decoration: BoxDecoration( border: Border.all( color: kGreyColor, width: 0.1 ), ),)) ), body: Center( child: Column( children: [ const SizedBox(height: 10), quill.QuillEditor.basic(controller: _controller!), const SizedBox(height: 10), Expanded( child: SizedBox( width: 750, child: Card( color: kwhiteColor, elevation: 5, child: Padding( padding: const EdgeInsets.all(30.0), child: quill.QuillEditor.basic( controller: _controller!, ), ), ), ), ) ], ), ), ); } }
Can you share more details?
dart_quill_delta
Delta
flutter_quill
quill
Due to the lack of details, I will close the issue. Feel free to open a new issue.
Is there an existing issue for this?
The question