import 'package:flutter/material.dart'; import 'package:flutter_code_editor/flutter_code_editor.dart'; import 'themes/day.dart'; import 'themes/night.dart'; import 'themes/markdown.dart'; import 'dart:io'; class NoteEditorScreen extends StatefulWidget { final File note; bool isDarkMode; NoteEditorScreen({required this.note, required this.isDarkMode}); @override _NoteEditorScreenState createState() => _NoteEditorScreenState(); } class _NoteEditorScreenState extends State { late CodeController _controller; double _fontSize = 16.0; // Default font size void _updateFontSize(double newSize) { setState(() { _fontSize = newSize; }); } @override void initState() { super.initState(); _loadNoteContent(); } Future _loadNoteContent() async { final content = await widget.note.readAsString(); setState(() { _controller = CodeController( text: content, language: markdown, ); _controller.addListener(_saveNote); _controller.popupController.enabled = false; }); } Future _saveNote() async { await widget.note.writeAsString(_controller.text); } @override void dispose() { _controller.removeListener(_saveNote); _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.note.uri.pathSegments.last.replaceAll('.md', '')), actions: [ PopupMenuButton( icon: Icon(Icons.more_vert), // Menu button (⋮) onSelected: (String value) { if (value == 'Toggle Theme') { setState(() { widget.isDarkMode = !widget.isDarkMode; }); } }, itemBuilder: (BuildContext context) => [ PopupMenuItem( value: 'Toggle Theme', child: ListTile( leading: Icon( widget.isDarkMode ? Icons.light_mode : Icons.dark_mode, ), title: Text( widget.isDarkMode ? 'Switch to Light Mode' : 'Switch to Dark Mode', ), ), ), PopupMenuItem( enabled: false, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('Font Size'), StatefulBuilder( builder: (context, setState) { return Slider( value: _fontSize, min: 12.0, max: 24.0, divisions: 6, label: _fontSize.toString(), onChanged: (newSize) { setState(() { _fontSize = newSize; }); _updateFontSize(newSize); }, ); }, ), ], ), ), ], ), ], ), body: _controller == null ? Center(child: CircularProgressIndicator()) : Padding( padding: const EdgeInsets.all(16.0), child: CodeTheme( data: CodeThemeData(styles: widget.isDarkMode ? nightTheme : dayTheme), child: CodeField( gutterStyle: GutterStyle.none, controller: _controller, expands: true, textStyle: TextStyle( fontSize: _fontSize, ), ), ), ), ); } }