Files
rog_app/lib/services/error_service.dart

61 lines
2.1 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
class ErrorService {
static Future<void> reportError(dynamic error, StackTrace stackTrace, Map<String, dynamic> deviceInfo) async {
try {
final String errorMessage = error.toString();
final String stackTraceString = stackTrace.toString();
final String estimatedCause = _estimateErrorCause(errorMessage);
//final String deviceInfo = await _getDeviceInfo();
final Uri url = Uri.parse('https://rogaining.sumasen.net/report-error');
final response = await http.post(
url,
body: {
'error_message': errorMessage,
'stack_trace': stackTraceString,
'estimated_cause': estimatedCause,
'device_info': deviceInfo,
},
);
if (response.statusCode == 200) {
// エラー報告が成功した場合の処理(必要に応じて)
} else {
// エラー報告が失敗した場合の処理(必要に応じて)
}
} catch (e) {
// エラー報告中にエラーが発生した場合の処理(必要に応じて)
}
}
static String _estimateErrorCause(String errorMessage) {
// エラーメッセージに基づいてエラーの原因を推定するロジックを追加する
if (errorMessage.contains('NetworkException')) {
return 'ネットワーク接続エラー';
} else if (errorMessage.contains('DatabaseException')) {
return 'データベースエラー';
} else if (errorMessage.contains('AuthenticationException')) {
return '認証エラー';
} else {
return '不明なエラー';
}
}
/*
// 2024-4-8 Akira: メモリ使用量のチェックのため追加 See #2810
//
static void reportMemoryError(String message, StackTrace stackTrace) async {
final errorDetails = FlutterErrorDetails(
exception: Exception(message),
stack: stackTrace,
);
await reportError(errorDetails.exception, errorDetails.stack ?? StackTrace.current, deviceInfo);
}
*/
}