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

Loading…
Cancel
Save