【问题标题】:How can i get WhatsApp like menu from BottomNavigationBar using flutter?如何使用颤振从 BottomNavigationBar 获取类似 WhatsApp 的菜单?
【发布时间】:2020-05-30 06:59:10
【问题描述】:

我正在尝试为我的一个用 Flutter 编写的应用程序从 BottomNavigationBar 设计一个类似 WhatsApp 的菜单。

我曾尝试使用 PopupMenuButton 类进行设计,但它也会覆盖 BottomNavigation。

我需要一个类似于底部导航栏上方的弹出菜单,如下所示

【问题讨论】:

  • 没有任何小部件可以完全满足您的需求。你需要成功。如果您需要帮助,您需要先尝试自己创建它,然后用户将帮助您调试您可能发现的问题。 StackOverflow 不是编码服务。
  • @JoãoSoares 感谢您的有用建议,我在尝试了几件事后来到这里,我也在那里提到了它,这里我不希望有人为我编写代码,我正在寻求建议.,还是谢谢
  • 这正是重点。 StackOverflow 不是寻求建议的正确论坛。请查看指南:stackoverflow.com/help/how-to-ask

标签: flutter flutter-layout


【解决方案1】:

PopupMenuButton 在按钮上方打开一个菜单,因此它挡住了底部栏。我找到了一种解决方法,而不是使用PopupMenuButton,尝试使用BottomAppBarIconButton 作为其中一个孩子,然后使用showBottomSheet,这样它就不会阻止BottomAppBar

注意:我的大部分代码只是模仿图像布局的占位符,您需要重写大部分代码以满足您的需求。关键是使用showBottomSheet 来解决您的问题。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

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

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      bottomNavigationBar: BottomAppBar(
        child: Container(
          height: 70,
          child: Row(
            mainAxisSize: MainAxisSize.max,
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              Icon(Icons.home),
              Icon(Icons.alarm),
              MyMiddleIcon(),
              Icon(Icons.album),
              Icon(Icons.assignment_ind),
            ],
          ),
        ),
        shape: CircularNotchedRectangle(),
        color: Colors.blueGrey[50],
      ),
    );
  }
}

class MyMiddleIcon extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return IconButton(
        icon: Icon(Icons.add),
        onPressed: () {
          showBottomSheet(
              context: context,
              builder: (context) => Container(
                color: Colors.red[100],
                height: 250,
                width: double.infinity,
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: <Widget>[
                        Icon(Icons.home),
                        Icon(Icons.hot_tub),
                        Icon(Icons.hourglass_empty),
                      ],
                    ),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: <Widget>[
                        Icon(Icons.home),
                        Icon(Icons.hot_tub),
                        Icon(Icons.hourglass_empty),
                      ],
                    ),
                  ],
                ),
              ));
        });
  }
}

【讨论】:

  • 非常感谢您的回答和时间,我正在使用带有 BottomNavigationBar 的网页浏览,但它给出了问题,您的回答帮助我了解了我的问题并解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多