Credit Score View

Credit Score View

by dockui

A modern credit score dashboard with a dynamic gauge, key financial metrics, detailed credit factors, and recent activity updates.

Platform
SwiftUI
Code
Native Swift
Format
Screen
Access
Free

Code Snippet

import SwiftUI

struct CreditScoreView: View {
    // Dummy data for credit score
    @State private var creditScore = 745.0
    let maxScore = 850.0
    
    // Credit factors dummy data
    let creditFactors = [
        CreditFactor(
            title: "Payment History",
            status: "Excellent",
            impact: "High Impact",
            score: 98,
            isPositive: true,
            icon: "checkmark.circle.fill"
        ),
        CreditFactor(
            title: "Credit Utilization",
            status: "Good",
            impact: "High Impact",
            score: 82,
            isPositive: true,
            icon: "chart.pie.fill"
        ),
        CreditFactor(
            title: "Credit Age",
            status: "Fair",
            impact: "Medium Impact",
            score: 65,
            isPositive: true,
            icon: "clock.fill"
        ),
        CreditFactor(
            title: "Total Accounts",
            status: "Very Good",
            impact: "Low Impact",
            score: 92,
            isPositive: true,
            icon: "creditcard.fill"
        )
    ]
    
    // Credit summary metrics
    let creditMetrics = [
        CreditMetric(title: "Total Debt", value: "$12,450", trend: "-$890 this month"),
        CreditMetric(title: "Credit Utilization", value: "22%", trend: "of total credit"),
        CreditMetric(title: "Available Credit", value: "$28,550", trend: "across 4 cards")
    ]
    
    var body: some View {
        NavigationStack {
            ScrollView {
                VStack(spacing: 24) {
                    // Credit Score Gauge
                    CreditScoreGauge(score: creditScore, maxScore: maxScore)
                        .padding(.top)
                    
                    // Credit Summary
                    VStack(alignment: .leading, spacing: 16) {
                        Text("Credit Summary")
                            .font(.title2)
                            .bold()
                            .padding(.horizontal)
                        
                        ScrollView(.horizontal, showsIndicators: false) {
                            HStack(spacing: 16) {
                                ForEach(creditMetrics) { metric in
                                    CreditMetricCard(metric: metric)
                                }
                            }
                            .padding(.horizontal)
                        }
                    }
                    
                    // Credit Factors
                    VStack(alignment: .leading, spacing: 16) {
                        Text("Credit Factors")
                            .font(.title2)
                            .bold()
                            .padding(.horizontal)
                        
                        VStack(spacing: 12) {
                            ForEach(creditFactors) { factor in
                                CreditFactorRow(factor: factor)
                            }
                        }
                        .padding()
                        .background(Color(uiColor: .systemBackground))
                        .cornerRadius(16)
                        .shadow(radius: 2)
                        .padding(.horizontal)
                    }
                    
                    // Recent Activity
                    VStack(alignment: .leading, spacing: 16) {
                        Text("Recent Activity")
                            .font(.title2)
                            .bold()
                            .padding(.horizontal)
                        
                        RecentActivityView()
                            .padding(.horizontal)
                    }
                }
                .padding(.vertical)
            }
            .navigationTitle("Credit Score")
            .background(Color(uiColor: .systemGroupedBackground))
        }
    }
}

struct CreditScoreGauge: View {
    let score: Double
    let maxScore: Double
    
    var scoreRating: String {
        switch score {
        case 750...850: return "Excellent"
        case 700...749: return "Very Good"
        case 650...699: return "Good"
        case 600...649: return "Fair"
        default: return "Poor"
        }
    }
    
    var scoreColor: Color {
        switch score {
        case 700...850: return .green
        case 650...699: return .yellow
        case 600...649: return .orange
        default: return .red
        }
    }
    
    var body: some View {
        VStack(spacing: 16) {
            Gauge(value: score, in: 300...maxScore) {
                
            } currentValueLabel: {
                Text("\(Int(score))")
                    .font(.title)
                    .bold()
            }
            .gaugeStyle(.accessoryCircular)
            .scaleEffect(2.0)
            .tint(scoreColor)
            .padding(.vertical, 30)
            
            Text("Credit Score")
            
            Text(scoreRating)
                .font(.title3)
                .bold()
                .foregroundColor(scoreColor)
            
            Text("Last updated June 15, 2024")
                .font(.caption)
                .foregroundColor(.secondary)
        }
        .padding()
        .background(Color(uiColor: .systemBackground))
        .cornerRadius(16)
        .shadow(radius: 2)
        .padding(.horizontal)
    }
}

struct CreditMetricCard: View {
    let metric: CreditMetric
    
    var body: some View {
        VStack(alignment: .leading, spacing: 8) {
            Text(metric.title)
                .font(.subheadline)
                .foregroundColor(.secondary)
            
            Text(metric.value)
                .font(.title2)
                .bold()
            
            Text(metric.trend)
                .font(.caption)
                .foregroundColor(.secondary)
        }
        .frame(width: 160)
        .padding()
        .background(Color(uiColor: .systemBackground))
        .cornerRadius(16)
        .shadow(radius: 2)
    }
}

struct CreditFactorRow: View {
    let factor: CreditFactor
    
    var body: some View {
        HStack {
            Image(systemName: factor.icon)
                .font(.title2)
                .foregroundColor(factor.isPositive ? .green : .red)
                .frame(width: 30)
            
            VStack(alignment: .leading, spacing: 4) {
                Text(factor.title)
                    .font(.headline)
                
                HStack {
                    Text(factor.status)
                        .font(.subheadline)
                        .foregroundColor(.secondary)
                    
                    Text("•")
                        .foregroundColor(.secondary)
                    
                    Text(factor.impact)
                        .font(.caption)
                        .foregroundColor(.secondary)
                }
            }
            
            Spacer()
            
            Text("\(factor.score)%")
                .font(.title3)
                .bold()
                .foregroundColor(factor.isPositive ? .green : .red)
        }
        .padding(.vertical, 8)
    }
}

struct RecentActivityView: View {
    let activities = [
        CreditActivity(date: "June 15", description: "Credit utilization decreased", impact: "+2 points"),
        CreditActivity(date: "June 10", description: "Payment received - Chase", impact: "+5 points"),
        CreditActivity(date: "June 1", description: "Credit limit increased", impact: "+8 points")
    ]
    
    var body: some View {
        VStack(spacing: 16) {
            ForEach(activities) { activity in
                HStack {
                    VStack(alignment: .leading, spacing: 4) {
                        Text(activity.date)
                            .font(.subheadline)
                            .foregroundColor(.secondary)
                        Text(activity.description)
                            .font(.headline)
                    }
                    
                    Spacer()
                    
                    Text(activity.impact)
                        .font(.subheadline)
                        .foregroundColor(.green)
                }
            }
        }
        .padding()
        .background(Color(uiColor: .systemBackground))
        .cornerRadius(16)
        .shadow(radius: 2)
    }
}

// MARK: - Models
struct CreditFactor: Identifiable {
    let id = UUID()
    let title: String
    let status: String
    let impact: String
    let score: Int
    let isPositive: Bool
    let icon: String
}

struct CreditMetric: Identifiable {
    let id = UUID()
    let title: String
    let value: String
    let trend: String
}

struct CreditActivity: Identifiable {
    let id = UUID()
    let date: String
    let description: String
    let impact: String
}

Similar Blogs

View All Articles
How to Translate Xcode String Catalogs with AI

How to Translate Xcode String Catalogs with AI

Learn how to efficiently translate Xcode string catalogs using AI fast, streamlining localization for your iOS and SwiftUI applications.

by dockui
May 4
How to optimize your SwiftUI app in 2026

How to optimize your SwiftUI app in 2026

Discover top strategies to optimize your SwiftUI app in 2026, enhancing performance, responsiveness, and maintainability with modern concurrency.

by dockui
Apr 29
SwiftUI: iOS Confirmation Alert (Confirm + Cancel)

SwiftUI: iOS Confirmation Alert (Confirm + Cancel)

SwiftUI iOS confirmation alert with Confirm and Cancel buttons. Beginners guide to building safe actions, destructive deletes, and commit dialogs.

by dockui
Nov 11
SwiftUI: IOS Haptic Feedback Guide 2026

SwiftUI: IOS Haptic Feedback Guide 2026

Add click to vibrate haptic feedback in SwiftUI. Full guide to UIImpactFeedbackgenerator, success, error, selection, and tap vibration patterns with code.

by dockui
Nov 11

Code copied to clipboard!