حقل نص رمز قابل للتخصيص يدعم بناء بناء الجملة
عرض عرض حي يعرض بعض مجموعات اللغة / الموضوع
يستخدم VM Dlox التجريبي Codefield في محرره عبر الإنترنت
تساعد معدلات الرمز في إدارة المسافات البادئة تلقائيًا
يتم لف المحرر في حاوية أفقية قابلة للتمرير للتعامل مع الخطوط الطويلة
في pubspec.yaml من مشروع Flutter الخاص بك ، أضف التبعية التالية:
dependencies :
...
code_text_field : <latest_version>أحدث إصدار
في مكتبتك ، أضف الاستيراد التالي:
import 'package:code_text_field/code_text_field.dart' ;يعمل أداة Codefield مع برنامج الترميز الذي يوسع ديناميكيًا إدخال النص وفقًا للغة ويجعله مع خريطة موضوع
import 'package:flutter/material.dart' ;
import 'package:code_text_field/code_text_field.dart' ;
// Import the language & theme
import 'package:highlight/languages/dart.dart' ;
import 'package:flutter_highlight/themes/monokai-sublime.dart' ;
class CodeEditor extends StatefulWidget {
@override
_CodeEditorState createState () => _CodeEditorState ();
}
class _CodeEditorState extends State < CodeEditor > {
CodeController ? _codeController;
@override
void initState () {
super . initState ();
final source = "void main() { n print( " Hello, world! " ); n }" ;
// Instantiate the CodeController
_codeController = CodeController (
text : source,
language : dart,
);
}
@override
void dispose () {
_codeController ? . dispose ();
super . dispose ();
}
@override
Widget build ( BuildContext context) {
return CodeTheme (
data : const CodeThemeData (styles : monokaiSublimeTheme),
child : CodeField (
controller : _codeController ! ,
textStyle : const TextStyle (fontFamily : 'SourceCode' ),
),
);
}
}هنا ، تمت إضافة Monospace Font Source Code Pro إلى مجلد الأصول وإلى ملف PubSpec.yaml.
علاوة على تعريف اللغة ، يمكن تحديد التصميم الحكيمة في حقل StringMap
_codeController = CodeController (
//...
stringMap : {
"Hello" : TextStyle (fontWeight : FontWeight .bold, color : Colors .red),
"world" : TextStyle (fontStyle : FontStyle .italic, color : Colors .green),
},
);يمكن أيضًا استخدام regexes أكثر تعقيدًا مع PatternMap . عند استخدام لغة ما ، فإن أنماط regexes لها الأسبقية على PatternMap و StringMap .
_codeController = CodeController (
//...
patternMap : {
r"B#[a-zA-Z0-9]+b" :
TextStyle (fontWeight : FontWeight .bold, color : Colors .purpleAccent),
},
);يمكن استخدام كل من PatternMap و StringMap دون تحديد لغة.
_codeController = CodeController (
text : source,
patternMap : {
r'".*"' : TextStyle (color : Colors .yellow),
r'[a-zA-Z0-9]+(.*)' : TextStyle (color : Colors .green),
},
stringMap : {
"void" : TextStyle (fontWeight : FontWeight .bold, color : Colors .red),
"print" : TextStyle (fontWeight : FontWeight .bold, color : Colors .blue),
},
);يمكن إنشاء معدلات التعليمات البرمجية للرد على ضغطات المفاتيح الخاصة. المعدلات الافتراضية معالجة علامة التبويب إلى الفضاء والمسافة البادئة التلقائية. إليك تنفيذ tabmodifier الافتراضي
class TabModifier extends CodeModifier {
const TabModifier () : super ( ' t ' );
@override
TextEditingValue ? updateString (
String text, TextSelection sel, EditorParams params) {
final tmp = replace (text, sel.start, sel.end, " " * params.tabSpaces);
return tmp;
}
} const CodeField ({
Key ? key,
required this .controller,
this .minLines,
this .maxLines,
this .expands = false ,
this .wrap = false ,
this .background,
this .decoration,
this .textStyle,
this .padding = EdgeInsets .zero,
this .lineNumberStyle = const LineNumberStyle (),
this .enabled,
this .onTap,
this .readOnly = false ,
this .cursorColor,
this .textSelectionTheme,
this .lineNumberBuilder,
this .focusNode,
this .onChanged,
this .isDense = false ,
this .smartQuotesType,
this .keyboardType,
this .lineNumbers = true ,
this .horizontalScroll = true ,
this .selectionControls,
this .hintText,
this .hintStyle,
}) const LineNumberStyle ({
this .width = 42.0 ,
this .textAlign = TextAlign .right,
this .margin = 10.0 ,
this .textStyle,
this .background,
}); CodeController ({
String ? text,
Mode ? language,
this .patternMap,
this .stringMap,
this .params = const EditorParams (),
this .modifiers = const [
IndentModifier (),
CloseBlockModifier (),
TabModifier (),
],
}) تم تقديم تغيير الانهيار إلى TextEditingController في قنوات Flutter Beta و Dev & Master. يجب أن يمتثل Branch Beta لتلك التغييرات.