@@ -27,6 +27,7 @@ class _EditorPageState extends State<EditorPage> {
2727 late CCSolution project;
2828 List <Document > documentList = [];
2929 List <TabData > tabs = [];
30+ Map <String ,TabData > fileEditors = {};
3031 bool autoCompleteShown = false ;
3132 List <String > autoComplete = < String > [
3233 "var|hello" ,
@@ -203,12 +204,12 @@ class _EditorPageState extends State<EditorPage> {
203204 });
204205 },
205206 );
206-
207207 codeFields.add (field);
208208 return TabData (
209209 text: title,
210210 closable: true ,
211211 keepAlive: true ,
212+ value: filePath,
212213 content: SingleChildScrollView (
213214 controller: ScrollController (),
214215 child: Container (
@@ -219,21 +220,33 @@ class _EditorPageState extends State<EditorPage> {
219220 }
220221
221222 void openFile (String filepath) async {
222- var filename = path.basename (filepath);
223- var content = await File (filepath).readAsString ();
224- //debugPrint(content);
225- content = content.replaceAll ("\t " , " " );
226- setState (() {
227- var language = 'javascript' ;
228- if (filename.endsWith (".json" )) {
229- language = 'json' ;
230- }
231- if (filename.endsWith (".lua" )) {
232- language = 'lua' ;
223+ if (! fileEditors.containsKey (filepath)) {
224+ var filename = path.basename (filepath);
225+ var content = await File (filepath).readAsString ();
226+ //debugPrint(content);
227+ content = content.replaceAll ("\t " , " " );
228+ setState (() {
229+ var language = 'javascript' ;
230+ if (filename.endsWith (".json" )) {
231+ language = 'json' ;
232+ }
233+ if (filename.endsWith (".lua" )) {
234+ language = 'lua' ;
235+ }
236+ var tab = createFileTab (filename, content, language, filepath);
237+ fileEditors[filepath] = tab;
238+ tabs.add (tab);
239+ selectedTab = tabs.length - 1 ;
240+ });
241+ }else {
242+ // Tab already exists
243+ var tab = fileEditors[filepath];
244+ if (tab != null ){
245+ setState (() {
246+ selectedTab = tabs.indexOf (tab);
247+ });
233248 }
234- tabs.add (createFileTab (filename, content, language, filepath));
235- selectedTab = tabs.length - 1 ;
236- });
249+ }
237250 }
238251
239252 List <Widget > getAutoCompleteControls (String ? a) {
@@ -339,7 +352,7 @@ class _EditorPageState extends State<EditorPage> {
339352 },
340353 onTabClose: (tabIndex, tabData) {
341354 setState (() {
342- /// Just refresh the state
355+ fileEditors. remove (tabData.value);
343356 });
344357 },
345358 controller: tabController,
0 commit comments