【问题标题】:How to add sidebar in flutter如何在颤振中添加侧边栏
【发布时间】:2021-10-12 20:51:02
【问题描述】:

我正在尝试学习如何设计侧边栏,我在网上找到了这张图片。我已经成功开发了一个简单的侧边栏,但无法完全像这样设计。由于我是 Flutter 的新手,所以我不知道如何在点击时添加此曲线形状和动画。这是我需要你帮助的地方。

这是我到目前为止所做的:

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key key}) : super(key: key);

  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int _selectedIndex = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text(
          'Home',
          style: TextStyle(color: Colors.white),
        ),
        backgroundColor: Colors.red.withOpacity(0.3),
      ),
      backgroundColor: Colors.red.withOpacity(0.3),
      body: Row(
        children: [
          sideBar(),
        ],
      ),
    );
  }

  Widget sideBar() {
    final List<String> items = ['Snacks', 'Drinks', 'Food'];
    return Container(
      color: Colors.white,
      child: Column(
        children: items
            .map((e) => Padding(
                  padding: const EdgeInsets.all(14.0),
                  child: GestureDetector(
                    onTap: () {
                      setState(() {
                        _selectedIndex = items.indexOf(e);
                      });
                    },
                    child: Row(
                      children: [
                        RotatedBox(quarterTurns: 3, child: Text(e)),
                        if (items.indexOf(e) == _selectedIndex)
                          const Padding(
                            padding: EdgeInsets.only(left: 8.0),
                            child: CircleAvatar(
                              backgroundColor: Colors.deepOrange,
                              radius: 5.0,
                            ),
                          )
                      ],
                    ),
                  ),
                ))
            .toList(),
      ),
    );
  }
}

这是输出:

【问题讨论】:

    标签: flutter android-studio dart user-interface sidebar


    【解决方案1】:

    而不是这个:

    if (items.indexOf(e) == _selectedIndex)
        const Padding(
        padding: EdgeInsets.only(left: 8.0),
        child: CircleAvatar(
            backgroundColor: Colors.deepOrange,
            radius: 5.0,
        ),
    )
    

    使用类似下面的东西。

    Padding(
        padding: EdgeInsets.only(left: 8.0),
        child: CircleAvatar(
            backgroundColor: items.indexOf(e) == _selectedIndex 
                ? Colors.deepOrange 
                : Colors.transparent,
            radius: 5.0,
        ),
    )
    

    此代码只会更改选择指示器的颜色,而不是每次添加和更改布局。

    对侧边栏项目的颜色做同样的事情。

    RotatedBox(
        quarterTurns: 3, 
        child: Text(
            e, 
            style: TextStyle(
                color: items.indexOf(e) == _selectedIndex 
                    ? Colors.black 
                    : Colors.grey
            ),
        )
    ),
    

    你在找吗?

    【讨论】:

    • 我想在所选点下方添加一条曲线,以便在点击项目时在点下方显示一条动画曲线,如上图所示。
    • 查看下面的链接。可能CustomPaint 就是您要找的东西。 youtube.com/watch?v=kp14Y4uHpHs
    • 你能分享一个我可以学习的类似代码sn-p吗?由于CustomPaint 似乎是一个复杂的话题,任何帮助将不胜感激)
    • 说实话我从来没有用过CustomPaint。你可以试试下面的链接。那边有人想画一个半圆。也许您需要类似于半圆的东西来垂直设置动画(取决于所选菜单项的位置)。 stackoverflow.com/questions/57748469/…
    • 我找到了一个程序来设计形状并生成颤振代码。我认为它可以帮助你很多。 shapemaker.web.app/#
    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2019-02-17
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多