Implementation of `iced::application::View` is not general enough

Hello I’m new on iced, and when trying to build my project I get the error:

implementation of iced::application::View is not general enough

this is my view implementation:

impl AppState {
    pub fn view<'a>(&self) -> Column<'a, Message, Theme, Renderer> {
        let mut view_struct = Column::new();

        // 1) Top row: input + button
        let mut top_row = Row::new().spacing(5).padding(8);
        top_row = top_row.push(text_input("Enter project path...", &self.input_value));
        top_row = top_row.push(button("Analyze").on_press(Message::AnalyzePressed));

        view_struct = view_struct.push(top_row);

        // 2) Scrollable list of dependencies
        let mut deps_column = Column::new().spacing(5).padding(10);

        for (to, into) in self.project_dependencies.clone() {
            let s = format!("{to} -> {into}");
            deps_column = deps_column.push(Text::new(s));
        }

        view_struct = view_struct.push(deps_column);

        view_struct
    }
}

You must return an Element, not a specific widget. The following should work:

fn view(&self) -> Element<'_, Message> {
  let mut view_struct = Column::new();
  // ...
  view_struct.into()
}
1 Like

The project build correctly, thanks!

Just for the record, view can actually return anything that implements Into<Element>.

I believe the issue here was the lifetime:

fn view<'a>(&self) -> Column<'a, Message, Theme, Renderer>

Which should have been:

fn view<'a>(&'a self) -> Column<'a, Message, Theme, Renderer>

Or equivalently:

fn view(&self) -> Column<'_, Message, Theme, Renderer>