Browse Source

高亮生效

master
hejl 2 months ago
parent
commit
c9ad1c9be2
  1. 70
      win_text_editor/lib/app/widgets/text_tab.dart

70
win_text_editor/lib/app/widgets/text_tab.dart

@ -1,3 +1,5 @@
import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter/services.dart'; // import 'package:flutter/services.dart'; //
@ -21,6 +23,7 @@ class _TextTabState extends State<TextTab> {
late TextEditingController _controller; late TextEditingController _controller;
late EditorProvider _provider; late EditorProvider _provider;
late FocusNode _focusNode; late FocusNode _focusNode;
late ScrollController _scrollController;
String _language = 'plaintext'; String _language = 'plaintext';
@override @override
@ -29,6 +32,7 @@ class _TextTabState extends State<TextTab> {
_provider = Provider.of<EditorProvider>(context, listen: false); _provider = Provider.of<EditorProvider>(context, listen: false);
_controller = TextEditingController(text: _getCurrentContent()); _controller = TextEditingController(text: _getCurrentContent());
_focusNode = FocusNode(); _focusNode = FocusNode();
_scrollController = ScrollController(); //
_detectLanguage(); _detectLanguage();
} }
@ -95,6 +99,7 @@ class _TextTabState extends State<TextTab> {
void dispose() { void dispose() {
_controller.dispose(); _controller.dispose();
_focusNode.dispose(); _focusNode.dispose();
_scrollController.dispose(); //
super.dispose(); super.dispose();
} }
@ -148,6 +153,7 @@ class _TextTabState extends State<TextTab> {
}, },
items: items:
<String>[ <String>[
'xml',
'plaintext', 'plaintext',
'dart', 'dart',
'java', 'java',
@ -167,34 +173,44 @@ class _TextTabState extends State<TextTab> {
), ),
), ),
Expanded( Expanded(
child: Stack( child: ScrollConfiguration(
children: [ behavior: ScrollConfiguration.of(context).copyWith(
// scrollbars: true,
HighlightView( dragDevices: {PointerDeviceKind.touch, PointerDeviceKind.mouse},
tab.content, ),
language: _language, child: SingleChildScrollView(
theme: isDarkMode ? monokaiSublimeTheme : githubTheme, controller: _scrollController, //
padding: const EdgeInsets.all(16), child: Stack(
textStyle: const TextStyle(fontFamily: 'monospace', fontSize: 14), children: [
), //
// TextField HighlightView(
TextField( tab.content,
controller: _controller, language: _language,
focusNode: _focusNode, theme: isDarkMode ? monokaiSublimeTheme : githubTheme,
maxLines: null, padding: const EdgeInsets.all(16),
onChanged: (text) => _provider.updateContent(widget.tabId, text), textStyle: const TextStyle(fontFamily: 'monospace', fontSize: 14),
decoration: const InputDecoration( ),
border: InputBorder.none, // TextField
contentPadding: EdgeInsets.all(16), TextField(
), controller: _controller,
style: const TextStyle( focusNode: _focusNode,
fontFamily: 'monospace', maxLines: null,
fontSize: 14, scrollController: _scrollController, // 使
color: Colors.transparent, // 使 onChanged: (text) => _provider.updateContent(widget.tabId, text),
), decoration: const InputDecoration(
cursorColor: Colors.black, // border: InputBorder.none,
contentPadding: EdgeInsets.all(16),
),
style: const TextStyle(
fontFamily: 'monospace',
fontSize: 14,
color: Colors.transparent,
),
cursorColor: Colors.black,
),
],
), ),
], ),
), ),
), ),
], ],

Loading…
Cancel
Save