{"id":13465589,"url":"https://github.com/RafaelBarbosatec/hidden_drawer_menu","last_synced_at":"2025-03-25T16:32:39.609Z","repository":{"id":46072555,"uuid":"158090052","full_name":"RafaelBarbosatec/hidden_drawer_menu","owner":"RafaelBarbosatec","description":"Hidden Drawer Menu is a library for adding a beautiful drawer mode menu feature with perspective animation.","archived":false,"fork":false,"pushed_at":"2024-03-19T15:19:18.000Z","size":34530,"stargazers_count":354,"open_issues_count":17,"forks_count":56,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-19T23:33:25.526Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RafaelBarbosatec.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-18T14:05:28.000Z","updated_at":"2025-02-26T21:20:06.000Z","dependencies_parsed_at":"2024-06-19T15:32:47.883Z","dependency_job_id":"f52cf0a1-d873-44fb-8e1d-12d3c3d86329","html_url":"https://github.com/RafaelBarbosatec/hidden_drawer_menu","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RafaelBarbosatec%2Fhidden_drawer_menu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RafaelBarbosatec%2Fhidden_drawer_menu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RafaelBarbosatec%2Fhidden_drawer_menu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RafaelBarbosatec%2Fhidden_drawer_menu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RafaelBarbosatec","download_url":"https://codeload.github.com/RafaelBarbosatec/hidden_drawer_menu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245500443,"owners_count":20625580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T15:00:32.243Z","updated_at":"2025-03-25T16:32:38.702Z","avatar_url":"https://github.com/RafaelBarbosatec.png","language":"Dart","funding_links":["https://www.buymeacoffee.com/rafaelbarbosa"],"categories":["Components","Dart","组件","UI [🔝](#readme)","Packages"],"sub_categories":["UI"],"readme":"[![pub package](https://img.shields.io/pub/v/hidden_drawer_menu.svg)](https://pub.dartlang.org/packages/hidden_drawer_menu)\n[![buymeacoffee](https://i.imgur.com/aV6DDA7.png)](https://www.buymeacoffee.com/rafaelbarbosa)\n\n# Hidden Drawer Menu\n\nHidden Drawer Menu is a library for adding a beautiful drawer mode menu feature with perspective animation.\n\nYou can use a pre-defined menu or make a fully customized menu.\n\n![Usage of the hidden_drawer_menu widget on an android device](https://github.com/RafaelBarbosatec/hidden_drawer_menu/blob/master/imgs/example.gif)\n\n\n[Download APK Example](https://github.com/RafaelBarbosatec/hidden_drawer_menu/blob/master/apk/model.apk)\n\n\n# Use with default menu\n\n```Dart\n\nimport 'package:hidden_drawer_menu/model/hidden_drawer_menu.dart';\n\nvoid main() =\u003e runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      theme: ThemeData(\n        primarySwatch: Colors.blue,\n      ),\n      home: MyHomePage(),\n    );\n  }\n}\n\nclass MyHomePage extends StatefulWidget {\n  MyHomePage({Key key}) : super(key: key);\n\n  @override\n  _MyHomePageState createState() =\u003e _MyHomePageState();\n}\n\nclass _MyHomePageState extends State\u003cMyHomePage\u003e {\n  List\u003cScreenHiddenDrawer\u003e itens = new List();\n\n  @override\n  void initState() {\n    itens.add(new ScreenHiddenDrawer(\n        new ItemHiddenMenu(\n          name: \"Screen 1\",\n          baseStyle: TextStyle( color: Colors.white.withOpacity(0.8), fontSize: 28.0 ),\n          colorLineSelected: Colors.teal,\n        ),\n        FirstSreen()));\n\n    itens.add(new ScreenHiddenDrawer(\n        new ItemHiddenMenu(\n          name: \"Screen 2\",\n          baseStyle: TextStyle( color: Colors.white.withOpacity(0.8), fontSize: 28.0 ),\n          colorLineSelected: Colors.orange,\n        ),\n        SecondSreen()));\n\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n\n    return HiddenDrawerMenu(\n      backgroundColorMenu: Colors.blueGrey,\n      backgroundColorAppBar: Colors.cyan,\n      screens: itens,\n        //    typeOpen: TypeOpen.FROM_RIGHT,\n        //    disableAppBarDefault: false,\n        //    enableScaleAnimin: true,\n        //    enableCornerAnimin: true,\n        //    slidePercent: 80.0,\n        //    verticalScalePercent: 80.0,\n        //    contentCornerRadius: 10.0,\n        //    iconMenuAppBar: Icon(Icons.menu),\n        //    backgroundContent: DecorationImage((image: ExactAssetImage('assets/bg_news.jpg'),fit: BoxFit.cover),\n        //    whithAutoTittleName: true,\n        //    styleAutoTittleName: TextStyle(color: Colors.red),\n        //    actionsAppBar: \u003cWidget\u003e[],\n        //    backgroundColorContent: Colors.blue,\n        //    elevationAppBar: 4.0,\n        //    tittleAppBar: Center(child: Icon(Icons.ac_unit),),\n        //    enableShadowItensMenu: true,\n        //    backgroundMenu: DecorationImage(image: ExactAssetImage('assets/bg_news.jpg'),fit: BoxFit.cover),\n    );\n    \n  }\n}\n\n```\n\n# Use with full customization menu\n\n```Dart\n\nimport 'package:hidden_drawer_menu/model/hidden_drawer_menu.dart';\n\nvoid main() =\u003e runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n  // This widget is the root of your application.\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      theme: ThemeData(\n        primarySwatch: Colors.blue,\n      ),\n      home: SimpleHiddenDrawer(\n        menu: Menu(),\n        screenSelectedBuilder: (position,controller) {\n          \n          Widget screenCurrent;\n          \n          switch(position){\n            case 0 : screenCurrent = Screen1(); break;\n            case 1 : screenCurrent = Screen2(); break;\n            case 2 : screenCurrent = Screen3(); break;\n          }\n          \n          return Scaffold(\n            backgroundColor: backgroundColorContent,\n            appBar: AppBar(\n              leading: IconButton(\n                  icon: Icon(Icons.menu),\n                  onPressed: () {\n                    controller.toggle();\n                  }),\n            ),\n            body: screenCurrent,\n          );\n          \n        },\n      ),\n    );\n  }\n}\n\nclass Menu extends StatefulWidget {\n  @override\n  _SecondSreenState createState() =\u003e _MenuState();\n}\n\nclass _MenuState extends State\u003cSecondSreen\u003e {\n\n  SimpleHiddenDrawerController controller;\n\n  @override\n  void didChangeDependencies() {\n    controller = SimpleHiddenDrawerController.of(context);\n    super.didChangeDependencies();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      width: double.maxFinite,\n      height: double.maxFinite,\n      color: Colors.cyan,\n      padding: const EdgeInsets.all(8.0),\n      child: Center(\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          children: \u003cWidget\u003e[\n            RaisedButton(\n              onPressed: () {\n                controller.setSelectedMenuPosition(0);\n              },\n              child: Text(\"Menu 1\"),\n            ),\n            RaisedButton(\n              onPressed: () {\n                controller.setSelectedMenuPosition(1);\n              },\n              child: Text(\"Menu 2\"),\n            )\n          ],\n        ),\n      ),\n    );\n  }\n}\n```\n\n# Actions\nThis actions is only accessible by the children of  HiddenDrawerMenu or SimpleHiddenDrawer.\n\n## Select item menu\n\n```Dart\nSimpleHiddenDrawerController.of(context).setSelectedMenuPosition(0);\n```\n\n## Toggle menu (if opened will close, if closed will open)\n\n```Dart\nSimpleHiddenDrawerController.of(context).toggle();\n```\n\n## Open\n\n```Dart\nSimpleHiddenDrawerController.of(context).open();\n```\n\n## Close\n\n```Dart\nSimpleHiddenDrawerController.of(context).close();\n```\n\n## Listen selected position\n\n```Dart\nfinal controller = SimpleHiddenDrawerController.of(context);\ncontroller.addListener((){\n  print(controller.position);\n});\n```\n\n## Listen to menu status (closed,opening,open,closing)\n\n```Dart\nfinal controller = SimpleHiddenDrawerController.of(context);\ncontroller.addListener((){\n  print(controller.state);\n});\n```\n\n## If you want to use only the widget responsible for the animation, it is now available as AnimatedDrawerContent\n\n![Example usage AnimatedDrawerContent](https://github.com/RafaelBarbosatec/hidden_drawer_menu/blob/develop/imgs/exampleAnimated.gif)\n\n```Dart\nAnimatedDrawerController controller = AnimatedDrawerController(\n  vsync: this,\n  animationCurve:Curves.decelerate,\n  duration:const Duration(milliseconds: 350,\n);\n\nreturn AnimatedDrawerContent(\n  controller: controller,\n  whithPaddingTop: false, //(optional) default = false // Add padding top in de gesture equals Heigth of the AppBar\n  whithShadow: false, //(optional) default = false\n  isDraggable: true, //(optional) default = true\n  child: Screen(),\n);\n```\nYou can control actions by controller such as:\n\n```Dart\ncontroller.toggle() // Open or Close\ncontroller.open()\ncontroller.close()\ncontroller.move(percent) // moves to a specific position from 0 to 1 (0 = fully enclosed, 1 = fully opened)\n```\n\n\n# Available settings\n\n## Menu\n* change BackgroundColor\n* set DecorationImage backgroud\n* enable Shadow above itens\n\n## Itens Menu\n* change colorText when selected\n* change colorText when unselected\n* change color lineleft selected\n\n## AppBar\n* change menu icon\n* change elavation\n* change BackgroundColor\n* set AutoTittleName\n* set actions\n* set widget in tittleAppBar\n\n## Content\n* change BackgroundColor\n* enable dragable\n* change curve animation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRafaelBarbosatec%2Fhidden_drawer_menu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRafaelBarbosatec%2Fhidden_drawer_menu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRafaelBarbosatec%2Fhidden_drawer_menu/lists"}