Flutter 可折叠边栏

老孟Flutter

共 13017字,需浏览 27分钟

 ·

2021-04-30 09:34


一个可在Flutter应用中创建可折叠的侧边栏导航抽屉的 Flutter 插件。

原文链接:https://medium.com/flutterdevs/foldable-sidebar-in-flutter-7addcfb8304f

移动应用程序具有多种方法来处理屏幕之间的导航,例如导航抽屉,底部导航栏,滑动选项卡等。

Flutter使开发人员可以轻松使用导航抽屉,而无需其他人就无需编写大部分代码。

在本博客中,我们将探讨Flutter中 的**可折叠侧边栏。**我们将实现一个可折叠的侧边栏演示程序,并在flutter应用程序中使用foldable_sidebar包创建一个可折叠的侧边栏导航抽屉。

foldable_sidebar 地址:https://pub.dev/packages/foldable_sidebar

可折叠边栏

这是一个易于使用的软件包,用于向Flutter应用程序添加可折叠的Flutter导航侧边栏抽屉。利用Material Design的移动应用程序有两个必不可少的导航选择。这些导航是“选项卡抽屉”。抽屉是选项卡的一种可选选择,因为有时移动应用程序没有足够的空间来帮助选项卡。

抽屉是不可见的侧屏。它是一个向左滑动的菜单,在大多数情况下,它包含应用程序中的重要连接,并且在显示时拥有一半的屏幕。


该演示视频展示了如何在Flutter中创建可折叠的侧边栏。它显示了在flutter应用程序中使用foldable_sidebar包可折叠的侧边栏将如何工作。它显示了当用户点击浮动操作按钮时,抽屉将以折叠方式显示/隐藏。它会显示在您的设备上。

实现

  1. 添加依赖

    将依赖项添加到pubspec.yaml文件。

    dependencies:
      flutter:
        sdk: flutter
      foldable_sidebar: ^1.0.0
  2. 导入

    import 'package:foldable_sidebar/foldable_sidebar.dart';
  3. 执行 flutter packages get 命令。

  4. 将创建一个可折叠侧边栏构建器状态的实例变量。

    FSBStatus _fsbStatus;

    在主体中,我们将实现FoldableSidebarBuilder()方法。在内部,我们将添加drawerBackgroundColor滑动到屏幕上时,是指抽屉的背景色。我们将添加抽屉方式,以创建一个CustomSidebarDrawer()类。我们将添加screenContents表示抽屉隐藏时,然后将显示此屏幕。我们将创建一个welcomeScreen()小部件。我们将深入定义以下代码。我们将添加状态均值以添加可折叠的侧边栏构建器状态实例变量。

    FoldableSidebarBuilder(
      drawerBackgroundColor: Colors.cyan[100],
      drawer: CustomSidebarDrawer(drawerClose: (){
      setState(() {
        _fsbStatus = FSBStatus.FSB_CLOSE;
      });
    },
    ),
      screenContents: welcomeScreen(),
      status: _fsbStatus,
    ),

    我们将深入定义**welcomeScreen()**小部件

    我们将返回一个容器小部件。在此小部件中,我们将添加中心小部件。在内部,我们将添加一个列小部件。在列小部件中,我们将添加两个文本,并且mainAxisAlignment为中心。

    Widget welcomeScreen() {
      return Container(
        color: Colors.black.withAlpha(50),
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text("Welcome To Flutter Dev's",
                style: TextStyle(fontSize: 25,color: Colors.white),
              ),
              SizedBox(height: 5,),
              Text("Click on FAB to Open Foldable Sidebar Drawer",
                style: TextStyle(fontSize: 18,color: Colors.white
                ),
              ),
            ],
          ),
        ),
      );
    }

    我们将添加一个FloatingActionButton()。在内部,我们将添加按钮的backgroundColor。我们将添加一个菜单图标和onPressed()方法。在此方法中,我们将定义setState()。当_fsbStatus等于FSBStatus.FSB_OPEN时,抽屉将关闭。否则,它们将打开。

    floatingActionButton: FloatingActionButton(
        backgroundColor:Colors.red[400],
        child: Icon(Icons.menu,
          color: Colors.white,
        ),
        onPressed: () {
          setState(() {
            _fsbStatus = _fsbStatus == FSBStatus.FSB_OPEN ?
            FSBStatus.FSB_CLOSE : FSBStatus.FSB_OPEN;
          });
        }),

定义**CustomSidebarDrawer()**类

final Function drawerClose;

const CustomSidebarDrawer({Key key, this.drawerClose}) : super(key: key);

我们将返回一个容器小部件。在此小部件中,我们将添加一个列小部件。在内部,我们将添加图像,文本和ListTile。我们将添加三个带有图标和文本的ListTile。

return Container(
  color: Colors.white,
  width: mediaQuery.size.width * 0.60,
  height: mediaQuery.size.height,
  child: Column(
    children: <Widget>[
      Container(
          width: double.infinity,
          height: 200,
          color: Colors.grey.withAlpha(30),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Image.asset(
                "assets/devs.jpg",
                width: 100,
                height: 100,
              ),
              SizedBox(
                height: 10,
              ),
              Text("Flutter Devs")
            ],
          )),
      ListTile(
        onTap: (){
          debugPrint("Tapped Profile");
        },
        leading: Icon(Icons.person),
        title: Text(
          "Your Profile",
        ),
      ),
      Divider(
        height: 1,
        color: Colors.grey,
      ),
      ListTile(
        onTap: () {
          debugPrint("Tapped settings");
        },
        leading: Icon(Icons.settings),
        title: Text("Settings"),
      ),
      Divider(
        height: 1,
        color: Colors.grey,
      ),

      ListTile(
        onTap: () {
          debugPrint("Tapped Log Out");
        },
        leading: Icon(Icons.exit_to_app),
        title: Text("Log Out"),
      ),
    ],
  ),
);

完整代码

import 'package:flutter/material.dart';
import 'package:flutter_foldable_sidebar_demo/custom_sidebar_drawer.dart';
import 'package:foldable_sidebar/foldable_sidebar.dart';

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen{
  FSBStatus _fsbStatus;

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        appBar: AppBar(
          automaticallyImplyLeading: false,
          backgroundColor: Colors.red[400],
          title: Text("Flutter Foldable Sidebar Demo") ,
        ),
        body: FoldableSidebarBuilder(
          drawerBackgroundColor: Colors.cyan[100],
          drawer: CustomSidebarDrawer(drawerClose: (){
            setState(() {
              _fsbStatus = FSBStatus.FSB_CLOSE;
            });
          },
          ),
          screenContents: welcomeScreen(),
          status: _fsbStatus,
        ),
        floatingActionButton: FloatingActionButton(
            backgroundColor:Colors.red[400],
            child: Icon(Icons.menu,
              color: Colors.white,
            ),
            onPressed: () {
              setState(() {
                _fsbStatus = _fsbStatus == FSBStatus.FSB_OPEN ?
                FSBStatus.FSB_CLOSE : FSBStatus.FSB_OPEN;
              });
            }),
      ),
    );
  }


  Widget welcomeScreen() {
    return Container(
      color: Colors.black.withAlpha(50),
      child: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text("Welcome To Flutter Dev's",
              style: TextStyle(fontSize: 25,color: Colors.white),
            ),
            SizedBox(height: 5,),
            Text("Click on FAB to Open Foldable Sidebar Drawer",
              style: TextStyle(fontSize: 18,color: Colors.white
              ),
            ),
          ],
        ),
      ),
    );
  }
}



你可能还喜欢


关注「老孟Flutter」
让你每天进步一点点


浏览 134
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报