Iced Canvas: Need a better way to pass variables into a canvas
⚓ Rust 📅 2026-05-27 👤 surdeus 👁️ 2I have an iced program that displays data on a canvas. All works. In the main app view function I call the canvas and pass in several variables that are state variables in the main app. To pass them in I have had to go through what I think is a very convoluted process. There must be a better way but I do not know what that is. Any assistance will be appreciated.
fn view(state: &AppState) -> iced::Element<'_, Message> {
let points2 = &state.graph_points;
let x_labels2= &state.x_axis_labels;
let y_labels2 = &state.y_axis_labels;
let index_values2= &state.min_and_max_values;
let graph_points = points2.to_vec();
let x_axis_labels = x_labels2.to_vec();
let y_axis_labels = y_labels2.to_vec();
let min_and_max_values = index_values2.to_vec();
let start_date_index = state.start_date_index;
match state.screen {
Screen::Loading => loading_view(),
Screen::Welcome => welcome_view(),
Screen::DisplayGraph => {
canvas(LineGraphCanvas {graph_points,
x_axis_labels,
y_axis_labels,
min_and_max_values,
start_date_index})
.width(Length::Fill)
.height(Length::Fill)
.into()
}
}
}
struct AppState {
screen: Screen,
start_dates: Vec<String>,
graph_points: Vec<Point>,
x_axis_labels: Vec<String>,
y_axis_labels: Vec<String>,
min_and_max_values: Vec<IndexDateClose>,
start_date_index: usize,
axes_end_values: Vec<AxesMinMaxValues>,
}
pub struct LineGraphCanvas {
pub graph_points: Vec<Point>,
pub x_axis_labels: Vec<String>,
pub y_axis_labels: Vec<String>,
pub min_and_max_values: Vec<IndexDateClose>,
pub start_date_index: usize,
}
1 post - 1 participant
🏷️ Rust_feed