代码之家  ›  专栏  ›  技术社区  ›  Greg Noe

如何在页面加载时打开脚手架的抽屉?

  •  2
  • Greg Noe  · 技术社区  · 6 年前

    登录到我们的颤振应用程序打开的仪表板有一个脚手架与抽屉里的菜单项目。

    我知道 Scaffold.of(context).openDrawer() 但我不确定将此代码放在何处,以便它在build()方法之后立即运行。我也不知道抽屉或脚手架上的任何字段会在抽屉打开时加载。

    3 回复  |  直到 6 年前
        1
  •  5
  •   diegoveloper    6 年前

    您需要在第一帧加载后等待。

        _onLayoutDone(_) {
           //your logic here
    
        }
    
        @override
        void initState() {
          WidgetsBinding.instance.addPostFrameCallback(_onLayoutDone);
          super.initState();
        }
    

    https://medium.com/@diegoveloper/flutter-widget-size-and-position-b0a9ffed9407

        2
  •  3
  •   CopsOnRoad    5 年前

    覆盖 initState .

    @override
    void initState() {
      super.initState();
    
      // use this
      Timer.run(() => Scaffold.of(context).openDrawer());
    }
    
        3
  •  1
  •   WitVault    6 年前

    isDrawerBeingShown .

    void _showDrawer(BuildContext context) async 它必须标记为异步,以便在生成方法之后运行。

    创建 showDrawerUtility 方法在需要时按需显示抽屉。

    编辑:

    使用GlobalKey

    GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey();
    
    
    class MainScreen extends StatefulWidget {
    
      MainScreen({Key key }) : super(key: key);
    
      @override
      State<MainScreen> createState() => new MainScreenState();
    }
    
    class MainScreenState extends State<MainScreen> {
      bool isDrawerBeingShown;
    
      @override
      void initState() {
        super.initState();
        isDrawerBeingShown = false;
        _showDrawer(context);
      }
    
      void _showDrawer(BuildContext context) async {
        if(!isDrawerBeingShown) {
         _scaffoldKey.currentState.openDrawer();
          setState(() => isDrawerBeingShown = true);
        }
      }
     @override
      Widget build(BuildContext context) { // build method goes here}
    }