From 6710aa0624b806746125e809bbd800c1ec54e018 Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Thu, 26 Mar 2026 13:37:34 +0800 Subject: [PATCH] fix: resolve connectivity issues for Android and Web builds - Android: Added INTERNET permission and enabled cleartext traffic in AndroidManifest.xml. - Web: Implemented and registered CORSMiddleware in backend to allow cross-origin requests. - Flutter: Updated SettingsProvider to use 10.0.2.2 as default for Android Emulator for easier local testing. --- backend/internal/api/middleware.go | 17 +++++++++++++++++ backend/internal/api/router.go | 3 +++ .../android/app/src/main/AndroidManifest.xml | 4 +++- frontend/lib/providers/settings_provider.dart | 11 ++++++++--- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/backend/internal/api/middleware.go b/backend/internal/api/middleware.go index e0b3791..3c3af8e 100644 --- a/backend/internal/api/middleware.go +++ b/backend/internal/api/middleware.go @@ -40,3 +40,20 @@ func AuthMiddleware() gin.HandlerFunc { c.Next() } } + +// CORSMiddleware handles cross-origin requests from web clients +func CORSMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + c.Writer.Header().Set("Access-Control-Allow-Origin", "*") + c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") + c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With") + c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE") + + if c.Request.Method == "OPTIONS" { + c.AbortWithStatus(204) + return + } + + c.Next() + } +} diff --git a/backend/internal/api/router.go b/backend/internal/api/router.go index 5039e10..d672380 100644 --- a/backend/internal/api/router.go +++ b/backend/internal/api/router.go @@ -11,6 +11,9 @@ func SetupRouter() *gin.Engine { r := gin.Default() + // Use CORS middleware to allow web access + r.Use(CORSMiddleware()) + // 清除代理信任警告 "[WARNING] You trusted all proxies" r.SetTrustedProxies(nil) diff --git a/frontend/android/app/src/main/AndroidManifest.xml b/frontend/android/app/src/main/AndroidManifest.xml index 0a3bb1e..f11babd 100644 --- a/frontend/android/app/src/main/AndroidManifest.xml +++ b/frontend/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,10 @@ + + android:icon="@mipmap/launcher_icon" + android:usesCleartextTraffic="true"> (defaultTargetPlatform == TargetPlatform.android && !kIsWeb) + ? "http://10.0.2.2:8080" + : "http://localhost:8080"; + + String _baseUrl = _defaultUrl; Color _themeColor = Colors.blue; String get baseUrl => _baseUrl;