App 级别组件
App 级别组件是 Flutter 应用的基础框架组件,用于构建应用的整体结构、导航系统和主题配置。
核心概念:App 级别组件定义了应用的整体架构,包括入口点、路由管理、主题设置等,是每个 Flutter 应用的基础。
MaterialApp
MaterialApp 是 Material Design 应用的根组件,提供了完整的 Material Design 风格支持。
📱 渲染效果预览
MaterialApp
首页内容
MaterialApp(
title: 'My App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomePage(),
routes: {
'/': (context) => HomePage(),
'/detail': (context) => DetailPage(),
},
)
主要属性:
- title:应用标题
- theme:主题配置
- home:首页组件
- routes:路由表
- initialRoute:初始路由
- debugShowCheckedModeBanner:是否显示调试标签
CupertinoApp
CupertinoApp 是 iOS 风格应用的根组件,提供了 iOS 原生外观和感觉。
📱 渲染效果预览
← Navigation Bar
首页内容
CupertinoApp(
title: 'My App',
theme: CupertinoThemeData(
primaryColor: CupertinoColors.systemBlue,
),
home: HomePage(),
routes: {
'/': (context) => HomePage(),
'/detail': (context) => DetailPage(),
},
)
Scaffold
Scaffold 是 Material Design 的页面布局组件,提供了应用页面的基本结构。
📱 渲染效果预览
页面内容
+
Scaffold(
appBar: AppBar(
title: Text('My Page'),
),
body: Center(
child: Text('Page Content'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: Icon(Icons.add),
),
drawer: Drawer(
child: ListView(
children: [
DrawerHeader(
child: Text('Menu'),
),
ListTile(
title: Text('Item 1'),
onTap: () {},
),
],
),
),
)
Navigator
Navigator 管理应用的路由栈,用于页面之间的导航。
📱 渲染效果预览
// 导航到新页面
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DetailPage(),
),
);
// 返回上一页
Navigator.pop(context);
// 替换当前页面
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => NewPage(),
),
);
Routes
Routes 定义了应用的路由表,用于管理页面路径和对应的页面组件。
// 定义路由表
final routes = {
'/': (context) => HomePage(),
'/detail': (context) => DetailPage(),
'/settings': (context) => SettingsPage(),
};
// 使用命名路由导航
Navigator.pushNamed(context, '/detail');
// 带参数路由
Navigator.pushNamed(
context,
'/detail',
arguments: {'id': 123},
);
Theme
Theme 定义了应用的主题样式,包括颜色、字体、形状等。
ThemeData(
primarySwatch: Colors.blue,
scaffoldBackgroundColor: Colors.white,
cardColor: Colors.white,
dividerColor: Colors.grey[300],
textTheme: TextTheme(
headline1: TextStyle(fontSize: 32, fontWeight: FontWeight.bold),
bodyText1: TextStyle(fontSize: 16),
),
buttonTheme: ButtonThemeData(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
)
Localizations
Localizations 用于应用国际化,支持多语言。
MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('zh', 'CN'),
const Locale('en', 'US'),
],
locale: const Locale('zh', 'CN'),
)
最佳实践:
- 使用 MaterialApp 或 CupertinoApp 作为应用根组件
- 配置统一的主题样式,保持应用一致性
- 使用命名路由管理页面导航
- 实现国际化支持多语言
- 合理使用 Scaffold 构建页面结构