@@ -27,6 +27,7 @@ class _EditorPageState extends State<EditorPage> {
27
27
late CCSolution project;
28
28
List <Document > documentList = [];
29
29
List <TabData > tabs = [];
30
+ Map <String ,TabData > fileEditors = {};
30
31
bool autoCompleteShown = false ;
31
32
List <String > autoComplete = < String > [
32
33
"var|hello" ,
@@ -203,12 +204,12 @@ class _EditorPageState extends State<EditorPage> {
203
204
});
204
205
},
205
206
);
206
-
207
207
codeFields.add (field);
208
208
return TabData (
209
209
text: title,
210
210
closable: true ,
211
211
keepAlive: true ,
212
+ value: filePath,
212
213
content: SingleChildScrollView (
213
214
controller: ScrollController (),
214
215
child: Container (
@@ -219,21 +220,33 @@ class _EditorPageState extends State<EditorPage> {
219
220
}
220
221
221
222
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
+ });
233
248
}
234
- tabs.add (createFileTab (filename, content, language, filepath));
235
- selectedTab = tabs.length - 1 ;
236
- });
249
+ }
237
250
}
238
251
239
252
List <Widget > getAutoCompleteControls (String ? a) {
@@ -339,7 +352,7 @@ class _EditorPageState extends State<EditorPage> {
339
352
},
340
353
onTabClose: (tabIndex, tabData) {
341
354
setState (() {
342
- /// Just refresh the state
355
+ fileEditors. remove (tabData.value);
343
356
});
344
357
},
345
358
controller: tabController,
0 commit comments