Iced Canvas: Need a better way to pass variables into a canvas

⚓ Rust    📅 2026-05-27    👤 surdeus    👁️ 2      

surdeus

I 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

Read full topic

🏷️ Rust_feed