/// مثال استفاده از Bug Report در Flutter /// ابتدا مدل‌های Dart را برای تطابق با API ایجاد کنید: class BugReportRequest { final String title; final String description; final String userEmail; final int? accountId; final String deviceModel; final String osVersion; final String platform; final String manufacturer; final String deviceId; final String screenResolution; final int memoryInMB; final int storageInMB; final int batteryLevel; final bool isCharging; final String networkType; final String appVersion; final String buildNumber; final String packageName; final DateTime installTime; final DateTime lastUpdateTime; final String flavor; final int type; // BugReportType enum value final int priority; // BugPriority enum value final String? stackTrace; final List? logs; final List? screenshots; // Base64 encoded BugReportRequest({ required this.title, required this.description, required this.userEmail, this.accountId, required this.deviceModel, required this.osVersion, required this.platform, required this.manufacturer, required this.deviceId, required this.screenResolution, required this.memoryInMB, required this.storageInMB, required this.batteryLevel, required this.isCharging, required this.networkType, required this.appVersion, required this.buildNumber, required this.packageName, required this.installTime, required this.lastUpdateTime, required this.flavor, required this.type, required this.priority, this.stackTrace, this.logs, this.screenshots, }); Map toJson() { return { 'title': title, 'description': description, 'userEmail': userEmail, 'accountId': accountId, 'deviceModel': deviceModel, 'osVersion': osVersion, 'platform': platform, 'manufacturer': manufacturer, 'deviceId': deviceId, 'screenResolution': screenResolution, 'memoryInMB': memoryInMB, 'storageInMB': storageInMB, 'batteryLevel': batteryLevel, 'isCharging': isCharging, 'networkType': networkType, 'appVersion': appVersion, 'buildNumber': buildNumber, 'packageName': packageName, 'installTime': installTime.toIso8601String(), 'lastUpdateTime': lastUpdateTime.toIso8601String(), 'flavor': flavor, 'type': type, 'priority': priority, 'stackTrace': stackTrace, 'logs': logs, 'screenshots': screenshots, }; } } /// سرویس برای ارسال Bug Report: class BugReportService { final Dio dio; BugReportService(this.dio); Future submitBugReport(BugReportRequest report) async { try { final response = await dio.post( '/api/bugreport/submit', data: report.toJson(), options: Options( validateStatus: (status) => status! < 500, headers: { 'Content-Type': 'application/json', }, ), ); return response.statusCode == 200; } catch (e) { print('Error submitting bug report: $e'); return false; } } } /// استفاده در یک Error Handler: class AppErrorHandler { final BugReportService bugReportService; final DeviceInfoService deviceInfoService; AppErrorHandler(this.bugReportService, this.deviceInfoService); Future handleError( FlutterErrorDetails details, { String? userEmail, int? accountId, String? bugTitle, int bugType = 1, // Crash int bugPriority = 1, // Critical }) async { try { final deviceInfo = await deviceInfoService.getDeviceInfo(); final report = BugReportRequest( title: bugTitle ?? 'برنامه کرش کرد', description: details.exceptionAsString(), userEmail: userEmail ?? 'unknown@example.com', accountId: accountId, deviceModel: deviceInfo['model'], osVersion: deviceInfo['osVersion'], platform: deviceInfo['platform'], manufacturer: deviceInfo['manufacturer'], deviceId: deviceInfo['deviceId'], screenResolution: deviceInfo['screenResolution'], memoryInMB: deviceInfo['memoryInMB'], storageInMB: deviceInfo['storageInMB'], batteryLevel: deviceInfo['batteryLevel'], isCharging: deviceInfo['isCharging'], networkType: deviceInfo['networkType'], appVersion: deviceInfo['appVersion'], buildNumber: deviceInfo['buildNumber'], packageName: deviceInfo['packageName'], installTime: deviceInfo['installTime'], lastUpdateTime: deviceInfo['lastUpdateTime'], flavor: deviceInfo['flavor'], type: bugType, priority: bugPriority, stackTrace: details.stack.toString(), logs: await _collectLogs(), screenshots: await _captureScreenshots(), ); await bugReportService.submitBugReport(report); } catch (e) { print('Error handling bug report: $e'); } } Future> _collectLogs() async { // جمع‌آوری لاگ‌های برنامه return []; } Future> _captureScreenshots() async { // گرفتن عکس‌های صفحه به صورت Base64 return []; } } /// مثال استفاده: void setupErrorHandling() { final bugReportService = BugReportService(dio); final errorHandler = AppErrorHandler(bugReportService, deviceInfoService); FlutterError.onError = (FlutterErrorDetails details) { errorHandler.handleError( details, userEmail: getCurrentUserEmail(), accountId: getCurrentAccountId(), bugTitle: 'خطای نامشخص', bugType: 1, // Crash bugPriority: 1, // Critical ); }; PlatformDispatcher.instance.onError = (error, stack) { errorHandler.handleError( FlutterErrorDetails( exception: error, stack: stack, context: ErrorDescription('Platform error'), ), ); return true; }; }