df_pwa_utils 0.4.1 copy "df_pwa_utils: ^0.4.1" to clipboard
df_pwa_utils: ^0.4.1 copied to clipboard

Web utilities for progressive web applications (PWA). No-ops on non-web platforms.

pub tag buymeacoffee sponsor patreon discord instagram license


Summary #

Small Flutter utilities for progressive web apps. Everything no-ops on non-web platforms (including WASM), so you can call it unconditionally from cross-platform code:

  • setToUrlPathStrategy() — switches Flutter to the standard PathUrlStrategy so URLs look like /home instead of /#/home. Safe to call repeatedly; swallows the "already set" error from hot reload.
  • platformNavigator — singleton that wraps window.history and popstate for pushing/replacing the URL and listening for back/forward navigation. All paths are routed through Flutter's installed UrlStrategy, and <base href="..."> is stripped from popped URLs.
  • normalizePathQuery() — extracts and tidies the path + query from any URL string: strips the trailing slash, drops the fragment, and returns null for empty input.

Installation #

flutter pub add df_pwa_utils

Usage #

Set the URL path strategy #

Call once before runApp to remove the # from URLs on web:

import 'package:df_pwa_utils/df_pwa_utils.dart';

void main() {
  setToUrlPathStrategy();
  runApp(const MyApp());
}
import 'package:df_pwa_utils/df_pwa_utils.dart';

// Read the current URL (null on non-web).
final url = platformNavigator.getCurrentUrl();

// Push or replace history entries.
platformNavigator.pushState(Uri.parse('/welcome'));
platformNavigator.replaceState(Uri.parse('/home'));

// React to browser back/forward.
void onPop(Uri url) {
  // url is app-relative (base href stripped, fragment preserved).
  debugPrint('Popped to: ${url.path}');
}
platformNavigator.addStateCallback(onPop);

// Stop listening; the underlying popstate subscription is cancelled
// automatically once the last callback is removed.
platformNavigator.removeStateCallback(onPop);

Normalize a path + query #

normalizePathQuery('/home/');                       // '/home'
normalizePathQuery('/search/?q=hello');             // '/search?q=hello'
normalizePathQuery('https://example.com/x?id=42');  // '/x?id=42'
normalizePathQuery('/docs#section');                // '/docs'
normalizePathQuery('');                             // null

🔍 For more information, refer to the API reference.


💬 Contributing and Discussions #

This is an open-source project, and we warmly welcome contributions from everyone, regardless of experience level. Whether you're a seasoned developer or just starting out, contributing to this project is a fantastic way to learn, share your knowledge, and make a meaningful impact on the community.

☝️ Ways you can contribute #

  • Find us on Discord: Feel free to ask questions and engage with the community here: https://discord.gg/gEQ8y2nfyX.
  • Share your ideas: Every perspective matters, and your ideas can spark innovation.
  • Help others: Engage with other users by offering advice, solutions, or troubleshooting assistance.
  • Report bugs: Help us identify and fix issues to make the project more robust.
  • Suggest improvements or new features: Your ideas can help shape the future of the project.
  • Help clarify documentation: Good documentation is key to accessibility. You can make it easier for others to get started by improving or expanding our documentation.
  • Write articles: Share your knowledge by writing tutorials, guides, or blog posts about your experiences with the project. It's a great way to contribute and help others learn.

No matter how you choose to contribute, your involvement is greatly appreciated and valued!

☕ We drink a lot of coffee... #

If you're enjoying this package and find it valuable, consider showing your appreciation with a small donation. Every bit helps in supporting future development. You can donate here: https://www.buymeacoffee.com/dev_cetera

LICENSE #

This project is released under the MIT License. See LICENSE for more information.

1
likes
150
points
138
downloads

Documentation

API reference

Publisher

verified publisherdev-cetera.com

Weekly Downloads

Web utilities for progressive web applications (PWA). No-ops on non-web platforms.

Homepage
Repository (GitHub)
View/report issues

Topics

#path-strategy #web #pwa #url #utility

Funding

Consider supporting this project:

www.buymeacoffee.com
www.patreon.com
github.com

License

MIT (license)

Dependencies

flutter, flutter_web_plugins, web

More

Packages that depend on df_pwa_utils