Repository navigation
Expand file tree
/
Copy pathdata_persistence_debug.dart
More file actions
141 lines (118 loc) · 4.82 KB
/
Copy pathdata_persistence_debug.dart
File metadata and controls
141 lines (118 loc) · 4.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import 'dart:io';
/// Debug script để kiểm tra vấn đề data persistence
void main() async {
print('=== DATA PERSISTENCE DEBUG ===');
try {
// Kiểm tra các potential issues
print('\n--- Checking Potential Issues ---');
// 1. Kiểm tra ConverterToolsDataService initialization sequence
final converterServiceFile = File(
'lib/services/converter_services/converter_tools_data_service.dart',
);
if (await converterServiceFile.exists()) {
final content = await converterServiceFile.readAsString();
if (content.contains('initialize()') &&
content.contains('reinitialize()')) {
print(
'✓ ConverterToolsDataService has both initialize and reinitialize methods',
);
}
if (content.contains('SecurityService.isSecurityEnabled()')) {
print('✓ Security status check in initialize method');
}
if (content.contains('SecurityManager.instance.currentEncryptionKey')) {
print('✓ Encryption key retrieval logic found');
} else {
print('❌ Missing encryption key retrieval logic');
}
if (content.contains('_isInitialized') &&
content.contains('isInitialized')) {
print('✅ Initialization status tracking added');
} else {
print('❌ Missing initialization status tracking');
}
if (content.contains('Already initialized, skipping')) {
print('✅ Double initialization prevention added');
} else {
print('❌ Missing double initialization prevention');
}
}
// 2. Kiểm tra main.dart initialization flow
final mainFile = File('lib/main.dart');
if (await mainFile.exists()) {
final content = await mainFile.readAsString();
if (content.contains('ConverterToolsDataService()')) {
print('✓ ConverterToolsDataService called in main.dart');
}
if (content.contains('await converterDataService.initialize()')) {
print('✅ Found controlled initialize call in main.dart');
}
if (content.contains('reinitialize')) {
print('✅ Found reinitialize call in main.dart');
}
if (content.contains(
'// Note: ConverterToolsDataService will be initialized after security setup',
)) {
print('✅ Proper initialization order comment found');
} else {
print('⚠️ No indication of proper initialization order');
}
}
// 3. Kiểm tra controller loading flow
final converterControllerFile = File(
'lib/controllers/converter_controller.dart',
);
if (await converterControllerFile.exists()) {
final content = await converterControllerFile.readAsString();
if (content.contains('loadState()') &&
content.contains('ConverterToolsDataService.getState')) {
print('✓ Controller loads state from ConverterToolsDataService');
}
if (content.contains('settings.featureStateSavingEnabled')) {
print('✓ Controller checks if state saving is enabled');
}
if (content.contains('isInitialized') && content.contains('maxRetries')) {
print(
'✅ Controller has retry logic for ConverterToolsDataService initialization',
);
} else {
print('❌ Controller missing retry logic');
}
}
// 4. Kiểm tra Settings Service
final settingsFile = File('lib/services/settings_service.dart');
if (await settingsFile.exists()) {
final content = await settingsFile.readAsString();
if (content.contains('featureStateSavingEnabled') &&
content.contains('true')) {
print(
'✓ Settings service has featureStateSavingEnabled with default true',
);
} else {
print(
'❌ Settings service might not have proper default for featureStateSavingEnabled',
);
}
}
print('\n--- Current Status After Fixes ---');
print('✅ Fixed double initialization in main.dart');
print('✅ Added initialization status tracking');
print('✅ Added retry logic in controllers');
print('✅ Improved timing in _handleAppLaunch');
print('✅ Better error handling and logging');
print('\n--- Expected Results ---');
print('✅ No more double "Got object store box" messages');
print('✅ Data should persist after app restart');
print('✅ Controllers wait for service to be ready');
print('✅ Proper encryption handling with Data Protection');
print('\n--- Next Steps ---');
print('1. Test app restart → data should persist');
print('2. Check logs for proper initialization sequence');
print('3. Verify no race conditions in console');
print('4. Test with Data Protection on/off');
print('\n=== DEBUG COMPLETED ===');
} catch (e, stackTrace) {
print('❌ Error during debug: $e');
print('Stack trace: $stackTrace');
}
}