I am experiencing difficulties with CORS while trying to connect my Flutter web application to a Go backend. I’ve configured the Go backend to allow all origins, yet I continue to face CORS-related issues in Flutter web. Could my version of Go be a factor in these problems, or is the issue within the Flutter web implementation? Here’s the code I’ve used in Go:
func main() {
db, err := ConnectToDatabase()
if err != nil {
panic("Database connection failed")
}
InitializeTables(db)
if err := PopulateCurrencies(db.DB); err != nil {
panic("Currency seeding failed")
}
config := cors.Options{
AllowedOrigins: []string{"https://app.mam-laka.com", "*mam-laka.com", "*"},
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE"},
AllowedHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization", "Access-Control-Allow-Origin"},
ExposedHeaders: []string{"Content-Length"},
AllowCredentials: true,
MaxAge: 12 * time.Hour,
}
router := InitializeRouter(db)
router.Use(cors.New(config))
router.Run(":8091")
}
In Flutter, I have the following async function for signing in:
Future<void> loginUser() async {
Map<String, dynamic> requestData = {
"email": emailController.text,
"password": passwordController.text,
};
try {
setState(() {
isLoading = true;
});
Map<String, String> requestHeaders = {
"Content-Type": "application/json",
};
var loginUrl = Uri.parse('$baseApiUrl/login');
var serverResponse = await http.post(loginUrl, headers: requestHeaders, body: jsonEncode(requestData));
Map responseBody = jsonDecode(serverResponse.body);
print(responseBody);
if (serverResponse.statusCode == 200 && responseBody["message"] == "Login successful") {
var secureBox = await Hive.box('userBox');
secureBox.put('authToken', responseBody['token']);
secureBox.put('fullName', '${responseBody['user']['firstName']} ${responseBody['user']['lastName']}');
secureBox.put('userEmail', responseBody['user']['email']);
print(secureBox.get("userEmail"));
print(secureBox.get("fullName"));
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: MainNavigation(),
),
);
displaySnackBar(
Overlay.of(context),
CustomSnackBar.success(message: responseBody["message"]),
);
} else if (serverResponse.statusCode == 401) {
displaySnackBar(
Overlay.of(context),
CustomSnackBar.error(message: "Incorrect credentials. Please retry."),
);
} else {
displaySnackBar(
Overlay.of(context),
CustomSnackBar.error(message: responseBody["message"] ?? "An unexpected error occurred, please retry."),
);
}
} catch (error) {
print("Error: $error");
displaySnackBar(
Overlay.of(context),
const CustomSnackBar.error(message: "Please check your internet connection."),
);
} finally {
setState(() {
isLoading = false;
});
}
}