Flutter自适应导航栏插件flutter_adaptive_navigation的使用

Flutter自适应导航栏插件flutter_adaptive_navigation的使用

flutter_adaptive_navigation

一个简化在应用程序中添加自适应导航过程的Flutter包。它使用底部导航栏用于手机,导航栏用于平板电脑,并且在桌面大小屏幕上使用抽屉。

Getting started

导入包:

import 'package:flutter_adaptive_navigation/flutter_adaptive_navigation.dart';

使用FlutterAdaptiveNavigationScaffold代替常规的Scaffold

Usage

FlutterAdaptiveNavigationScaffold(
  labelDisplayType: LabelDisplayType.all, // 可选。确定在平板和移动设备上显示哪些标签。在桌面上忽略此设置。默认只显示已选择的标签。
  appBar: AppBar(
    title: const Text('Adaptive Navigation'),
  ), // 可选。定义将作为appBar使用的widget。
  drawerWidthFraction: 0.15, // 可选。以视口宽度百分比的形式确定抽屉的宽度。默认:20%。应以分数形式表示(介于0和1之间)
  destinations: [
    NavigationElement(
      icon: const Icon(Icons.home),
      label: 'Home',
      builder: () => const CustomListView(
        count: 11,
        color: Colors.pinkAccent,
      ),
    ),
    NavigationElement(
      icon: const Icon(Icons.group),
      label: 'Group',
      builder: () => const CustomListView(
        count: 11,
        color: Colors.red,
      ),
      breakpointBasedBuilder: {
        Breakpoint.tablet: () => const CustomGridView(
          count: 11,
          color: Colors.blue,
        )
      },
    ),
    NavigationElement(
      icon: const Icon(Icons.settings),
      label: 'Settings',
      builder: () => const CustomListView(
        count: 11,
        color: Colors.amberAccent,
      ),
      breakpointBasedBuilder: {
        Breakpoint.desktop: () => const CustomGridView(
          count: 11,
          color: Colors.orange,
        )
      },
    ),
    NavigationElement(
      icon: const Icon(Icons.account_circle),
      label: 'Profile',
      builder: () => const CustomListView(
        count: 11,
        color: Colors.indigo,
      ),
    ),
  ], // 必需。应用中的导航目的地列表。至少需要一个元素。
  backgroundColor: Colors.white, // 可选。导航元素的背景颜色
);

对于NavigationElement:

NavigationElement(
  icon: const Icon(Icons.home_outlined), // 必需。要在导航中显示的图标。
  selectedIcon: const Icon(Icons.home), // 可选。如果指定为活动页面,则使用此图标。
  label: 'Profile', // 必需。导航的标签。
  builder: () => const CustomListView(
    count: 11,
    color: Colors.indigo,
  ), // 可选。指定将作为屏幕主内容显示的widget。将在所有断点中使用。请指定此或`breakpointBasedBuilder`
  breakpointBasedBuilder: {
    Breakpoint.desktop: () => const CustomGridView(
      count: 11,
      color: Colors.orange,
    )
  }, // 可选。允许为特定设备类型覆盖主内容。
)

Screenshots

  • Bottom Navigation Bar

  • Navigation Rail

  • Navigation Drawer

示例代码

import 'package:example/views/custom_grid.dart';
import 'package:example/views/custom_list.dart';
import 'package:flutter/material.dart';
import 'package:flutter_adaptive_navigation/flutter_adaptive_navigation.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 这个 widget 是你应用程序的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme:
            ColorScheme.fromSwatch(primarySwatch: Colors.blue).copyWith(
          secondary: Colors.red,
        ),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return FlutterAdaptiveNavigationScaffold(
      labelDisplayType: LabelDisplayType.all,
      appBar: AppBar(
        title: const Text('Adaptive Navigation'),
      ),
      drawerWidthFraction: 0.15,
      destinations: [
        NavigationElement(
          icon: const Icon(Icons.home_outlined),
          selectedIcon: const Icon(Icons.home),
          label: 'Home',
          builder: () => const CustomListView(
            count: 11,
            color: Colors.pinkAccent,
          ),
        ),
        NavigationElement(
          icon: const Icon(Icons.group),
          label: 'Group',
          builder: () => const CustomListView(
            count:  e1,
            color: Colors.red,
          ),
          breakpointBasedBuilder: {
            Breakpoint.tablet: () => const CustomGridView(
              count:  e l,
              color: Colors.blue,
            )
          },
        ),
        NavigationElement(
          icon: const Icon(Icons.settings),
          label: 'Settings',
          builder: () => const CustomListView(
            count:  e e,
            color: Colors.amberAccent,
          ),
          breakpointBasedBuilder: {
            Breakpoint.desktop: () => const CustomGridView(
              count:  e e,
              color: Colors.orange,
            )
          },
        ),
        NavigationElement(
          icon: const Icon(Icons.account_circle),
          label: 'Profile',
          builder: () => const CustomListView(
            count:  e e,
            color: Colors.indigo,
          ),
        ),
      ],
    );
  }
}

更多关于Flutter自适应导航栏插件flutter_adaptive_navigation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,下面是一个关于如何使用 flutter_adaptive_navigation 插件的示例代码。这个插件允许你在 Flutter 应用中实现自适应导航栏,从而在不同的设备和平台上提供一致的用户体验。

首先,你需要在你的 pubspec.yaml 文件中添加依赖:

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

然后运行 flutter pub get 来获取依赖。

接下来,你可以在你的 Flutter 应用中使用这个插件。以下是一个简单的示例,展示了如何设置一个自适应导航栏:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Adaptive Navigation Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Adaptive Navigation Demo'),
      ),
      body: Center(
        child: Text('Hello, Flutter!'),
      ),
      bottomNavigationBar: AdaptiveNavigationBar(
        // 设置导航栏的样式
        navigationBarStyle: NavigationBarStyle.cupertino,
        // 导航栏的图标和标签
        items: [
          AdaptiveNavigationBarItem(
            icon: Icon(Icons.home),
            title: Text('Home'),
          ),
          AdaptiveNavigationBarItem(
            icon: Icon(Icons.search),
            title: Text('Search'),
          ),
          AdaptiveNavigationBarItem(
            icon: Icon(Icons.library_books),
            title: Text('Library'),
          ),
          AdaptiveNavigationBarItem(
            icon: Icon(Icons.account_circle),
            title: Text('Profile'),
          ),
        ],
        // 当前选中的索引
        currentIndex: 0,
        // 点击事件处理
        onTap: (index) {
          // 在这里处理点击事件
          print('Navigated to index: $index');
        },
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的 Flutter 应用,并在主页的底部添加了一个自适应导航栏。AdaptiveNavigationBar 接受几个参数:

  • navigationBarStyle:指定导航栏的样式,可以是 NavigationBarStyle.cupertino(iOS 风格)或 NavigationBarStyle.material(Material 风格)。
  • items:一个包含 AdaptiveNavigationBarItem 的列表,每个项代表导航栏中的一个按钮。
  • currentIndex:当前选中的项的索引。
  • onTap:点击事件处理函数,当点击某个项时调用。

你可以根据需要调整这些参数,以实现适合你应用的导航栏。

希望这个示例能帮到你!如果你有其他问题,欢迎继续提问。

回到顶部