pwa_install_wasm 0.1.0
pwa_install_wasm: ^0.1.0 copied to clipboard
Prompt web users to install your Flutter app as a PWA. A WASM-compatible fork of pwa_install, built on dart:js_interop.
import 'package:flutter/material.dart';
import 'package:pwa_install_wasm/pwa_install_wasm.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
PWAInstall().setup(installCallback: () {
debugPrint('APP INSTALLED!');
});
runApp(MaterialApp(home: App()));
}
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeView(),
title: 'PWA Install',
);
}
}
class HomeView extends StatefulWidget {
const HomeView({super.key});
@override
State<HomeView> createState() => _HomeViewState();
}
class _HomeViewState extends State<HomeView> {
String? error;
@override
void initState() {
super.initState();
PWAInstall().onPromptAvailable = () {
if (mounted) setState(() {});
};
}
@override
void dispose() {
PWAInstall().onPromptAvailable = null;
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('Version: 6'),
Text('Launch Mode: ${PWAInstall().launchMode?.shortLabel}'),
Text('Has Install Prompt: ${PWAInstall().hasPrompt}'),
if (PWAInstall().installPromptEnabled)
ElevatedButton(
onPressed: () {
try {
PWAInstall().promptInstall_();
} catch (e) {
setState(() {
error = e.toString();
});
}
},
child: const Text('Install')),
if (error != null) Text(error!)
],
),
));
}
}