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() {
if (!ref.mounted) return;
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) {
if (!ref.mounted) return;

View File

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

View File

@ -45,7 +45,10 @@ class _BadgeTransferPageState extends ConsumerState<BadgeTransferPage> {
}
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

View File

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