Selecting a match 1,201 lines into an ordinary TypeScript file showed line 1,103 on an Android device. The match was never on screen, so the preview and Open flow could not deliver the occurrence they promised. The cause, measured rather than assumed. The list was told every row is one line of code tall. Probed on the device, a plain row is 17.52dp and a wrapped row is 140.19dp, because a row is as tall as the text needs and ordinary source lines wrap on a phone. Every wrapped line above the match therefore shrank the computed offset, and the list scrolled to a fraction of the real distance. Row geometry is now derived instead of assumed: one visual line is the reader's code size rounded the way the device rounds it, and a line occupies as many visual lines as it wraps onto, counted the way the platform wraps — greedily at spaces, mid-word only for a word too long for a line. The column count comes from measuring one monospace character at the current code size, so it follows the Appearance setting rather than a constant. Two smaller things fell out. The list renders only once that measurement exists, because scrolling a list still sized for a provisional geometry gets clamped to the shorter content and lands short. And the match is revealed near the top with two lines of context rather than centred, since centring is measured against the list's own box, which inside a sheet is taller than the part the reader can see. Verified on an Android device at the default code size and at 20px: preview and Open both show the highlighted text, across files and between two occurrences in one file.
Welcome to your Expo app 👋
This is an Expo project created with create-expo-app.
Get started
-
Install dependencies
npm install -
Start the app
npx expo start
In the output, you'll find options to open the app in a
- development build
- Android emulator
- iOS simulator
- Expo Go, a limited sandbox for trying out app development with Expo
You can start developing by editing the files inside the app directory. This project uses file-based routing.
Get a fresh project
When you're ready, run:
npm run reset-project
This command will move the starter code to the app-example directory and create a blank app directory where you can start developing.
Learn more
To learn more about developing your project with Expo, look at the following resources:
- Expo documentation: Learn fundamentals, or go into advanced topics with our guides.
- Learn Expo tutorial: Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web.
Join the community
Join our community of developers creating universal apps.
- Expo on GitHub: View our open source platform and contribute.
- Discord community: Chat with Expo users and ask questions.
Dictation debugging
Set EXPO_PUBLIC_ENABLE_AUDIO_DEBUG=1 before running npx expo start to render the in-app audio debug card. Pair it with the server-side STT_DEBUG_AUDIO_DIR flag so every dictation includes a copyable path to the saved raw audio file.