A Flutter app for consuming Kite news summaries.
Runs on Android, iOS/iPadOS, macOS, and web (presumably other platforms as well, but not tested).
- ⌨️ full keyboard support - never lift your hands from the keyboard!
- ✨ adaptive layout - adapts to any screen size, including foldables and tablets.
- 🔆 theme toggle - easily switch between light and dark modes.
- ⚙️ no
material/cupertinodependencies - Focuses on platform-independent UI components.
Rationale for focusing on these features is that power users (which are most likely to use services like Kite) expect their software to adapt to any platform they use (including foldables or iPads with Stage Manager, where app window size can be dynamically adjusted). They are also more likely to have hardware keyboards attached to their mobile devices, prompting the need to support keyboard interactivity.
| Shortcut | Action |
|---|---|
h/l |
Select next/previous category. |
j/k |
Select next/previous content in the list. |
/ |
Toggle search for categories. |
t |
Toggle theme (light/dark). |
cmd-]/alt-Left |
Unselect content (go back). |
arrow Up/Down |
Scroll up/down in a cluster |
g |
Scroll to top of a cluster |
G (shift-g) |
Scroll to bottom of a cluster |
? |
Toggle keybindings help |
ipad.mp4
demonstrates layout changes as the app screen is resized
macos.mp4
demonstrates interacting with the app via keyboard (keystrokes are displayed in the bottom right corner)
- localization/internationalization (especially when it comes to semantic labels)
- no support for languages that are not written horizontally from left to right
- accessibility accommodations past the very basics
- storing any data locally, including:
- user customization settings
- caching most recent data for offline consumption
- more informative error messages: currently, there's really nothing a user can do when an api call fails, except try try again
- fancy animations (e.g., for page transitions)
- Customization
- setting keybinding preferences (although clearly superior, vim keybindings might not be for everyone)
- saving theme preference or adapting to system theme
- Offline support
- storing fetched data locally (instead of in-memory), so that it is available for offline consumption
- Proper screen reader support
- Better test coverage
A simple flutter run should do the trick.
Since the functionality is currently essentially limited to displaying results of two API calls, the app structure reflects this simplicity.
KiteServiceinitiates API calls and caches the results in memory, only requesting new data after noon UTC (which is a checkpoint I got from Kite's intro page)KiteViewModelholds the state of the app- it exposes
ValueListenables, which are consumed by various widgets to build the UI - its state is modified through
Actions (dispatched either by keyboard shortcuts or widget onTap callbacks)
- it exposes
HomePagebuilds the UI as a function of screen size