Merge remote-tracking branch 'origin/feature/next-arch' into feature/next-arch

This commit is contained in:
2026-08-26 14:25:53 +08:00
20 changed files with 0 additions and 1690 deletions

View File

@@ -1,61 +0,0 @@
import sys
path = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(path, 'r', encoding='utf-8') as f:
lines = f.readlines()
# 删除重复的 failMsg 声明和重复的检查逻辑 (行2402-2411,0索引为2401-2410)
# 但行号可能因之前的编辑有偏移,用内容查找
del_start = None
del_end = None
for i, line in enumerate(lines):
if 'debugPrint' in line and '创建设备任务失败' in line and 'failure' in line:
# 检查下一行是否是重复的 final failMsg
if i+1 < len(lines) and 'final failMsg = failure.toString();' in lines[i+1]:
# 找到了重复的起点
del_start = i # debugPrint 行
# 找到这个重复块的结束:下一个 return; 之后的 },
for j in range(i+2, len(lines)):
if '// 其他失败' in lines[j] or (lines[j].strip() == 'return;' and 'taskCubit.clearCurrentTask();' in lines[j-1]):
# 更精确:找到 " return;" 且前一行是 taskCubit.clearCurrentTask
if lines[j].strip() == 'return;':
del_end = j + 1 # 包含 return; 行
break
if del_end is None:
# 备选:找到下一个 ' },' (fold 成功回调的开始)
for j in range(i+2, len(lines)):
if lines[j].strip().startswith('},') and 'taskId' in lines[j+1]:
del_end = j
break
break
if del_start is not None and del_end is not None:
print(f'Deleting lines {del_start+1} to {del_end}')
for k in range(del_start, del_end):
print(f' DEL: L{k+1}: {lines[k].rstrip()}')
del lines[del_start:del_end]
else:
print('Could not find duplicate block, checking for alternate pattern...')
# 备选:直接搜索两个 final failMsg 行
failmsg_lines = []
for i, line in enumerate(lines):
if 'final failMsg = failure.toString();' in line:
failmsg_lines.append(i)
print(f'failMsg lines: {[l+1 for l in failmsg_lines]}')
if len(failmsg_lines) >= 2:
# 删除第二个 failMsg 及它所属的整个重复检查块
second = failmsg_lines[1]
# 从第二个 failMsg 前一行 (debugPrint) 开始删
start = second - 1
# 找到这个 block 的结束
end = second + 8 # 大约8行后是这个重复块的结束
print(f'Alt: deleting lines {start+1} to {end}')
for k in range(start, min(end, len(lines))):
print(f' DEL: L{k+1}: {lines[k].rstrip()}')
del lines[start:end]
with open(path, 'w', encoding='utf-8', newline='') as f:
f.writelines(lines)
print('DONE')

View File

@@ -1,92 +0,0 @@
import re
path = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
# Fix 1: Add var failed = false and if(failed) return, plus else branch for needRequery
old_block = """ var needRequery = false;
result.fold(
(failure) {
final failMsg = failure.toString();
if (failMsg.contains('存在任务') || failMsg.contains('already exists')) {
needRequery = true;
return;
}
_showPageToast(message: '作业启动失败', type: ToastType.error);
taskCubit.clearCurrentTask();
return;
},
(taskId) {
taskCubit.updateCurrentTaskId(taskId);
},
);
if (needRequery) {
await taskCubit.fetchAndFilterTask(deviceId);
await Future.delayed(const Duration(milliseconds: 300));
final existingTasks = taskCubit.state.activeTasks;
if (existingTasks.isNotEmpty) {
taskCubit.selectTask(existingTasks.first);
}
return;
}"""
new_block = """ var needRequery = false;
var failed = false;
result.fold(
(failure) {
final failMsg = failure.toString();
if (failMsg.contains('存在任务') || failMsg.contains('already exists')) {
needRequery = true;
return;
}
failed = true;
debugPrint('[开始作业] 创建失败: $failMsg');
_showPageToast(message: '作业启动失败', type: ToastType.error);
taskCubit.clearCurrentTask();
return;
},
(taskId) {
taskCubit.updateCurrentTaskId(taskId);
},
);
if (failed) return;
if (needRequery) {
await taskCubit.fetchAndFilterTask(deviceId);
await Future.delayed(const Duration(milliseconds: 300));
final existingTasks = taskCubit.state.activeTasks;
if (existingTasks.isNotEmpty) {
taskCubit.selectTask(existingTasks.first);
} else {
debugPrint('[开始作业] needRequery 后仍无活跃任务');
_showPageToast(message: '未找到活跃任务', type: ToastType.warn);
}
return;
}"""
if old_block in content:
content = content.replace(old_block, new_block)
print("Block replaced successfully")
else:
print("Block NOT FOUND in file!")
# Try tab indentation
old_block_tabs = old_block.replace(' ', '\t\t\t\t')
if old_block_tabs in content:
content = content.replace(old_block_tabs, new_block.replace(' ', '\t\t\t\t'))
print("Block replaced with TABS")
else:
# Find the unique line
for i, line in enumerate(content.split('\n')):
if 'var needRequery = false;' in line and 'result.fold(' in content.split('\n')[i+1]:
print(f"Found at line {i+1}: {repr(line)}")
break
else:
print("Could not find needRequery line")
with open(path, 'w', encoding='utf-8', newline='') as f:
f.write(content)
print("Done")

View File

@@ -1,51 +0,0 @@
import sys
filepath = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\devices\data\repositories\generate_path_repository_Impl.dart'
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
old = ''' if (response.statusCode != 200) {
throw Exception('创建设备任务失败: HTTP ${response.statusCode}');
}
} catch (e) {
print('❌ [创建设备任务] 错误: $e');
throw Exception('创建设备任务失败: $e');
}'''
new = ''' if (response.statusCode != 200) {
throw Exception('创建设备任务失败: HTTP ${response.statusCode}');
}
// 解析响应,提取 taskId
final data = jsonDecode(response.body) as Map<String, dynamic>;
if (data['code'] == 200) {
final taskData = data['data'];
if (taskData is int) {
print('✅ [创建设备任务] 任务ID: $taskData');
return taskData;
} else if (taskData is Map<String, dynamic>) {
final taskId = taskData['id'] ?? taskData['taskId'];
if (taskId is int) {
print('✅ [创建设备任务] 任务ID: $taskId');
return taskId;
}
}
throw Exception('创建设备任务成功但无法解析taskId: ${response.body}');
} else {
throw Exception('创建设备任务失败: ${data['msg'] ?? response.body}');
}
} catch (e) {
print('❌ [创建设备任务] 错误: $e');
throw Exception('创建设备任务失败: $e');
}'''
if old in content:
content = content.replace(old, new)
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
print('SUCCESS')
else:
print('NOT FOUND')
# Debug: find the line
for i, line in enumerate(content.split('\n'), 1):
if '创建设备任务失败: HTTP' in line:
print(f'Line {i}: {repr(line)}')

View File

@@ -1,43 +0,0 @@
import codecs
path = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with codecs.open(path, 'r', 'utf-8') as f:
content = f.read()
old = ''' return PlotData(
id:
record['id']?.toString() ??
DateTime.now().microsecondsSinceEpoch.toString(), // \u552f\u4e00ID
plotName: record['workName'] ?? '\u672a\u547d\u540d\u5730\u5757', // \u5730\u5757\u540d\u79f0\uff08\u4ece\u63a5\u53e3\u5b57\u6bb5\u53d6\uff09
imageUrl: record['imgUrl'] ?? '', // \u56fe\u7247URL\uff08\u4ece\u63a5\u53e3\u5b57\u6bb5\u53d6\uff0c\u65e0\u5219\u4e3a\u7a7a\uff09
jsonData: record['jsonData'], // \u539f\u59cb\u6570\u636e\u7684JSON\u5b57\u7b26\u4e32\uff08\u53ef\u9009\uff0c\u4fbf\u4e8e\u8c03\u8bd5\u6216\u540e\u7eed\u4f7f\u7528\uff09
);'''
new = ''' // \u517c\u5bb9 jsonData \u4e3a Map \u6216 String\uff1a\u7edf\u4e00\u8f6c\u4e3a JSON \u5b57\u7b26\u4e32
String? jsonDataStr;
final rawJsonData = record['jsonData'];
if (rawJsonData is String) {
jsonDataStr = rawJsonData;
} else if (rawJsonData is Map) {
jsonDataStr = jsonEncode(rawJsonData);
}
return PlotData(
id:
record['id']?.toString() ??
DateTime.now().microsecondsSinceEpoch.toString(), // \u552f\u4e00ID
plotName: record['workName'] ?? '\u672a\u547d\u540d\u5730\u5757', // \u5730\u5757\u540d\u79f0\uff08\u4ece\u63a5\u53e3\u5b57\u6bb5\u53d6\uff09
imageUrl: record['imgUrl'] ?? '', // \u56fe\u7247URL\uff08\u4ece\u63a5\u53e3\u5b57\u6bb5\u53d6\uff0c\u65e0\u5219\u4e3a\u7a7a\uff09
jsonData: jsonDataStr, // \u539f\u59cb\u6570\u636e\u7684JSON\u5b57\u7b26\u4e32\uff08\u53ef\u9009\uff0c\u4fbf\u4e8e\u8c03\u8bd5\u6216\u540e\u7eed\u4f7f\u7528\uff09
);'''
if old in content:
content = content.replace(old, new)
with codecs.open(path, 'w', 'utf-8') as f:
f.write(content)
print('SUCCESS: replaced')
else:
print('FAILED: old text not found')
lines = content.split('\n')
for i, line in enumerate(lines[3198:3208], start=3199):
print(f'{i}: {repr(line)}')

View File

@@ -1,43 +0,0 @@
filepath = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
old = ''' const SizedBox(height: 4),
Row(
children: [
Text(
'设备: ${currentTask.deviceId}',
style: const TextStyle(
fontSize: 12,
color: Color(0xFF4E5969),
),
),
const SizedBox(width: 12),
Container('''
new = ''' const SizedBox(height: 4),
Text(
'设备: ${currentTask.deviceId}',
style: const TextStyle(
fontSize: 12,
color: Color(0xFF4E5969),
),
softWrap: true,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
const SizedBox(height: 4),
Container('''
if old in content:
content = content.replace(old, new)
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
print('SUCCESS - replaced device ID text with wrapping support')
else:
print('NOT FOUND')
# Debug: find the line
for i, line in enumerate(content.split('\n'), 1):
if "设备: ${currentTask.deviceId}" in line:
print(f'Line {i}: {repr(line)}')

View File

@@ -1,74 +0,0 @@
import sys
path = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(path, 'r', encoding='utf-8') as f:
lines = f.readlines()
print(f'Total lines: {len(lines)}')
# Find lines with "无可用任务"
target_lines = []
for i, line in enumerate(lines):
if '无可用任务' in line:
target_lines.append(i)
# Print surrounding context
start = max(0, i-5)
end = min(len(lines), i+3)
for j in range(start, end):
print(f' L{j+1}: {lines[j].rstrip()}')
print(f'Found at lines: {[l+1 for l in target_lines]}')
# For each occurrence, replace the block:
# lines[i-3]: " final taskId = taskCubit.state.currentTaskId;"
# lines[i-2]: " if (taskId == null) {"
# lines[i-1]: " _showPageToast(message: "无可用任务", type: ToastType.warn);"
# lines[i]: " return;"
# lines[i+1]: " }"
for line_idx in target_lines:
# Find the start of the block
block_start = line_idx - 1
block_end = line_idx + 2
indent = ''
for ch in lines[block_start]:
if ch in (' ', '\t'):
indent += ch
else:
break
new_lines = [
f'{indent}if (taskId == null) {{\n',
f'{indent} await taskCubit.fetchAndFilterTask(deviceId);\n',
f'{indent} final tasks = taskCubit.state.activeTasks;\n',
f'{indent} if (tasks.isNotEmpty) {{\n',
f'{indent} taskCubit.selectTask(tasks.first);\n',
f'{indent} taskId = tasks.first.id;\n',
f'{indent} }} else {{\n',
f'{indent} _showPageToast(message: "无可用任务", type: ToastType.warn);\n',
f'{indent} return;\n',
f'{indent} }}\n',
f'{indent}}}\n',
]
# Also change "final taskId" to "var taskId"
var_line_idx = line_idx - 2
old_var_line = lines[var_line_idx]
lines[var_line_idx] = old_var_line.replace('final taskId', 'var taskId')
# Replace the block
old_block = lines[block_start:block_end+1]
print(f'Replacing lines {block_start+1}-{block_end+1}:')
for l in old_block:
print(f' OLD: {l.rstrip()}')
for l in new_lines:
print(f' NEW: {l.rstrip()}')
lines[block_start:block_end+1] = new_lines
with open(path, 'w', encoding='utf-8', newline='') as f:
f.writelines(lines)
print('DONE')

View File

@@ -1,77 +0,0 @@
import sys
path = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
# Find the block to replace
old_block_start = content.find('result.fold(')
if old_block_start < 0:
print('ERROR: result.fold( not found')
sys.exit(1)
# Find the end of the fold block: ');' after the fold call
# The fold ends with ');' on a line
old_block_end = content.find(' );', old_block_start)
if old_block_end < 0:
print('ERROR: fold end not found')
sys.exit(1)
old_block_end += len(' );')
old_block = content[old_block_start:old_block_end]
print('Old block found:')
print(repr(old_block[:100]))
print('...')
new_block = ''' final taskIdOrFlag = result.fold<int?>(
(failure) {
debugPrint('❌ [开始作业] 创建设备任务失败: $failure');
final failMsg = failure.toString();
if (failMsg.contains('存在任务') || failMsg.contains('already exists')) {
return null;
}
_showPageToast(message: "作业启动失败", type: ToastType.error);
return -1;
},
(taskId) => taskId,
);
if (taskIdOrFlag == null) {
debugPrint('⚠️ [开始作业] 设备已有任务,重新查询任务池...');
await taskCubit.fetchAndFilterTask(deviceId);
await Future.delayed(const Duration(milliseconds: 300));
final existingTasks = taskCubit.state.activeTasks;
debugPrint('🔍 [开始作业] 重新查询到 ${existingTasks.length} 个活跃任务');
if (existingTasks.isNotEmpty) {
final existingTask = existingTasks.first;
taskCubit.selectTask(existingTask);
debugPrint('✅ [开始作业] 复用已有任务 #${existingTask.id},taskId已保存');
_showPageToast(message: "设备正在作业中", type: ToastType.success);
_saveDataToLocal();
return;
}
debugPrint('⚠️ [开始作业] 重新查询后仍未找到活跃任务');
_showPageToast(message: "设备正在作业中", type: ToastType.warn);
return;
}
if (taskIdOrFlag == -1) {
taskCubit.clearCurrentTask();
setState(() {
isStartWork = false;
_workStatus = WorkStatus.idle;
});
return;
}
final taskId = taskIdOrFlag as int;
debugPrint('✅ [开始作业] 创建设备任务成功,taskId: $taskId');
taskCubit.updateCurrentTaskId(taskId);'''
new_content = content[:old_block_start] + new_block + content[old_block_end:]
with open(path, 'w', encoding='utf-8', newline='') as f:
f.write(new_content)
print('SUCCESS: File updated')

View File

@@ -1,75 +0,0 @@
# -*- coding: utf-8 -*-
import sys
path = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
# Find the result.fold block
old_start = ' result.fold('
pos = content.find(old_start)
if pos < 0:
print('ERROR: result.fold not found')
sys.exit(1)
print(f'Found result.fold at char {pos}')
# Find the end of fold: " );" followed by " } catch"
# Search for the exact pattern
end_pattern = '\n );\n } catch'
end_pos = content.find(end_pattern, pos)
if end_pos < 0:
print(f'ERROR: fold end not found')
sys.exit(1)
end_pos += len('\n );')
print(f'Fold ends at char {end_pos}')
old_block = content[pos:end_pos]
print('Old block length:', len(old_block))
print('Old block preview:', repr(old_block[:80]))
new_block = ''' var needRequery = false;
result.fold(
(failure) {
final failMsg = failure.toString();
if (failMsg.contains('存在任务') || failMsg.contains('already exists')) {
needRequery = true;
return;
}
_showPageToast(message: "作业启动失败", type: ToastType.error);
taskCubit.clearCurrentTask();
setState(() {
isStartWork = false;
_workStatus = WorkStatus.idle;
});
return;
},
(taskId) {
taskCubit.updateCurrentTaskId(taskId);
},
);
if (needRequery) {
debugPrint('⚠️ [开始作业] 设备已有任务,重新查询任务池...');
await taskCubit.fetchAndFilterTask(deviceId);
await Future.delayed(const Duration(milliseconds: 300));
final existingTasks = taskCubit.state.activeTasks;
if (existingTasks.isNotEmpty) {
final existingTask = existingTasks.first;
taskCubit.selectTask(existingTask);
debugPrint('✅ [开始作业] 复用已有任务 #${existingTask.id},taskId已保存');
_showPageToast(message: "设备正在作业中", type: ToastType.success);
_saveDataToLocal();
return;
}
debugPrint('⚠️ [开始作业] 重新查询后仍未找到活跃任务');
_showPageToast(message: "设备正在作业中", type: ToastType.warn);
return;
}'''
new_content = content[:pos] + new_block + content[end_pos:]
with open(path, 'w', encoding='utf-8', newline='') as f:
f.write(new_content)
print('SUCCESS - File updated')

View File

@@ -1,99 +0,0 @@
# -*- coding: utf-8 -*-
import sys
path = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
# Find the "存在任务" branch that just returns without saving taskId
# We'll replace the "return;" in that branch with code that does async requery
# But fold callbacks can't be async...
# Instead, let's find the fold end and add async handler after it
# Find: "\n );\n } catch (e) {"
old_pat = '\n );\n } catch (e) {'
idx = content.find(old_pat)
if idx < 0:
print('Pattern not found, trying variants...')
# Try with different whitespace
old_pat = ' );\n } catch (e) {'
idx = content.find(old_pat)
if idx < 0:
print('Still not found')
sys.exit(1)
print(f'Found at index {idx}')
# Insert code between the fold close and the catch
# We'll restructure to handle needRequery
insert_code = '''
if (needRequery) {
debugPrint('设备已有任务,重新查询任务池...');
await taskCubit.fetchAndFilterTask(deviceId);
await Future.delayed(const Duration(milliseconds: 300));
final existingTasks = taskCubit.state.activeTasks;
if (existingTasks.isNotEmpty) {
final existingTask = existingTasks.first;
taskCubit.selectTask(existingTask);
debugPrint('复用已有任务 #${existingTask.id},taskId已保存');
_showPageToast(message: "设备正在作业中", type: ToastType.success);
_saveDataToLocal();
return;
}
_showPageToast(message: "设备正在作业中", type: ToastType.warn);
return;
}
} catch (e) {'''
# Now find and fix the fold callback to set needRequery flag
# Replace the "存在任务" branch
old_branch = '''if (failMsg.contains('存在任务') || failMsg.contains('already exists')) {
debugPrint('⚠️ [开始作业] 设备已有任务,保留作业状态');
_showPageToast(message: "设备正在作业中", type: ToastType.warn);
// 🔥 不重置 _workStatus,按钮保持可见
return;'''
new_branch = '''if (failMsg.contains('存在任务') || failMsg.contains('already exists')) {
needRequery = true;
return;'''
branch_idx = content.find(old_branch)
if branch_idx < 0:
# Try without the debug print variation
old_branch = '''if (failMsg.contains('存在任务') || failMsg.contains('already exists')) {
debugPrint'''
branch_idx = content.find(old_branch)
if branch_idx < 0:
print('Branch pattern not found')
else:
print(f'Branch found at {branch_idx} (partial match)')
else:
print(f'Branch found at {branch_idx}')
# Do the branch replacement
content = content[:branch_idx] + new_branch + content[branch_idx + len(old_branch):]
# Also add needRequery var declaration before fold
# Find " result.fold(" and add var before it
fold_marker = ' result.fold('
fold_idx = content.find(fold_marker)
if fold_idx >= 0:
# Check if needRequery is already declared
check = content.find('needRequery', fold_idx - 50, fold_idx)
if check < 0:
content = content[:fold_idx] + ' var needRequery = false;\n' + content[fold_idx:]
print('Added needRequery declaration')
# Now find and replace the fold end pattern again (after content modifications)
old_pat = '\n );\n } catch (e) {'
idx = content.find(old_pat)
if idx < 0:
print('Fold end pattern not found after modifications')
sys.exit(1)
content = content[:idx + len('\n );')] + insert_code + content[idx + len(old_pat):]
with open(path, 'w', encoding='utf-8', newline='') as f:
f.write(content)
print('DONE')

View File

@@ -1,83 +0,0 @@
import sys
path = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
start_marker = ' try {\n final result = await sl<CreateDeviceTaskUseCase>().execute('
start = content.find(start_marker)
if start < 0:
print('start not found')
sys.exit(1)
print(f'start={start}')
end_marker = 'return;\n }\n }'
end = content.find(end_marker, start)
if end < 0:
print('end not found')
sys.exit(1)
end += len('return;\n }\n }')
print(f'end={end}')
new_code = """ try {
final result = await sl<CreateDeviceTaskUseCase>().execute(
deviceId: deviceId,
routeId: routeId,
siteId: siteId,
orgId: orgId,
);
final taskId = result.fold<int?>(
(failure) {
final failMsg = failure.toString();
if (failMsg.contains('存在任务') || failMsg.contains('already exists')) {
return null;
}
_showPageToast(message: '作业启动失败', type: ToastType.error);
return -1;
},
(id) => id,
);
if (taskId == null) {
await taskCubit.fetchAndFilterTask(deviceId);
await Future.delayed(const Duration(milliseconds: 300));
final existingTasks = taskCubit.state.activeTasks;
if (existingTasks.isNotEmpty) {
taskCubit.selectTask(existingTasks.first);
_showPageToast(message: '设备正在作业中', type: ToastType.success);
_saveDataToLocal();
return;
}
_showPageToast(message: '设备正在作业中', type: ToastType.warn);
return;
}
if (taskId == -1) {
taskCubit.clearCurrentTask();
setState(() {
isStartWork = false;
_workStatus = WorkStatus.idle;
});
return;
}
taskCubit.updateCurrentTaskId(taskId);
} catch (e) {
_showPageToast(message: '作业启动异常: $e', type: ToastType.error);
taskCubit.clearCurrentTask();
setState(() {
isStartWork = false;
_workStatus = WorkStatus.idle;
});
return;
}
}"""
content = content[:start] + new_code + content[end:]
with open(path, 'w', encoding='utf-8', newline='') as f:
f.write(content)
print('DONE')

View File

@@ -1,81 +0,0 @@
path = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(path, 'r', encoding='utf-8') as f:
lines = f.readlines()
# Target: lines 915-954 (0-indexed: 914-953) are duplicate response blocks
# We want to replace them with a single clean response block
# Lines before 915 (0-914) = request params + _showPageToast (already good)
# Line 915-954 = duplicates to remove
# Lines 955+ = list refresh, _clearLocalData, setState (keep)
# New response block (same indentation as original, 6 spaces)
clean_resp = [
' debugPrint(\'\U0001f4e5 [保存地块] 响应状态码: ${response.statusCode}\');\n',
' debugPrint(\'\U0001f4e5 [保存地块] 响应体(完整): $responseBody\');\n',
'\n',
' if (response.statusCode == 200) {\n',
' // \U0001f525 解析响应体确认后端是否真的成功\n',
' Map<String, dynamic>? respJson;\n',
' try {\n',
' respJson = jsonDecode(responseBody) as Map<String, dynamic>;\n',
' } catch (_) {\n',
' debugPrint(\'\u274c [保存地块] 响应体非JSON: $responseBody\');\n',
' throw Exception(\'响应体非JSON: $responseBody\');\n',
' }\n',
'\n',
' final apiCode = respJson[\'code\'];\n',
' if (apiCode != null && apiCode.toString() != \'200\') {\n',
' final apiMsg = respJson[\'msg\'] ?? respJson[\'message\'] ?? \'未知错误\';\n',
' debugPrint(\'\u274c [保存地块] 后端返回失败, code=$apiCode, msg=$apiMsg\');\n',
' throw Exception(\'$apiMsg\');\n',
' }\n',
'\n',
' debugPrint(\'\u2705 [保存地块] 保存成功, plotName=$plotName, 响应: $respJson\');\n',
' // \U0001f525 刷新地块列表\n',
' debugPrint(\'\U0001f504 [保存地块] 刷新地块列表, siteId=$siteId\');\n',
' context.read<DevicesCubit>().loadWorkRecordsBySiteId(siteId);\n',
]
# We also need to remove the duplicate list refresh code that comes after line 954
# Line 955-957 is: debugPrint('🔄...'); context.read<DevicesCubit>().loadWorkRecordsBySiteId(siteId);
# We'll include these in the new block above and remove them
# Find the start of duplicate block
dup_start = None
dup_end = None
for i, line in enumerate(lines):
if 'debugPrint' in line and '响应状态码' in line and dup_start is None:
dup_start = i
if dup_start is not None and 'List<LatLng> _getPolygonPoints()' in line:
dup_end = i
break
print(f"Duplicate block: lines {dup_start+1} to {dup_end+1}")
if dup_start is not None and dup_end is not None:
# Keep: lines before dup_start + our clean block + lines after dup_end
before = lines[:dup_start]
after_dup_end = lines[dup_end:]
# Remove the duplicate '🔄 刷新' and context.read lines that appear right after our block
# Those are at the start of after_dup_end
cleaned_after = []
skip_dedup = False
for line in after_dup_end:
# Skip lines that duplicate what's already in our clean_resp block
if '🔄 [保存地块] 刷新地块列表' in line:
skip_dedup = True
continue
if skip_dedup and 'context.read<DevicesCubit>().loadWorkRecordsBySiteId(siteId)' in line:
skip_dedup = False
continue
skip_dedup = False
cleaned_after.append(line)
new_lines = before + clean_resp + cleaned_after
with open(path, 'w', encoding='utf-8') as f:
f.writelines(new_lines)
print(f"OK: Replaced {len(lines) - len(new_lines)} lines")
else:
print(f"FAIL: dup_start={dup_start}, dup_end={dup_end}")

View File

@@ -1,61 +0,0 @@
import re
filepath = r'C:\Users\jsmbz\Documents\flutter-app-02\lib\features\home\presentation\widgets\map\testmap_pages.dart'
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
# Pattern: find the second duplicate method (with debugPrint in catch)
# It starts with "/// 从 state.pathData 实时解析" and ends with "}\n\n Widget _buildWorkPanel"
pattern1 = r'\n /// 从 state\.pathData 实时解析 startWorkList\n /// 解决 BlocBuilder 因 state\.pathData 变化触发重建时,onTap 的异步赋值还未完成的时序问题\n List<dynamic> _parseStartWorkListFromPathData\(List<Map<String, dynamic>>\? pathData\) \{\n if \(pathData == null \|\| pathData\.isEmpty\) return \[\];\n final firstRecord = pathData\.first;\n final nestedJsonRaw = firstRecord\['jsonData'\];\n if \(nestedJsonRaw is! String\) return \[\];\n try \{\n final parsedJson = jsonDecode\(nestedJsonRaw\);\n if \(parsedJson is! Map<String, dynamic>\) return \[\];\n final planModel = parsedJson\['planModel'\];\n final isBow = planModel == WorkMode\.bow\.value;\n\n List<dynamic> pathList = \[\];\n final rawPath = parsedJson\['path'\];\n if \(rawPath is String\) \{\n try \{ pathList = jsonDecode\(rawPath\) as List; \} catch \(_\) \{\}\n \} else if \(rawPath is List\) \{\n pathList = rawPath;\n \}\n\n List<dynamic> outerList = \[\];\n final rawOuter = parsedJson\['outer'\];\n if \(rawOuter is String\) \{\n try \{ outerList = jsonDecode\(rawOuter\) as List; \} catch \(_\) \{\}\n \} else if \(rawOuter is List\) \{\n outerList = rawOuter;\n \}\n\n if \(isBow\) \{\n return pathList\.isNotEmpty \? pathList : outerList;\n \} else \{\n return outerList\.isNotEmpty \? outerList : pathList;\n \}\n \} catch \(e\) \{\n debugPrint\('❌ \[_parseStartWorkListFromPathData\] 解析失败: \$e'\);\n return \[\];\n \}\n \}\n\n Widget _buildWorkPanel'
# Try to find and replace the second duplicate method
match = re.search(pattern1, content)
if match:
print(f"Found duplicate method at position {match.start()}-{match.end()}")
content = content[:match.start()] + '\n Widget _buildWorkPanel' + content[match.end():]
else:
print("Pattern 1 not found, trying simpler approach...")
# Just find the second occurrence of _parseStartWorkListFromPathData
first_idx = content.find('_parseStartWorkListFromPathData')
second_idx = content.find('_parseStartWorkListFromPathData', first_idx + 1)
if second_idx != -1:
# Find the start of this method (go back to find " ///" or " List<dynamic>")
start = content.rfind(' /// 从 state.pathData', 0, second_idx)
if start == -1:
start = content.rfind(' List<dynamic> _parseStartWorkListFromPathData', 0, second_idx)
# Find the end of this method
end = content.find(' Widget _buildWorkPanel', second_idx)
if end == -1:
end = content.find('Widget _buildWorkPanel', second_idx)
if start != -1 and end != -1:
print(f"Found duplicate at {start}-{end}")
content = content[:start] + content[end:]
else:
print(f"Could not find boundaries: start={start}, end={end}")
else:
print("No duplicate method found")
# Pattern 2: remove duplicate call in _buildWorkPanel
# Find the second "// 核心修复:" inside _buildWorkPanel builder
first_core = content.find('// 🔥 核心修复:从 state.pathData 实时计算 startWorkList')
second_core = content.find('// 核心修复:从 state.pathData 实时计算 startWorkList', first_core + 1)
if second_core != -1:
# Go back to find the blank line before this duplicate block
start_call = content.rfind('\n', 0, second_core)
start_call = content.rfind('\n', 0, start_call) # go back one more line
# Find the end after the duplicate block
# The block is: "// 核心修复...\n final parsedList...\n if...\n startWorkList...\n }\n"
end_call = content.find('\n return Positioned(', second_core)
if end_call != -1:
print(f"Found duplicate call at {start_call}-{end_call}")
content = content[:start_call] + content[end_call:]
else:
print(f"Could not find end of duplicate call")
else:
print("No duplicate call found")
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
print("Done!")

View File

@@ -1,107 +0,0 @@
Flutter crash report.
Please report a bug at https://github.com/flutter/flutter/issues.
## command
flutter --no-color run --machine --track-widget-creation --device-id=4TRKWOEE4HR8AMEA --start-paused --dart-define=flutter.inspector.structuredErrors=true --devtools-server-address=http://127.0.0.1:9100 lib\main.dart
## exception
FormatException: FormatException: Unexpected character (at character 1)
Failed to init NativeSymbolResolver (SymInitialize 3221225476)
^
```
#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1467:5)
#1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1333:9)
#2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:935:22)
#3 _JsonStringDecoderSink.addSlice (dart:convert-patch/convert_patch.dart:1555:13)
#4 _JsonStringDecoderSink.add (dart:convert-patch/convert_patch.dart:1560:5)
#5 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#6 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#7 _rootRunUnary (dart:async/zone.dart:1538:47)
#8 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#11 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#12 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:67:11)
#13 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#14 _StringAdapterSink.add (dart:convert/string_conversion.dart:228:11)
#15 _StringAdapterSink.addSlice (dart:convert/string_conversion.dart:233:7)
#16 _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:313:20)
#17 _Utf8ConversionSink.add (dart:convert/string_conversion.dart:306:5)
#18 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#19 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#20 _rootRunUnary (dart:async/zone.dart:1538:47)
#21 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#25 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#26 _StreamController._add (dart:async/stream_controller.dart:663:7)
#27 _StreamController.add (dart:async/stream_controller.dart:618:5)
#28 _Socket._onData (dart:io-patch/socket_patch.dart:2880:41)
#29 _rootRunUnary (dart:async/zone.dart:1546:13)
#30 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#31 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#32 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#33 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#34 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#35 _StreamController._add (dart:async/stream_controller.dart:663:7)
#36 _StreamController.add (dart:async/stream_controller.dart:618:5)
#37 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:2315:31)
#38 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1655:14)
#39 _microtaskLoop (dart:async/schedule_microtask.dart:40:35)
#40 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#41 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:127:13)
#42 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:5)
```
## flutter doctor
```
[✓] Flutter (Channel stable, 3.38.7, on Microsoft Windows [版本 10.0.26200.8655], locale zh-CN) [1,125ms]
• Flutter version 3.38.7 on channel stable at D:\fluttersdk\flutter_windows_3.38.7-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 3b62efc2a3 (6 months ago), 2026-01-13 13:47:42 -0800
• Engine revision 78fc3012e4
• Dart version 3.10.7
• DevTools version 2.51.1
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging
[✓] Windows Version (11 家庭版 中文版 64-bit, 25H2, 2009) [5.0s]
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [10.4s]
• Android SDK at C:\Users\jsmbz\AppData\Local\Android\Sdk
• Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
• Platform android-36, build-tools 36.1.0
• ANDROID_HOME = C:\Users\jsmbz\AppData\Local\Android\Sdk
• Java binary at: D:\devtools\anrdstod\jbr\bin\java
This is the JDK bundled with the latest Android Studio installation on this machine.
To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
• Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
• All Android licenses accepted.
[✓] Chrome - develop for the web [31ms]
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[✗] Visual Studio - develop Windows apps [26ms]
✗ Visual Studio not installed; this is necessary to develop Windows apps.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[✓] Connected device (4 available) [5.7s]
• PKB110 (mobile) • 4TRKWOEE4HR8AMEA • android-arm64 • Android 16 (API 36)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [版本 10.0.26200.8655]
• Chrome (web) • chrome • web-javascript • Google Chrome 149.0.7827.116
• Edge (web) • edge • web-javascript • Microsoft Edge 149.0.4022.98
[!] Network resources [203.6s]
✗ A cryptographic error occurred while checking "https://github.com/": Connection terminated during handshake
You may be experiencing a man-in-the-middle attack, your network may be compromised, or you may have malware installed on your computer.
! Doctor found issues in 2 categories.
```

View File

@@ -1,106 +0,0 @@
Flutter crash report.
Please report a bug at https://github.com/flutter/flutter/issues.
## command
flutter --no-color run --machine --track-widget-creation --device-id=4TRKWOEE4HR8AMEA --start-paused --dart-define=flutter.inspector.structuredErrors=true --devtools-server-address=http://127.0.0.1:9100 lib\main.dart
## exception
FormatException: FormatException: Unexpected character (at character 1)
Failed to init NativeSymbolResolver (SymInitialize 3221225476)
^
```
#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1467:5)
#1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1333:9)
#2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:935:22)
#3 _JsonStringDecoderSink.addSlice (dart:convert-patch/convert_patch.dart:1555:13)
#4 _JsonStringDecoderSink.add (dart:convert-patch/convert_patch.dart:1560:5)
#5 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#6 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#7 _rootRunUnary (dart:async/zone.dart:1538:47)
#8 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#11 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#12 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:67:11)
#13 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#14 _StringAdapterSink.add (dart:convert/string_conversion.dart:228:11)
#15 _StringAdapterSink.addSlice (dart:convert/string_conversion.dart:233:7)
#16 _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:313:20)
#17 _Utf8ConversionSink.add (dart:convert/string_conversion.dart:306:5)
#18 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#19 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#20 _rootRunUnary (dart:async/zone.dart:1538:47)
#21 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#25 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#26 _StreamController._add (dart:async/stream_controller.dart:663:7)
#27 _StreamController.add (dart:async/stream_controller.dart:618:5)
#28 _Socket._onData (dart:io-patch/socket_patch.dart:2880:41)
#29 _rootRunUnary (dart:async/zone.dart:1546:13)
#30 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#31 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#32 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#33 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#34 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#35 _StreamController._add (dart:async/stream_controller.dart:663:7)
#36 _StreamController.add (dart:async/stream_controller.dart:618:5)
#37 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:2315:31)
#38 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1655:14)
#39 _microtaskLoop (dart:async/schedule_microtask.dart:40:35)
#40 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#41 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:127:13)
#42 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:5)
```
## flutter doctor
```
[✓] Flutter (Channel stable, 3.38.7, on Microsoft Windows [版本 10.0.26200.8655], locale zh-CN) [744ms]
• Flutter version 3.38.7 on channel stable at D:\fluttersdk\flutter_windows_3.38.7-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 3b62efc2a3 (6 months ago), 2026-01-13 13:47:42 -0800
• Engine revision 78fc3012e4
• Dart version 3.10.7
• DevTools version 2.51.1
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging
[✓] Windows Version (11 家庭版 中文版 64-bit, 25H2, 2009) [3.7s]
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [12.7s]
• Android SDK at C:\Users\jsmbz\AppData\Local\Android\Sdk
• Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
• Platform android-36, build-tools 36.1.0
• ANDROID_HOME = C:\Users\jsmbz\AppData\Local\Android\Sdk
• Java binary at: D:\devtools\anrdstod\jbr\bin\java
This is the JDK bundled with the latest Android Studio installation on this machine.
To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
• Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
• All Android licenses accepted.
[✓] Chrome - develop for the web [13ms]
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[✗] Visual Studio - develop Windows apps [11ms]
✗ Visual Studio not installed; this is necessary to develop Windows apps.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[✓] Connected device (4 available) [6.1s]
• PKB110 (mobile) • 4TRKWOEE4HR8AMEA • android-arm64 • Android 16 (API 36)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [版本 10.0.26200.8655]
• Chrome (web) • chrome • web-javascript • Google Chrome 149.0.7827.116
• Edge (web) • edge • web-javascript • Microsoft Edge 149.0.4022.98
[!] Network resources [22.1s]
✗ An HTTP error occurred while checking "https://github.com/": 信号灯超时时间已到
! Doctor found issues in 2 categories.
```

View File

@@ -1,107 +0,0 @@
Flutter crash report.
Please report a bug at https://github.com/flutter/flutter/issues.
## command
flutter --no-color run --machine --track-widget-creation --device-id=4TRKWOEE4HR8AMEA --start-paused --dart-define=flutter.inspector.structuredErrors=true --devtools-server-address=http://127.0.0.1:9100 lib\main.dart
## exception
FormatException: FormatException: Unexpected character (at character 1)
Failed to init NativeSymbolResolver (SymInitialize 3221225476)
^
```
#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1467:5)
#1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1333:9)
#2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:935:22)
#3 _JsonStringDecoderSink.addSlice (dart:convert-patch/convert_patch.dart:1555:13)
#4 _JsonStringDecoderSink.add (dart:convert-patch/convert_patch.dart:1560:5)
#5 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#6 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#7 _rootRunUnary (dart:async/zone.dart:1538:47)
#8 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#11 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#12 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:67:11)
#13 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#14 _StringAdapterSink.add (dart:convert/string_conversion.dart:228:11)
#15 _StringAdapterSink.addSlice (dart:convert/string_conversion.dart:233:7)
#16 _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:313:20)
#17 _Utf8ConversionSink.add (dart:convert/string_conversion.dart:306:5)
#18 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#19 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#20 _rootRunUnary (dart:async/zone.dart:1538:47)
#21 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#25 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#26 _StreamController._add (dart:async/stream_controller.dart:663:7)
#27 _StreamController.add (dart:async/stream_controller.dart:618:5)
#28 _Socket._onData (dart:io-patch/socket_patch.dart:2880:41)
#29 _rootRunUnary (dart:async/zone.dart:1546:13)
#30 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#31 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#32 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#33 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#34 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#35 _StreamController._add (dart:async/stream_controller.dart:663:7)
#36 _StreamController.add (dart:async/stream_controller.dart:618:5)
#37 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:2315:31)
#38 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1655:14)
#39 _microtaskLoop (dart:async/schedule_microtask.dart:40:35)
#40 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#41 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:127:13)
#42 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:5)
```
## flutter doctor
```
[✓] Flutter (Channel stable, 3.38.7, on Microsoft Windows [版本 10.0.26200.8655], locale zh-CN) [510ms]
• Flutter version 3.38.7 on channel stable at D:\fluttersdk\flutter_windows_3.38.7-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 3b62efc2a3 (6 months ago), 2026-01-13 13:47:42 -0800
• Engine revision 78fc3012e4
• Dart version 3.10.7
• DevTools version 2.51.1
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging
[✓] Windows Version (11 家庭版 中文版 64-bit, 25H2, 2009) [2.9s]
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [8.9s]
• Android SDK at C:\Users\jsmbz\AppData\Local\Android\Sdk
• Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
• Platform android-36, build-tools 36.1.0
• ANDROID_HOME = C:\Users\jsmbz\AppData\Local\Android\Sdk
• Java binary at: D:\devtools\anrdstod\jbr\bin\java
This is the JDK bundled with the latest Android Studio installation on this machine.
To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
• Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
• All Android licenses accepted.
[✓] Chrome - develop for the web [9ms]
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[✗] Visual Studio - develop Windows apps [8ms]
✗ Visual Studio not installed; this is necessary to develop Windows apps.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[✓] Connected device (4 available) [5.2s]
• PKB110 (mobile) • 4TRKWOEE4HR8AMEA • android-arm64 • Android 16 (API 36)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [版本 10.0.26200.8655]
• Chrome (web) • chrome • web-javascript • Google Chrome 149.0.7827.116
• Edge (web) • edge • web-javascript • Microsoft Edge 150.0.4078.48
[!] Network resources [251.0s]
✗ A cryptographic error occurred while checking "https://github.com/": Connection terminated during handshake
You may be experiencing a man-in-the-middle attack, your network may be compromised, or you may have malware installed on your computer.
! Doctor found issues in 2 categories.
```

View File

@@ -1,106 +0,0 @@
Flutter crash report.
Please report a bug at https://github.com/flutter/flutter/issues.
## command
flutter --no-color run --machine --track-widget-creation --device-id=4TRKWOEE4HR8AMEA --start-paused --dart-define=flutter.inspector.structuredErrors=true --devtools-server-address=http://127.0.0.1:9100 lib\main.dart
## exception
FormatException: FormatException: Unexpected character (at character 1)
Failed to init NativeSymbolResolver (SymInitialize 3221225476)
^
```
#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1467:5)
#1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1333:9)
#2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:935:22)
#3 _JsonStringDecoderSink.addSlice (dart:convert-patch/convert_patch.dart:1555:13)
#4 _JsonStringDecoderSink.add (dart:convert-patch/convert_patch.dart:1560:5)
#5 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#6 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#7 _rootRunUnary (dart:async/zone.dart:1538:47)
#8 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#11 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#12 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:67:11)
#13 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#14 _StringAdapterSink.add (dart:convert/string_conversion.dart:228:11)
#15 _StringAdapterSink.addSlice (dart:convert/string_conversion.dart:233:7)
#16 _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:313:20)
#17 _Utf8ConversionSink.add (dart:convert/string_conversion.dart:306:5)
#18 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#19 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#20 _rootRunUnary (dart:async/zone.dart:1538:47)
#21 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#25 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#26 _StreamController._add (dart:async/stream_controller.dart:663:7)
#27 _StreamController.add (dart:async/stream_controller.dart:618:5)
#28 _Socket._onData (dart:io-patch/socket_patch.dart:2880:41)
#29 _rootRunUnary (dart:async/zone.dart:1546:13)
#30 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#31 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#32 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#33 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#34 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#35 _StreamController._add (dart:async/stream_controller.dart:663:7)
#36 _StreamController.add (dart:async/stream_controller.dart:618:5)
#37 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:2315:31)
#38 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1655:14)
#39 _microtaskLoop (dart:async/schedule_microtask.dart:40:35)
#40 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#41 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:127:13)
#42 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:5)
```
## flutter doctor
```
[✓] Flutter (Channel stable, 3.38.7, on Microsoft Windows [版本 10.0.26200.8655], locale zh-CN) [1,209ms]
• Flutter version 3.38.7 on channel stable at D:\fluttersdk\flutter_windows_3.38.7-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 3b62efc2a3 (6 months ago), 2026-01-13 13:47:42 -0800
• Engine revision 78fc3012e4
• Dart version 3.10.7
• DevTools version 2.51.1
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging
[✓] Windows Version (11 家庭版 中文版 64-bit, 25H2, 2009) [5.2s]
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [10.7s]
• Android SDK at C:\Users\jsmbz\AppData\Local\Android\Sdk
• Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
• Platform android-36, build-tools 36.1.0
• ANDROID_HOME = C:\Users\jsmbz\AppData\Local\Android\Sdk
• Java binary at: D:\devtools\anrdstod\jbr\bin\java
This is the JDK bundled with the latest Android Studio installation on this machine.
To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
• Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
• All Android licenses accepted.
[✓] Chrome - develop for the web [17ms]
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[✗] Visual Studio - develop Windows apps [14ms]
✗ Visual Studio not installed; this is necessary to develop Windows apps.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[✓] Connected device (4 available) [6.3s]
• PKB110 (mobile) • 4TRKWOEE4HR8AMEA • android-arm64 • Android 16 (API 36)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [版本 10.0.26200.8655]
• Chrome (web) • chrome • web-javascript • Google Chrome 149.0.7827.116
• Edge (web) • edge • web-javascript • Microsoft Edge 150.0.4078.48
[✓] Network resources [948ms]
• All expected network resources are available.
! Doctor found issues in 1 category.
```

View File

@@ -1,106 +0,0 @@
Flutter crash report.
Please report a bug at https://github.com/flutter/flutter/issues.
## command
flutter --no-color run --machine --track-widget-creation --device-id=4TRKWOEE4HR8AMEA --start-paused --dart-define=flutter.inspector.structuredErrors=true --devtools-server-address=http://127.0.0.1:9100 lib\main.dart
## exception
FormatException: FormatException: Unexpected character (at character 1)
Failed to init NativeSymbolResolver (SymInitialize 3221225476)
^
```
#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1467:5)
#1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1333:9)
#2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:935:22)
#3 _JsonStringDecoderSink.addSlice (dart:convert-patch/convert_patch.dart:1555:13)
#4 _JsonStringDecoderSink.add (dart:convert-patch/convert_patch.dart:1560:5)
#5 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#6 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#7 _rootRunUnary (dart:async/zone.dart:1538:47)
#8 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#11 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#12 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:67:11)
#13 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#14 _StringAdapterSink.add (dart:convert/string_conversion.dart:228:11)
#15 _StringAdapterSink.addSlice (dart:convert/string_conversion.dart:233:7)
#16 _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:313:20)
#17 _Utf8ConversionSink.add (dart:convert/string_conversion.dart:306:5)
#18 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#19 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#20 _rootRunUnary (dart:async/zone.dart:1538:47)
#21 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#25 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#26 _StreamController._add (dart:async/stream_controller.dart:663:7)
#27 _StreamController.add (dart:async/stream_controller.dart:618:5)
#28 _Socket._onData (dart:io-patch/socket_patch.dart:2880:41)
#29 _rootRunUnary (dart:async/zone.dart:1546:13)
#30 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#31 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#32 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#33 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#34 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#35 _StreamController._add (dart:async/stream_controller.dart:663:7)
#36 _StreamController.add (dart:async/stream_controller.dart:618:5)
#37 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:2315:31)
#38 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1655:14)
#39 _microtaskLoop (dart:async/schedule_microtask.dart:40:35)
#40 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#41 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:127:13)
#42 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:5)
```
## flutter doctor
```
[✓] Flutter (Channel stable, 3.38.7, on Microsoft Windows [版本 10.0.26200.8875], locale zh-CN) [1,066ms]
• Flutter version 3.38.7 on channel stable at D:\fluttersdk\flutter_windows_3.38.7-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 3b62efc2a3 (6 months ago), 2026-01-13 13:47:42 -0800
• Engine revision 78fc3012e4
• Dart version 3.10.7
• DevTools version 2.51.1
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging
[✓] Windows Version (11 家庭版 中文版 64-bit, 25H2, 2009) [4.6s]
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [9.6s]
• Android SDK at C:\Users\jsmbz\AppData\Local\Android\Sdk
• Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
• Platform android-36, build-tools 36.1.0
• ANDROID_HOME = C:\Users\jsmbz\AppData\Local\Android\Sdk
• Java binary at: D:\devtools\anrdstod\jbr\bin\java
This is the JDK bundled with the latest Android Studio installation on this machine.
To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
• Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
• All Android licenses accepted.
[✓] Chrome - develop for the web [18ms]
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[✗] Visual Studio - develop Windows apps [15ms]
✗ Visual Studio not installed; this is necessary to develop Windows apps.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[✓] Connected device (4 available) [5.8s]
• PKB110 (mobile) • 4TRKWOEE4HR8AMEA • android-arm64 • Android 16 (API 36)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [版本 10.0.26200.8875]
• Chrome (web) • chrome • web-javascript • Google Chrome 149.0.7827.201
• Edge (web) • edge • web-javascript • Microsoft Edge 150.0.4078.65
[✓] Network resources [1,532ms]
• All expected network resources are available.
! Doctor found issues in 1 category.
```

View File

@@ -1,106 +0,0 @@
Flutter crash report.
Please report a bug at https://github.com/flutter/flutter/issues.
## command
flutter --no-color run --machine --track-widget-creation --device-id=4TRKWOEE4HR8AMEA --start-paused --dart-define=flutter.inspector.structuredErrors=true --devtools-server-address=http://127.0.0.1:9100 lib\main.dart
## exception
FormatException: FormatException: Unexpected character (at character 1)
Failed to init NativeSymbolResolver (SymInitialize 3221225476)
^
```
#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1467:5)
#1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1333:9)
#2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:935:22)
#3 _JsonStringDecoderSink.addSlice (dart:convert-patch/convert_patch.dart:1555:13)
#4 _JsonStringDecoderSink.add (dart:convert-patch/convert_patch.dart:1560:5)
#5 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#6 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#7 _rootRunUnary (dart:async/zone.dart:1538:47)
#8 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#11 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#12 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:67:11)
#13 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#14 _StringAdapterSink.add (dart:convert/string_conversion.dart:228:11)
#15 _StringAdapterSink.addSlice (dart:convert/string_conversion.dart:233:7)
#16 _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:313:20)
#17 _Utf8ConversionSink.add (dart:convert/string_conversion.dart:306:5)
#18 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#19 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#20 _rootRunUnary (dart:async/zone.dart:1538:47)
#21 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#25 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#26 _StreamController._add (dart:async/stream_controller.dart:663:7)
#27 _StreamController.add (dart:async/stream_controller.dart:618:5)
#28 _Socket._onData (dart:io-patch/socket_patch.dart:2880:41)
#29 _rootRunUnary (dart:async/zone.dart:1546:13)
#30 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#31 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#32 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#33 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#34 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#35 _StreamController._add (dart:async/stream_controller.dart:663:7)
#36 _StreamController.add (dart:async/stream_controller.dart:618:5)
#37 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:2315:31)
#38 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1655:14)
#39 _microtaskLoop (dart:async/schedule_microtask.dart:40:35)
#40 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#41 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:127:13)
#42 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:5)
```
## flutter doctor
```
[✓] Flutter (Channel stable, 3.38.7, on Microsoft Windows [版本 10.0.26200.8875], locale zh-CN) [1,220ms]
• Flutter version 3.38.7 on channel stable at D:\fluttersdk\flutter_windows_3.38.7-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 3b62efc2a3 (7 months ago), 2026-01-13 13:47:42 -0800
• Engine revision 78fc3012e4
• Dart version 3.10.7
• DevTools version 2.51.1
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging
[✓] Windows Version (11 家庭版 中文版 64-bit, 25H2, 2009) [5.5s]
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [155.0s]
• Android SDK at C:\Users\jsmbz\AppData\Local\Android\Sdk
• Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
• Platform android-36, build-tools 36.1.0
• ANDROID_HOME = C:\Users\jsmbz\AppData\Local\Android\Sdk
• Java binary at: D:\devtools\anrdstod\jbr\bin\java
This is the JDK bundled with the latest Android Studio installation on this machine.
To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
• Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
• All Android licenses accepted.
[✓] Chrome - develop for the web [13ms]
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[✗] Visual Studio - develop Windows apps [10ms]
✗ Visual Studio not installed; this is necessary to develop Windows apps.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[✓] Connected device (4 available) [6.3s]
• PKB110 (mobile) • 4TRKWOEE4HR8AMEA • android-arm64 • Android 16 (API 36)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [版本 10.0.26200.8875]
• Chrome (web) • chrome • web-javascript • Google Chrome 149.0.7827.201
• Edge (web) • edge • web-javascript • Microsoft Edge 150.0.4078.99
[✓] Network resources [2.5s]
• All expected network resources are available.
! Doctor found issues in 1 category.
```

View File

@@ -1,106 +0,0 @@
Flutter crash report.
Please report a bug at https://github.com/flutter/flutter/issues.
## command
flutter --no-color run --machine --track-widget-creation --device-id=4TRKWOEE4HR8AMEA --start-paused --dart-define=flutter.inspector.structuredErrors=true --devtools-server-address=http://127.0.0.1:9100 lib\main.dart
## exception
FormatException: FormatException: Unexpected character (at character 1)
Failed to init NativeSymbolResolver (SymInitialize 3221225476)
^
```
#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1467:5)
#1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1333:9)
#2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:935:22)
#3 _JsonStringDecoderSink.addSlice (dart:convert-patch/convert_patch.dart:1555:13)
#4 _JsonStringDecoderSink.add (dart:convert-patch/convert_patch.dart:1560:5)
#5 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#6 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#7 _rootRunUnary (dart:async/zone.dart:1538:47)
#8 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#11 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#12 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:67:11)
#13 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#14 _StringAdapterSink.add (dart:convert/string_conversion.dart:228:11)
#15 _StringAdapterSink.addSlice (dart:convert/string_conversion.dart:233:7)
#16 _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:313:20)
#17 _Utf8ConversionSink.add (dart:convert/string_conversion.dart:306:5)
#18 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#19 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#20 _rootRunUnary (dart:async/zone.dart:1538:47)
#21 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#25 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#26 _StreamController._add (dart:async/stream_controller.dart:663:7)
#27 _StreamController.add (dart:async/stream_controller.dart:618:5)
#28 _Socket._onData (dart:io-patch/socket_patch.dart:2880:41)
#29 _rootRunUnary (dart:async/zone.dart:1546:13)
#30 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#31 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#32 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#33 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#34 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#35 _StreamController._add (dart:async/stream_controller.dart:663:7)
#36 _StreamController.add (dart:async/stream_controller.dart:618:5)
#37 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:2315:31)
#38 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1655:14)
#39 _microtaskLoop (dart:async/schedule_microtask.dart:40:35)
#40 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#41 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:127:13)
#42 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:5)
```
## flutter doctor
```
[✓] Flutter (Channel stable, 3.38.7, on Microsoft Windows [版本 10.0.26200.8875], locale zh-CN) [926ms]
• Flutter version 3.38.7 on channel stable at D:\fluttersdk\flutter_windows_3.38.7-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 3b62efc2a3 (7 months ago), 2026-01-13 13:47:42 -0800
• Engine revision 78fc3012e4
• Dart version 3.10.7
• DevTools version 2.51.1
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging
[✓] Windows Version (11 家庭版 中文版 64-bit, 25H2, 2009) [4.9s]
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [12.8s]
• Android SDK at C:\Users\jsmbz\AppData\Local\Android\Sdk
• Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
• Platform android-36, build-tools 36.1.0
• ANDROID_HOME = C:\Users\jsmbz\AppData\Local\Android\Sdk
• Java binary at: D:\devtools\anrdstod\jbr\bin\java
This is the JDK bundled with the latest Android Studio installation on this machine.
To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
• Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
• All Android licenses accepted.
[✓] Chrome - develop for the web [14ms]
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[✗] Visual Studio - develop Windows apps [12ms]
✗ Visual Studio not installed; this is necessary to develop Windows apps.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[✓] Connected device (4 available) [6.5s]
• PKB110 (mobile) • 4TRKWOEE4HR8AMEA • android-arm64 • Android 16 (API 36)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [版本 10.0.26200.8875]
• Chrome (web) • chrome • web-javascript • Google Chrome 150.0.7871.187
• Edge (web) • edge • web-javascript • Microsoft Edge 150.0.4078.99
[!] Network resources [22.2s]
✗ An HTTP error occurred while checking "https://github.com/": 信号灯超时时间已到
! Doctor found issues in 2 categories.
```

View File

@@ -1,106 +0,0 @@
Flutter crash report.
Please report a bug at https://github.com/flutter/flutter/issues.
## command
flutter --no-color run --machine --track-widget-creation --device-id=4TRKWOEE4HR8AMEA --start-paused --dart-define=flutter.inspector.structuredErrors=true lib\main.dart
## exception
FormatException: FormatException: Unexpected character (at character 1)
Failed to init NativeSymbolResolver (SymInitialize 3221225476)
^
```
#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1467:5)
#1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1333:9)
#2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:935:22)
#3 _JsonStringDecoderSink.addSlice (dart:convert-patch/convert_patch.dart:1555:13)
#4 _JsonStringDecoderSink.add (dart:convert-patch/convert_patch.dart:1560:5)
#5 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#6 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#7 _rootRunUnary (dart:async/zone.dart:1538:47)
#8 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#9 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#11 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#12 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:67:11)
#13 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#14 _StringAdapterSink.add (dart:convert/string_conversion.dart:228:11)
#15 _StringAdapterSink.addSlice (dart:convert/string_conversion.dart:233:7)
#16 _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:313:20)
#17 _Utf8ConversionSink.add (dart:convert/string_conversion.dart:306:5)
#18 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:70:18)
#19 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:115:24)
#20 _rootRunUnary (dart:async/zone.dart:1538:47)
#21 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#25 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#26 _StreamController._add (dart:async/stream_controller.dart:663:7)
#27 _StreamController.add (dart:async/stream_controller.dart:618:5)
#28 _Socket._onData (dart:io-patch/socket_patch.dart:2880:41)
#29 _rootRunUnary (dart:async/zone.dart:1546:13)
#30 _CustomZone.runUnary (dart:async/zone.dart:1429:19)
#31 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1329:7)
#32 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)
#33 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312:7)
#34 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798:19)
#35 _StreamController._add (dart:async/stream_controller.dart:663:7)
#36 _StreamController.add (dart:async/stream_controller.dart:618:5)
#37 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:2315:31)
#38 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1655:14)
#39 _microtaskLoop (dart:async/schedule_microtask.dart:40:35)
#40 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#41 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:127:13)
#42 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:5)
```
## flutter doctor
```
[✓] Flutter (Channel stable, 3.38.7, on Microsoft Windows [版本 10.0.26200.8875], locale zh-CN) [4.0s]
• Flutter version 3.38.7 on channel stable at D:\fluttersdk\flutter_windows_3.38.7-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 3b62efc2a3 (7 months ago), 2026-01-13 13:47:42 -0800
• Engine revision 78fc3012e4
• Dart version 3.10.7
• DevTools version 2.51.1
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging
[✓] Windows Version (11 家庭版 中文版 64-bit, 25H2, 2009) [33.5s]
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [29.8s]
• Android SDK at C:\Users\jsmbz\AppData\Local\Android\Sdk
• Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
• Platform android-36, build-tools 36.1.0
• ANDROID_HOME = C:\Users\jsmbz\AppData\Local\Android\Sdk
• Java binary at: D:\devtools\anrdstod\jbr\bin\java
This is the JDK bundled with the latest Android Studio installation on this machine.
To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
• Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
• All Android licenses accepted.
[✓] Chrome - develop for the web [157ms]
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[✗] Visual Studio - develop Windows apps [138ms]
✗ Visual Studio not installed; this is necessary to develop Windows apps.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[✓] Connected device (4 available) [34.2s]
• PKB110 (mobile) • 4TRKWOEE4HR8AMEA • android-arm64 • Android 16 (API 36)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [版本 10.0.26200.8875]
• Chrome (web) • chrome • web-javascript • Google Chrome 151.0.7922.75
• Edge (web) • edge • web-javascript • Microsoft Edge 151.0.4129.59
[✓] Network resources [5.8s]
• All expected network resources are available.
! Doctor found issues in 1 category.
```