diff --git a/kouyu_english/android/app/src/main/AndroidManifest.xml b/kouyu_english/android/app/src/main/AndroidManifest.xml
index d27f30f..029b199 100644
--- a/kouyu_english/android/app/src/main/AndroidManifest.xml
+++ b/kouyu_english/android/app/src/main/AndroidManifest.xml
@@ -2,6 +2,7 @@
diff --git a/kouyu_english/install_app.sh b/kouyu_english/install_app.sh
index 2165a05..df4e7eb 100755
--- a/kouyu_english/install_app.sh
+++ b/kouyu_english/install_app.sh
@@ -23,9 +23,13 @@ if [ ! -f "$APK_PATH" ]; then
fi
echo "🚀 正在安装 APK 到手机..."
-adb install -r "$APK_PATH"
+if ! adb install -r "$APK_PATH"; then
+ echo "⚠️ 覆盖安装失败(签名不一致或版本冲突),正在卸载旧版本并重新安装..."
+ adb uninstall com.shen.kouyu_english || true
+ adb install -r "$APK_PATH"
+fi
-echo "▶️ 正在手机上启动 口语英语 App..."
+echo "▶️ 正在手机上启动 开口英语 App..."
adb shell monkey -p com.shen.kouyu_english -c android.intent.category.LAUNCHER 1 > /dev/null 2>&1 || true
echo "✅ 安装并启动成功!"
diff --git a/kouyu_english/lib/features/progress/progress_pages.dart b/kouyu_english/lib/features/progress/progress_pages.dart
index 382e11a..0b85f5a 100644
--- a/kouyu_english/lib/features/progress/progress_pages.dart
+++ b/kouyu_english/lib/features/progress/progress_pages.dart
@@ -288,7 +288,7 @@ class _SettingsPageState extends State {
style: TextStyle(fontSize: 12, color: AppColors.muted),
),
DropdownButtonFormField(
- initialValue: widget.state.aiProvider,
+ value: widget.state.aiProvider,
decoration: const InputDecoration(
labelText: '服务类型',
border: OutlineInputBorder(),
@@ -313,15 +313,17 @@ class _SettingsPageState extends State {
],
onChanged: (value) {
if (value == null) return;
- widget.state.setAiProvider(value);
- if (value == AiProviderType.gemini &&
- endpoint.text.trim().isEmpty) {
- endpoint.text =
- 'https://generativelanguage.googleapis.com/v1beta';
- model.text = model.text.trim().isEmpty
- ? 'gemini-2.5-flash'
- : model.text;
- }
+ setState(() {
+ widget.state.setAiProvider(value);
+ if (value == AiProviderType.gemini &&
+ endpoint.text.trim().isEmpty) {
+ endpoint.text =
+ 'https://generativelanguage.googleapis.com/v1beta';
+ model.text = model.text.trim().isEmpty
+ ? 'gemini-2.5-flash'
+ : model.text;
+ }
+ });
},
),
TextField(