create-pagelisted
Install: claude install-skill NarekManukyan/flutter-mobx-kit
# Create a page + page state
Governed by [ADR-0009](../../../docs/adr/0009-provider-based-state-access.md) (Provider access), [ADR-0010](../../../docs/adr/0010-hookwidget-default.md) (HookWidget), [ADR-0018](../../../docs/adr/0018-widget-construction-discipline.md) (widget construction), [ADR-0019](../../../docs/adr/0019-hook-selection.md) (hook selection), [ADR-0008](../../../docs/adr/0008-appnavigator-routing-abstraction.md) (navigation), [ADR-0002](../../../docs/adr/0002-state-vs-store-separation.md) (state vs store).
## The page state
`@injectable`, MobX, lives at `lib/features/{feature}/view/{feature}_page_state.dart`. It **never** touches `DioService` — it calls stores and use cases.
```dart
part 'home_page_state.g.dart';
@injectable
class HomePageState = _HomePageStateBase with _$HomePageState;
abstract class _HomePageStateBase with Store {
final HomeStore _homeStore;
final AppNavigator _appNavigator;
final OpenTodoDetailsUseCase _openTodoDetailsUseCase;
_HomePageStateBase(
this._homeStore,
this._appNavigator,
this._openTodoDetailsUseCase,
);
HomeStore get store => _homeStore;
Future<void> init() async => _homeStore.loadTodos();
@action
Future<void> onTodoTap(String id) async => _openTodoDetailsUseCase(id);
@action
Future<void> onLogoutPressed() async {
await _homeStore.logout();
await _appNavigator.pushAndPopAll(const LoginRoute());
}
void dispose() {}
}
```
- Handler names read as events: `onXPressed`, `onXTa