{"id":24614663,"url":"https://github.com/tkko/flutter_dismissible_page","last_synced_at":"2025-04-09T09:08:09.687Z","repository":{"id":42485449,"uuid":"338768304","full_name":"Tkko/Flutter_dismissible_page","owner":"Tkko","description":"Flutter page widget that is dismissed by swipe gestures, with Hero style animations, Inspired by Facebook and Instagram stories.","archived":false,"fork":false,"pushed_at":"2023-06-23T10:54:47.000Z","size":30038,"stargazers_count":161,"open_issues_count":14,"forks_count":41,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-07T09:09:29.341Z","etag":null,"topics":["animation","dismissible","flutter","flutter-package","flutter-ui","hero","swipe-to-dismiss","swipeable"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/dismissible_page","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/Tkko.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"ko_fi":"flutterman","custom":["https://www.buymeacoffee.com/fman"]}},"created_at":"2021-02-14T09:20:32.000Z","updated_at":"2025-04-01T10:10:21.000Z","dependencies_parsed_at":"2024-01-14T16:12:27.746Z","dependency_job_id":null,"html_url":"https://github.com/Tkko/Flutter_dismissible_page","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tkko%2FFlutter_dismissible_page","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tkko%2FFlutter_dismissible_page/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tkko%2FFlutter_dismissible_page/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tkko%2FFlutter_dismissible_page/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tkko","download_url":"https://codeload.github.com/Tkko/Flutter_dismissible_page/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248008630,"owners_count":21032556,"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":["animation","dismissible","flutter","flutter-package","flutter-ui","hero","swipe-to-dismiss","swipeable"],"created_at":"2025-01-24T21:17:50.388Z","updated_at":"2025-04-09T09:08:09.669Z","avatar_url":"https://github.com/Tkko.png","language":"Dart","funding_links":["https://ko-fi.com/flutterman","https://www.buymeacoffee.com/fman"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1 align=\"center\" style=\"font-size: 70px;\"\u003eFlutter Dismissible Page From \u003ca href=\"https://www.linkedin.com/in/thornike/\" target=\"_blank\"\u003eTornike\u003c/a\u003e \u003c/h1\u003e\n\n\u003c!--  Donations --\u003e\n \u003ca href=\"https://ko-fi.com/flutterman\"\u003e\n  \u003cimg width=\"300\" src=\"https://user-images.githubusercontent.com/26390946/161375567-9e14cd0e-1675-4896-a576-a449b0bcd293.png\"\u003e\n \u003c/a\u003e\n \u003cdiv align=\"center\"\u003e\n   \u003ca href=\"https://www.buymeacoffee.com/fman\"\u003e\n    \u003cimg width=\"150\" alt=\"buymeacoffee\" src=\"https://user-images.githubusercontent.com/26390946/161375563-69c634fd-89d2-45ac-addd-931b03996b34.png\"\u003e\n  \u003c/a\u003e\n   \u003ca href=\"https://ko-fi.com/flutterman\"\u003e\n    \u003cimg width=\"150\" alt=\"Ko-fi\" src=\"https://user-images.githubusercontent.com/26390946/161375565-e7d64410-bbcf-4a28-896b-7514e106478e.png\"\u003e\n  \u003c/a\u003e\n \u003c/div\u003e\n\u003c!--  Donations --\u003e\n\n[![Pub package](https://img.shields.io/pub/v/dismissible_page.svg)](https://pub.dev/packages/dismissible_page)\n[![Github starts](https://img.shields.io/github/stars/tkko/flutter_dismissible_page.svg?style=flat\u0026logo=github\u0026colorB=deeppink\u0026label=stars)](https://github.com/tkko/flutter_dismissible_page)\n[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://github.com/tenhobi/effective_dart)\n[![pub package](https://img.shields.io/badge/license-MIT-purple.svg)](https://opensource.org/licenses/MIT)\n\n\u003c/div\u003e\n\nFlutter widget that allows you to dismiss page to any direction, forget the boring back button and\nplain transitions.\n\n## Features:\n\n- Dismiss to any direction\n- Works with nested list view\n- Animating border\n- Animating background\n- Animating scale\n\n## Support\n\n#### PRs Welcome\n#### Discord [Channel](https://rebrand.ly/qwc3s0d)\n#### Don't forget to give it a star ⭐\n\n## Demo\n| [Live Demo](https://rebrand.ly/gw8nktq) | Multi Direction | Vertical |\n|--|--|--|\n| \u003ca href=\"https://rebrand.ly/gw8nktq\"\u003e\u003cimg width=\"300\" src=\"https://user-images.githubusercontent.com/26390946/156333539-29aefaf2-5f42-4414-8d8c-1ecbae40c377.png\"/\u003e\u003c/a\u003e | \u003cimg src=\"https://user-images.githubusercontent.com/26390946/161377483-78e5dbaf-678f-4381-a393-52af8180bbcb.gif\" /\u003e | \u003cimg src=\"https://user-images.githubusercontent.com/26390946/156391449-a9235d05-bc87-4f51-8a5d-50c44fd0c582.gif\"/\u003e |\n\n## Getting Started\n\n```dart\n\nconst imageUrl =\n    'https://user-images.githubusercontent.com/26390946/155666045-aa93bf48-f8e7-407c-bb19-bc247d9e12bd.png';\n\nclass FirstPage extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      backgroundColor: Color.fromRGBO(228, 217, 236, 1),\n      body: GestureDetector(\n        onTap: () {\n          // Use extension method to use [TransparentRoute]\n          // This will push page without route background\n          context.pushTransparentRoute(SecondPage());\n        },\n        child: Center(\n          child: SizedBox(\n            width: 200,\n            // Hero widget is needed to animate page transition\n            child: Hero(\n              tag: 'Unique tag',\n              child: Image.network(\n                imageUrl,\n                fit: BoxFit.cover,\n              ),\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass SecondPage extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return DismissiblePage(\n      onDismissed: () {\n        Navigator.of(context).pop();\n      },\n      // Note that scrollable widget inside DismissiblePage might limit the functionality\n      // If scroll direction matches DismissiblePage direction\n      direction: DismissiblePageDismissDirection.multi,\n      isFullScreen: false,\n      child: Hero(\n        tag: 'Unique tag',\n        child: Image.network(\n          imageUrl,\n          fit: BoxFit.cover,\n        ),\n      ),\n    );\n  }\n}\n```\n\n## Properties\n\n``` dart\n  const DismissiblePage({\n    required this.child,\n    required this.onDismissed,\n    this.onDragStart,\n    this.onDragEnd,\n    this.onDragUpdate,\n    this.isFullScreen = true,\n    this.disabled = false,\n    this.backgroundColor = Colors.black,\n    this.direction = DismissiblePageDismissDirection.vertical,\n    this.dismissThresholds = const \u003cDismissiblePageDismissDirection, double\u003e{},\n    this.dragStartBehavior = DragStartBehavior.down,\n    this.dragSensitivity = 0.7,\n    this.minRadius = 7,\n    this.minScale = .85,\n    this.maxRadius = 30,\n    this.maxTransformValue = .4,\n    this.startingOpacity = 1,\n    this.hitTestBehavior = HitTestBehavior.opaque,\n    this.reverseDuration = const Duration(milliseconds: 200),\n    Key? key,\n  }) : super(key: key);\n\n  /// Called when the widget has been dismissed.\n  final VoidCallback onDismissed;\n\n  /// Called when the user starts dragging the widget.\n  final VoidCallback? onDragStart;\n\n  /// Called when the user ends dragging the widget.\n  final VoidCallback? onDragEnd;\n\n  /// Called when the widget has been dragged. (0.0 - 1.0)\n  final ValueChanged\u003cDismissiblePageDragUpdateDetails\u003e? onDragUpdate;\n\n  /// If true widget will ignore device padding\n  /// [MediaQuery.of(context).padding]\n  final bool isFullScreen;\n\n  /// The minimum amount of scale widget can have while dragging\n  /// Note that scale decreases as user drags\n  final double minScale;\n\n  /// The minimum amount fo border radius widget can have\n  final double minRadius;\n\n  /// The maximum amount of border radius widget can have while dragging\n  /// Note that radius increases as user drags\n  final double maxRadius;\n\n  /// The amount of distance widget is able to drag. value (0.0 - 1.0)\n  final double maxTransformValue;\n\n  /// If true the widget will ignore gestures\n  final bool disabled;\n\n  /// Widget that should be dismissed\n  final Widget child;\n\n  /// Background color of [DismissiblePage]\n  final Color backgroundColor;\n\n  /// The amount of opacity [backgroundColor] will have when start dragging the widget.\n  final double startingOpacity;\n\n  /// The direction in which the widget can be dismissed.\n  final DismissiblePageDismissDirection direction;\n\n  /// The offset threshold the item has to be dragged in order to be considered\n  /// dismissed. default is [_kDismissThreshold], value (0.0 - 1.0)\n  final Map\u003cDismissiblePageDismissDirection, double\u003e dismissThresholds;\n\n  /// Represents how much responsive dragging the widget will be\n  /// Doesn't work on [DismissiblePageDismissDirection.multi]\n  final double dragSensitivity;\n\n  /// Determines the way that drag start behavior is handled.\n  final DragStartBehavior dragStartBehavior;\n\n  /// The amount of time the widget will spend returning to initial position if widget is not dismissed after drag\n  final Duration reverseDuration;\n\n  /// How to behave during hit tests.\n  ///\n  /// This defaults to [HitTestBehavior.opaque].\n  final HitTestBehavior hitTestBehavior;\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkko%2Fflutter_dismissible_page","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftkko%2Fflutter_dismissible_page","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkko%2Fflutter_dismissible_page/lists"}