Flutter Appbar Widget使用详解

Flutter的AppBar Widget是一个常用的顶部导航栏控件,可以帮助开发者快速实现应用的导航和标题显示。在本文中,我将向你介绍AppBar的常见属性和用法。

基本用法 要使用AppBar Widget,只需在Scaffold Widget中添加它作为参数即可。例如,以下代码展示了如何创建一个带有标题“Flutter App”的AppBar:

Scaffold(
  appBar: AppBar(
    title: Text("Flutter App"),
  ),
  body: Container(
    // 应用程序的主体内容
  ),
);

在这个例子中,我们创建了一个Scaffold Widget,并设置了一个AppBar Widget作为它的顶部导航栏。AppBar的标题通过Text Widget来指定。除此之外,我们还在Scaffold中添加了一个Container Widget作为应用程序的主体内容。

AppBar有许多可用的属性,包括以下几个常见的属性:

  • title: AppBar的标题,通常是一个Text Widget。
  • leading: AppBar左侧的小部件,通常是一个IconButton Widget,用于打开侧边栏菜单或返回上一页。
  • actions: AppBar右侧的小部件,通常是一些IconButton Widget,用于执行一些操作,如搜索或设置。
  • backgroundColor: AppBar的背景色。
  • elevation: AppBar的高度,通常是一个双精度浮点数,单位是像素。
  • centerTitle: 是否将标题居中显示,默认值为false。

以下是一个使用所有这些属性的例子:

Scaffold(
  appBar: AppBar(
    title: Text("Flutter App"),
    leading: IconButton(
      icon: Icon(Icons.menu),
      onPressed: () {
        // 打开侧边栏菜单的代码
      },
    ),
    actions: [
      IconButton(
        icon: Icon(Icons.search),
        onPressed: () {
          // 执行搜索操作的代码
        },
      ),
      IconButton(
        icon: Icon(Icons.settings),
        onPressed: () {
          // 打开设置页面的代码
        },
      ),
    ],
    backgroundColor: Colors.blue,
    elevation: 4.0,
    centerTitle: true,
  ),
  body: Container(
    // 应用程序的主体内容
  ),
);

自定义AppBar

如果你想要更多的控制权,你可以使用PreferredSize Widget来创建自定义的AppBar。PreferredSize Widget需要一个preferredSize属性,用于指定AppBar的大小。你可以使用SizedBox Widget来设置AppBar的大小。

让我来举一个更具体的自定义AppBar的例子。假设我们要创建一个带有搜索框的AppBar,搜索框可以在用户输入时实时搜索内容。

首先,我们可以创建一个StatefulWidget,名为SearchAppBar。在State类中,我们创建一个TextEditingController,用于控制搜索框的文本输入。

class SearchAppBar extends StatefulWidget implements PreferredSizeWidget {
  final String title;
  final double height;

  SearchAppBar({required this.title, this.height = kToolbarHeight});

  @override
  _SearchAppBarState createState() => _SearchAppBarState();

  @override
  Size get preferredSize => Size.fromHeight(height);
}

class _SearchAppBarState extends State<SearchAppBar> {
  final TextEditingController _searchController = TextEditingController();
  String _searchText = '';

  @override
  void initState() {
    super.initState();
    _searchController.addListener(_onSearchChanged);
  }

  @override
  void dispose() {
    _searchController.removeListener(_onSearchChanged);
    _searchController.dispose();
    super.dispose();
  }

  void _onSearchChanged() {
    setState(() {
      _searchText = _searchController.text;
    });
    // TODO: 执行搜索操作
  }

  @override
  Widget build(BuildContext context) {
    return AppBar(
      title: Text(widget.title),
      backgroundColor: Colors.blue,
      centerTitle: true,
      actions: [
        IconButton(
          icon: Icon(Icons.search),
          onPressed: () {},
        ),
      ],
      bottom: PreferredSize(
        child: TextField(
          controller: _searchController,
          decoration: InputDecoration(
            hintText: 'Search',
            border: OutlineInputBorder(),
          ),
        ),
        preferredSize: Size.fromHeight(50.0),
      ),
    );
  }
}

在build方法中,我们返回一个AppBar Widget,设置了各种属性。为了添加搜索框,我们使用了PreferredSize Widget,并将其放在AppBar的底部。搜索框是一个TextField Widget,我们将其放在PreferredSize的child属性中,并指定其preferredSize为Size.fromHeight(50.0)。

当用户输入搜索框时,我们需要执行搜索操作。为此,我们使用了TextEditingController来监听搜索框的文本变化,并在_onSearchChanged方法中更新_searchText变量的值。我们还在dispose方法中移除了_listener,以避免内存泄漏。

现在,我们可以在Scaffold中使用SearchAppBar了:

Scaffold(
  appBar: SearchAppBar(title: 'My App'),
  body: Container(
    // 应用程序的主体内容
  ),
);

这样,我们就创建了一个带有搜索框的AppBar,并可以在用户输入搜索框时实时搜索内容了。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:00

results matching ""

    No results matching ""