Flutter动画 - 如何以编程方式触发OpenContainer?

4

我使用了flutter的动画包:https://pub.dev/packages/animations

我试图在initState函数中自动打开容器,延迟3秒钟。是否有任何触发容器的编程方式?我找不到控制器或类似实现...

@override
  Widget build(BuildContext context) { 

    OpenContainer(
                transitionDuration: Duration(milliseconds: 400),
                transitionType: _transitionType,
                openBuilder: (BuildContext context, VoidCallback _) {
                  return AddRouteParent();
                },
                closedElevation: 6.0,
                closedShape: const RoundedRectangleBorder(
                  borderRadius: BorderRadius.all(
                    Radius.circular(_fabDimension / 2),
                  ),
                ),
                closedColor: Color(0xff17c387),
                closedBuilder:
                    (BuildContext context, VoidCallback openContainer) {
                  return Showcase(
                    shapeBorder: CircleBorder(),
                    radius: BorderRadius.all(Radius.circular(30)),
                    overlayPadding: EdgeInsets.all(5),
                    key: _five,
                    description:
                        'Hier kannst du dir deine\neigene Route erstellen.',
                    child: SizedBox(
                      height: _fabDimension,
                      child: Padding(
                        padding: const EdgeInsets.fromLTRB(12, 0, 20, 0),
                        child: Row(mainAxisSize: MainAxisSize.min, children: [
                          Icon(
                            Icons.add,
                            color: Colors.white,
                          ),
                          SizedBox(width: 12),
                          Text("Erstellen",
                              style:
                                  TextStyle(color:     Colors.white, fontSize: 18))
                        ]),
                      ),
                    ),
                  );
                });
  }


你尝试过使用以下代码吗:"Future.delayed(const Duration(seconds: 3)).then((_) { //OpenContainer(); });"? - mario francois
OpenContainer是我的build方法中的一个小部件。我知道Future.delayed并会使用它,但我不知道哪个方法可以在那里触发? - Martin Seubert
在一个简单的方法或函数中,它应该像这样触发:"Future<void> showProgressCreditCard(BuildContext context) async {await showGeneralDialog<String>(...)}" - mario francois
但它是否仍将具有典型的OpenContainer转换或仅打开对话框?FAB应该仍然从右下角变形为全屏页面。 - Martin Seubert
1
这个包没有那个参数 https://codelabs.developers.google.com/codelabs/material-motion-flutter#5。但是通过导航,您可以使用Future.delayed进行延迟... Navigator.of(context).push(MaterialPageRoute<void>(... 对吧? - mario francois
如果我只是将AddRouteParent()作为新路由推送,动画不会被触发。该路由只是在当前导航器的顶部使用默认转换进行推送。 - Martin Seubert
1个回答

3

我之前解决过这个问题,只需像这样从closedBuilder中存储action参数:

closedBuilder: (BuildContext context, void Function() action) {
                  _openContainer = action;

然后在其他地方像这样调用它:_openContainer.call();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接