Skip to content

Refactor the UI layout of ImagenScreen to solve the navigation flicker #1719

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

YoungHypo
Copy link
Contributor

@YoungHypo YoungHypo commented Jun 25, 2025

Fix #1718

Wrap the InputField and LazyVGrid in a ScrollView to make swiftUI render the titile in .large mode by default at first.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @YoungHypo, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on refactoring the UI layout of the ImagenScreen to resolve a navigation flicker issue and ensure the navigation title correctly renders in its large display mode. The core change involves adjusting the view hierarchy by making the entire screen content scrollable from the outset, which helps SwiftUI manage the navigation bar's appearance more effectively.

Highlights

  • UI Layout Refactoring: The root container of the ImagenScreen's body has been changed from a ZStack to a ScrollView (line 36). This modification ensures that the entire screen content, including the InputField and LazyVGrid, is scrollable from the initial load.
  • Nested ScrollView Removal: The ScrollView that previously wrapped only the LazyVGrid (lines 47-64) has been removed. Its functionality is now superseded by the new top-level ScrollView, simplifying the view hierarchy.
  • Progress Overlay Refinement: The conditional rendering of the ProgressOverlay (previously lines 66-68) has been refactored to use an .overlay modifier on the main VStack (line 64), providing a more idiomatic SwiftUI approach for displaying overlays.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The pull request refactors the ImagenScreen layout to resolve a navigation title flicker by wrapping the view's content in a ScrollView. The review focuses on improving the LazyVGrid implementation to be more adaptive and robust by avoiding hardcoded screen dimensions and using stable identifiers for the list items.

GridItem(.fixed(UIScreen.main.bounds.width / 2 - spacing), spacing: spacing),
GridItem(.fixed(UIScreen.main.bounds.width / 2 - spacing), spacing: spacing),
], spacing: spacing) {
ForEach(viewModel.images, id: \.self) { image in

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using id: \.self with UIImage can cause performance issues because UIImage is a class. When images are regenerated, new UIImage instances cause SwiftUI to re-render the entire grid. Consider wrapping UIImage in a custom struct that conforms to Identifiable (e.g., using a UUID for the id) to improve UI performance.

Copy link
Contributor Author

@YoungHypo YoungHypo Jun 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I’ve tried to generate images multiple times in imagenscreen. The UI remained smooth without noticeable lag when re-rendering the image grid. If you think adjustments are necessary, I'll do that. @paulb777

@paulb777
Copy link
Member

@YoungHypo Thanks for the PR. Please respond to gemini's review comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[UI Bug] Navigation Title Flicker on ImagenScreen in firebaseai
3 participants