Flutter自定义应用栏插件fluent_appbar的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter自定义应用栏插件fluent_appbar的使用

标题

flutter自定义应用栏插件fluent_appbar的使用

内容

  • A fluent appbar

  • Getting Started

    这个包为flutter项目提供了一个可定制的应用栏。

示例代码

import 'package:flutter/material.dart';
import 'package:fluent_appbar/fluent_appbar.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final ScrollController scrollController = ScrollController();
  final List<String> entries = [
    'A',
    'B',
    'C',
    'A',
    'B',
    'C',
    'A',
    'B',
    'C',
    'A',
    'B',
    'C'
  ];
  final List<int> colorCodes = [
    600,
    500,
    100,
    600,
    500,
    100,
    600,
    500,
    100,
    600,
    500,
    100
  ];

  Future<bool> getData() async {
    await Future.delayed(const Duration(milliseconds: 50));
    return true;
  }

  Widget listDemo() {
    return FutureBuilder<bool>(
      future: getData(),
      builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
        if (!snapshot.hasData) {
          return const SizedBox();
        } else {
          return ListView.builder(
            controller: scrollController,
            padding: EdgeInsets.only(
              top: AppBar().preferredSize.height +
                  MediaQuery.of(context).padding.top +
                  24,
              bottom: 62 + MediaQuery.of(context).padding.bottom,
            ),
            itemCount: entries.length,
            scrollDirection: Axis.vertical,
            itemBuilder: (BuildContext context, int index) {
              // widget.animationController.forward();
              return Container(
                height: 80,
                color: Colors.amber[colorCodes[index]],
                child: Center(child: Text('Entry ${entries[index]}')),
              );
            },
          );
        }
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: FluentAppBar(
        scrollController: scrollController,
        titleText: 'Home',
      ),
      body: Stack(children: [
        listDemo(),
      ]),
    );
  }
}

更多关于Flutter自定义应用栏插件fluent_appbar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义应用栏插件fluent_appbar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用fluent_appbar插件来创建自定义应用栏的代码示例。fluent_appbar是一个流行的Flutter插件,它允许开发者创建类似于Microsoft Fluent Design的应用栏。

首先,确保你已经在pubspec.yaml文件中添加了fluent_appbar依赖:

dependencies:
  fluent_appbar: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

以下是一个使用fluent_appbar创建自定义应用栏的完整示例:

import 'package:flutter/material.dart';
import 'package:fluent_appbar/fluent_appbar.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Fluent AppBar Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: FluentAppBar(
          title: Text('Fluent AppBar Demo'),
          leading: IconButton(
            icon: Icon(Icons.menu),
            onPressed: () {
              // 打开抽屉菜单(如果有的话)
              Scaffold.of(context).openDrawer();
            },
          ),
          actions: <Widget>[
            IconButton(
              icon: Icon(Icons.search),
              onPressed: () {
                // 执行搜索操作
                print('Search icon pressed');
              },
            ),
            IconButton(
              icon: Icon(Icons.more_vert),
              onPressed: () {
                // 显示更多选项菜单
                showMenu(
                  context: context,
                  position: RelativeRect.fromLTRB(
                      MediaQuery.of(context).size.width - 60,
                      40,
                      MediaQuery.of(context).size.width - 20,
                      60),
                  items: <PopupMenuEntry>[
                    PopupMenuItem<String>(
                      value: 'Settings',
                      child: Text('Settings'),
                    ),
                    PopupMenuItem<String>(
                      value: 'Help',
                      child: Text('Help'),
                    ),
                    PopupMenuItem<String>(
                      value: 'About',
                      child: Text('About'),
                    ),
                  ],
                ).then((String value) {
                  if (value == 'Settings') {
                    // 导航到设置页面
                    print('Settings selected');
                  } else if (value == 'Help') {
                    // 显示帮助信息
                    print('Help selected');
                  } else if (value == 'About') {
                    // 显示关于信息
                    print('About selected');
                  }
                });
              },
            ),
          ],
          centerTitle: true,
          backgroundColor: Colors.blue,
          elevation: 4.0,
          expandedHeight: 200.0,
          flexibleSpace: FlexibleSpaceBar(
            collapseMode: CollapseMode.parallax,
            background: Image.network(
              'https://via.placeholder.com/1920x400',
              fit: BoxFit.cover,
            ),
          ),
        ),
        body: Center(
          child: Text('Hello, Fluent AppBar!'),
        ),
        drawer: Drawer(
          child: ListView(
            padding: EdgeInsets.zero,
            children: <Widget>[
              DrawerHeader(
                child: Text('Drawer Header'),
                decoration: BoxDecoration(
                  color: Colors.blue,
                ),
              ),
              ListTile(
                title: Text('Item 1'),
                onTap: () {
                  // 执行Item 1的操作
                  Navigator.pop(context);
                },
              ),
              ListTile(
                title: Text('Item 2'),
                onTap: () {
                  // 执行Item 2的操作
                  Navigator.pop(context);
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们使用了FluentAppBar来创建一个自定义的应用栏,并添加了导航菜单按钮、搜索按钮和更多选项菜单按钮。我们还设置了应用栏的背景颜色、标题居中、阴影高度和展开高度等属性。在flexibleSpace属性中,我们使用了一个带有网络图片的FlexibleSpaceBar,以实现视差效果。

希望这个示例能帮助你更好地理解如何使用fluent_appbar插件来自定义Flutter应用中的应用栏。

回到顶部