
Here’s a SwiftUI implementation of a dashboard view with statistics and charts, organized using VStack
and HStack
for a clean layout, along with explanations:
import SwiftUI
import Charts // Import Charts framework for data visualization
struct DashboardView: View {
var statistics: [Statistic] = [ // Sample statistics data
Statistic(title: "Total Sales", value: "$12,540", color: .blue),
Statistic(title: "New Customers", value: "235", color: .green),
Statistic(title: "Average Order Value", value: "$53.80", color: .orange),
// ...more statistics
]
var chartData: [BarChartDataEntry] = [ // Sample chart data
.init(x: 1, y: 80),
.init(x: 2, y: 120),
.init(x: 3, y: 65),
// ...more data points
]
var body: some View {
ScrollView { // Make the dashboard scrollable
VStack(alignment: .leading, spacing: 20) {
HStack(alignment: .top, spacing: 20) { // Arrange statistics in rows
ForEach(statistics) { stat in
StatisticView(statistic: stat)
}
}
Chart(chartData) {
BarMark(
x: .value("Day", $0.x),
y: .value("Value", $0.y)
)
.foregroundStyle($0.y > 100 ? .green : .blue) // Conditional coloring
}
.frame(height: 200)
.padding()
// Add more chart views or other content here
}
.padding()
}
}
}
struct Statistic: Identifiable { // Data model for statistics
let id = UUID()
let title: String
let value: String
let color: Color
}
struct StatisticView: View { // View for each statistic item
let statistic: Statistic
var body: some View {
VStack(alignment: .leading, spacing: 5) {
Text(statistic.title)
.font(.headline)
Text(statistic.value)
.font(.title2)
.fontWeight(.bold)
.foregroundColor(statistic.color)
}
.padding()
.background(Color(.systemGray6))
.cornerRadius(10)
}
}
Explanation:
- DashboardView:
- It holds the main structure of the dashboard.
statistics
andchartData
are sample data arrays for statistics and chart points.ScrollView
wraps the content to make it scrollable.- The main
VStack
arranges the content vertically with spacing.
- Statistics Section:
- An
HStack
is used to arrange statistic items in rows. ForEach
iterates over thestatistics
array to createStatisticView
for each item.
- An
- Chart Section:
- Uses the
Charts
framework to create a bar chart. You’ll need to add the Charts package to your project. chartData
provides the data for the chart..foregroundStyle($0.y > 100 ? .green : .blue)
conditionally colors bars based on their values.
- Uses the
- Statistic Data Model:
Statistic
is a struct to hold title, value, and color for each statistic item.
- StatisticView:
- Represents a single statistic item with title and value displayed using
Text
views. - Color is applied based on the
statistic.color
.
- Represents a single statistic item with title and value displayed using
Key Improvements:
- Clear Layout: Uses
VStack
andHStack
for organizing statistics and charts. - Scrollable:
ScrollView
makes the content scrollable if it exceeds the screen. - Charts Integration: Incorporates the
Charts
framework for data visualization. - Customizable: Easily adapt data models and views for your specific dashboard data.
Remember:
- Replace the sample data with your actual dashboard statistics and chart data.
- Customize the appearance of the chart and statistics to match your design preferences.