fix: auto repair bugs #10
This commit is contained in:
parent
51164ae21a
commit
e34b6f1527
@ -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;
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user