Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在FloatingActionButton停靠在Flatter中时弹出菜单_Flutter - Fatal编程技术网

Flutter 如何在FloatingActionButton停靠在Flatter中时弹出菜单

Flutter 如何在FloatingActionButton停靠在Flatter中时弹出菜单,flutter,Flutter,我想创建一个底部栏,其中有一个中间停靠的FloatingActionButton,单击该按钮时,会弹出许多其他导航按钮 按钮和弹出按钮工作正常,但我无法单击当时可见的按钮。 在我实现了这个按钮的页面上,在折叠的按钮下面有一个ListView,我似乎通过按钮点击ListView元素 所以我的问题是: 我如何让它们成为可点击的 这是我的密码: class MainNavigationButton extends StatefulWidget { @override _MainNavigati

我想创建一个底部栏,其中有一个中间停靠的FloatingActionButton,单击该按钮时,会弹出许多其他导航按钮

按钮和弹出按钮工作正常,但我无法单击当时可见的按钮。 在我实现了这个按钮的页面上,在折叠的按钮下面有一个ListView,我似乎通过按钮点击ListView元素

所以我的问题是: 我如何让它们成为可点击的

这是我的密码:

class MainNavigationButton extends StatefulWidget {
  @override
  _MainNavigationButtonState createState() => _MainNavigationButtonState();
}

class _MainNavigationButtonState extends State<MainNavigationButton> with SingleTickerProviderStateMixin {
  AnimationController animationController;
  Animation positionAnimation;
  Animation rotationAnimation;

  @override
  void initState() {
    animationController =
        AnimationController(vsync: this, duration: Duration(milliseconds: 250));
    degOneTranslationAnimation =
        Tween(begin: 0.0, end: 1.0).animate(animationController);
    rotationAnimation =
        Tween<double>(begin: 180.0, end: 0.0).animate(CurvedAnimation(
      parent: animationController,
      curve: Curves.easeOut,
    ));

    super.initState();

    animationController.addListener(() {
      setState(() {});
    });
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        CoinFlipButton(context),
        DiceRollButton(context),
        HauntRevealButton(context),
        MenuButton(
          color: backgroundColor,
          width: 60,
          height: 60,
          icon: Icon(
            Icons.menu,
            color: Colors.white,
          ),
          onPressed: () {
            if (animationController.isCompleted)
              animationController.reverse();
            else
              animationController.forward();
          },
        ),
      ],
    );
  }

  Widget CoinFlipButton(context) {
    return Transform.translate(
      offset: Offset.fromDirection(
          GetRadiansFromDegree(-86), positionAnimation.value * 60),
      child: Transform(
        transform:
            Matrix4.rotationZ(GetRadiansFromDegree(rotationAnimation.value))
              ..scale(positionAnimation.value),
        alignment: Alignment.center,
        child: MenuButton(
          color: backgroundColor,
          width: 50,
          height: 50,
          icon: Icon(
            Icons.attach_money,
            color: Colors.white,
          ),
          onPressed: () {
            debugPrint("Coinflip");
            Navigator.of(context)
                .push(MaterialPageRoute(builder: (context) => CoinFlip()));
          },
        ),
      ),
    );
  }

  Widget DiceRollButton(context) {
    return Transform.translate(
      offset: Offset.fromDirection(
          GetRadiansFromDegree(-20), positionAnimation.value * 70),
      child: Transform(
        transform:
            Matrix4.rotationZ(GetRadiansFromDegree(rotationAnimation.value))
              ..scale(positionAnimation.value),
        alignment: Alignment.center,
        child: MenuButton(
          color: backgroundColor,
          width: 50,
          height: 50,
          icon: Icon(
            Icons.keyboard,
            color: Colors.white,
          ),
          onPressed: () {},
        ),
      ),
    );
  }

  Widget HauntRevealButton(context) {
    return Transform.translate(
      offset: Offset.fromDirection(
          GetRadiansFromDegree(-157), positionAnimation.value * 60),
      child: Transform(
        transform:
            Matrix4.rotationZ(GetRadiansFromDegree(rotationAnimation.value))
              ..scale(positionAnimation.value),
        alignment: Alignment.center,
        child: MenuButton(
          color: backgroundColor,
          width: 50,
          height: 50,
          icon: Icon(
            Icons.translate,
            color: Colors.white,
          ),
          onPressed: () {
            debugPrint("Haunt button pressed");
          },
        ),
      ),
    );
  }

  double GetRadiansFromDegree(double degree) {
    double unitRadians = 57.295779513;
    return degree / unitRadians;
  }
}

class MenuButton extends StatelessWidget {
  final double width;
  final double height;
  final Icon icon;
  final Color color;
  final Function onPressed;

  MenuButton({this.width, this.height, this.icon, this.color, this.onPressed});

  @override
  Widget build(BuildContext context) {
    return Container(
      width: width,
      height: height,
      child: MaterialButton(
        shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(20)),
        color: color,
        child: icon,
        onPressed: onPressed,
      ),
    );
  }
}
我不希望在底部导航栏中有单独的按钮,因为这与我在其他一些页面上的设计相冲突,在这些页面中,我使用TabBarView,底部有导航,并且嵌入了此MainMenuButton

Scaffold(
  [other stuff]
  floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
  floatingActionButton: MainNavigationButton(),
  bottomNavigationBar: BottomBar(child: Container(height: 60, color: backgroundColor))
  //Or a BottomAppBar with a TabBar on some pages
)