fix: auto repair bugs #10

This commit is contained in:
repair-agent 2026-03-24 13:08:43 +08:00
parent 51164ae21a
commit e34b6f1527
4 changed files with 50 additions and 37 deletions

View File

@ -46,7 +46,11 @@ class BadgeTransferController extends _$BadgeTransferController {
void startScan() { void startScan() {
if (!ref.mounted) return; if (!ref.mounted) return;
state = state.copyWith(status: TransferStatus.scanning); state = state.copyWith(status: TransferStatus.scanning);
FlutterBluePlus.startScan(timeout: const Duration(seconds: 10)); FlutterBluePlus.startScan(timeout: const Duration(seconds: 10)).catchError((e) {
// Web : requestDevice()
if (!ref.mounted) return;
state = state.copyWith(status: TransferStatus.idle);
});
FlutterBluePlus.scanResults.listen((results) { FlutterBluePlus.scanResults.listen((results) {
if (!ref.mounted) return; if (!ref.mounted) return;

View File

@ -29,7 +29,6 @@ class _BadgeHomePageState extends ConsumerState<BadgeHomePage>
double _genProgress = 0; double _genProgress = 0;
String _genStatus = ''; String _genStatus = '';
String? _generatedImageUrl; String? _generatedImageUrl;
bool _hasAiResult = false;
@override @override
void initState() { void initState() {
@ -43,7 +42,6 @@ class _BadgeHomePageState extends ConsumerState<BadgeHomePage>
final pending = BadgeAiGenerationService.instance.consumePendingResult(); final pending = BadgeAiGenerationService.instance.consumePendingResult();
if (pending != null) { if (pending != null) {
_generatedImageUrl = pending.imageUrl; _generatedImageUrl = pending.imageUrl;
_hasAiResult = true;
} }
// AI // AI
@ -61,7 +59,6 @@ class _BadgeHomePageState extends ConsumerState<BadgeHomePage>
setState(() { setState(() {
_isGenerating = false; _isGenerating = false;
_generatedImageUrl = result.imageUrl; _generatedImageUrl = result.imageUrl;
_hasAiResult = true;
}); });
_showResultDialog(result.imageUrl); _showResultDialog(result.imageUrl);
} }
@ -213,7 +210,6 @@ class _BadgeHomePageState extends ConsumerState<BadgeHomePage>
setState(() { setState(() {
_isGenerating = true; _isGenerating = true;
_generatedImageUrl = null; _generatedImageUrl = null;
_hasAiResult = false;
_genProgress = 0; _genProgress = 0;
_genStatus = '正在连接 AI...'; _genStatus = '正在连接 AI...';
}); });
@ -242,7 +238,6 @@ class _BadgeHomePageState extends ConsumerState<BadgeHomePage>
void _handleRetry() { void _handleRetry() {
setState(() { setState(() {
_generatedImageUrl = null; _generatedImageUrl = null;
_hasAiResult = false;
}); });
} }
@ -420,31 +415,33 @@ class _BadgeHomePageState extends ConsumerState<BadgeHomePage>
Widget? buttonContent; Widget? buttonContent;
if (isAiTab) { if (isAiTab) {
// "开始生成" buttonContent = _buildGradientButton(
if (!_isGenerating && !_hasAiResult) { '开始生成',
buttonContent = _buildGradientButton('开始生成', () { _isGenerating
final aiState = _aiTabKey.currentState; ? null
if (aiState == null) return; : () {
final prompt = aiState.currentPrompt; final aiState = _aiTabKey.currentState;
final isI2I = aiState.referenceImageBytes != null; if (aiState == null) return;
// final prompt = aiState.currentPrompt;
if (!isI2I && prompt.isEmpty) { final isI2I = aiState.referenceImageBytes != null;
ScaffoldMessenger.of(context).showSnackBar( //
const SnackBar( if (!isI2I && prompt.isEmpty) {
content: Text('请输入图片描述'), ScaffoldMessenger.of(context).showSnackBar(
backgroundColor: Colors.orange, const SnackBar(
), content: Text('请输入图片描述'),
); backgroundColor: Colors.orange,
return; ),
} );
_handleAiGenerate( return;
prompt: prompt, }
style: aiState.selectedStyle, _handleAiGenerate(
imageBytes: aiState.referenceImageBytes, prompt: prompt,
strength: aiState.strength, style: aiState.selectedStyle,
); imageBytes: aiState.referenceImageBytes,
}); strength: aiState.strength,
} );
},
);
} else if (isUploadTab) { } else if (isUploadTab) {
if (_uploadedImagePath != null) { if (_uploadedImagePath != null) {
buttonContent = _buildGradientButton('使用此图', _handleUseImage); buttonContent = _buildGradientButton('使用此图', _handleUseImage);
@ -474,7 +471,7 @@ class _BadgeHomePageState extends ConsumerState<BadgeHomePage>
); );
} }
Widget _buildGradientButton(String label, VoidCallback onPressed) { Widget _buildGradientButton(String label, VoidCallback? onPressed) {
return SizedBox( return SizedBox(
height: 52, height: 52,
child: DecoratedBox( child: DecoratedBox(

View File

@ -45,7 +45,10 @@ class _BadgeTransferPageState extends ConsumerState<BadgeTransferPage> {
} }
void _startScan() { void _startScan() {
FlutterBluePlus.startScan(timeout: const Duration(seconds: 10)); FlutterBluePlus.startScan(timeout: const Duration(seconds: 10)).catchError((e) {
// Web : requestDevice()
debugPrint('[Badge BLE] startScan 异常(用户可能取消了选择器): $e');
});
} }
@override @override

View File

@ -218,10 +218,19 @@ class _BluetoothPageState extends ConsumerState<BluetoothPage>
}); });
// _queryDeviceByMac // _queryDeviceByMac
await FlutterBluePlus.startScan( try {
timeout: const Duration(seconds: 30), await FlutterBluePlus.startScan(
androidUsesFineLocation: true, timeout: const Duration(seconds: 30),
); androidUsesFineLocation: true,
);
} catch (e) {
// Web : requestDevice() FlutterBluePlusException
debugPrint('[BLE Scan] startScan 异常(用户可能取消了选择器): $e');
if (mounted) {
setState(() => _isSearching = false);
}
return;
}
// 30 // 30
if (mounted && _isSearching) { if (mounted && _isSearching) {