本記事では、モバイルアプリケーション開発、特に Flutter フレームワークにおける View、Screen、Page の概念について定義と解釈を提示します。これらの定義は以下の通りです:
本記事で紹介する View、Screen、Page の定義は、筆者の経験と理解に基づいています。これらの概念の解釈はプロジェクトやチームによって異なる場合があります。
モバイルアプリケーション開発、特に Flutter を使用する際に、UI 構造を整理するための概念として「View」「Screen」「Page」という用語がよく使用されます。これらの用語の定義を明確にすることで、アプリケーション構造の理解と設計をより効果的に行うことができます。
View は、UI の中の視覚的、機能的に区切られた部分を表す最小単位のモジュールです。
class CustomButton extends StatelessWidget {
final String text;
final VoidCallback onPressed;
const CustomButton({Key? key, required this.text, required this.onPressed}) : super(key: key);
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPressed,
child: Text(text),
);
}
}
Screen は、View のコンテナとして機能し、視覚的、機能的に 1つの画面に表示される UI を表現するモジュールです。
class ProfileScreen extends StatelessWidget {
Widget build(BuildContext context) {
return Column(
children: [
UserAvatarView(),
UserInfoView(),
UserStatsView(),
UserActionButtonsView(),
],
);
}
}
Page は、View や Screen のコンテナとして機能し、ルーティングに結びつく UI を表現するモジュールです。
class MainPage extends StatefulWidget {
_MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
int _currentIndex = 0;
final List<Widget> _screens = [
HomeScreen(),
SearchScreen(),
ProfileScreen(),
];
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: _currentIndex,
children: _screens,
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _currentIndex,
onTap: (index) => setState(() => _currentIndex = index),
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'ホーム'),
BottomNavigationBarItem(icon: Icon(Icons.search), label: '検索'),
BottomNavigationBarItem(icon: Icon(Icons.person), label: 'プロフィール'),
],
),
);
}
}
本記事で紹介した View、Screen、Page の定義を使用することで、UI モジュールの階層を以下のように整理できます:
この階層構造を意識することで、より整理された、保守性の高いアプリケーション構造を実現できる可能性があります。ただし、これらの概念の境界は時に曖昧になることがあり、プロジェクトやチームの規約によって解釈が異なる場合もあります。
重要なのは、チーム内で一貫した理解と使用方法を共有することです。アプリケーションの要件や開発チームの方針に応じて、これらの概念を適切にカスタマイズし、プロジェクトに最適な構造を見出すことが大切です。
ソフトウェアエンジニア。趣味は競馬、写真、ゲーム。
お問い合わせはTwitterのDMでお願いします。