flutter_home_widget 0.1.0
flutter_home_widget: ^0.1.0 copied to clipboard
A Flutter plugin for iOS home-screen widgets with App Group data sync, widget reload, deep-link callbacks, and device-lock state.
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_home_widget/flutter_home_widget.dart';
const _appGroup = 'group.com.example.flutterHomeWidget';
const _kPolicies = 'policies_list';
const _iOSWidgetKind = 'ExampleWidget';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterHomeWidget.setAppGroupId(_appGroup);
runApp(const ExampleApp());
}
class ExampleApp extends StatefulWidget {
const ExampleApp({super.key});
@override
State<ExampleApp> createState() => _ExampleAppState();
}
class _ExampleAppState extends State<ExampleApp> {
StreamSubscription<Uri>? _tapSub;
Uri? _lastTap;
@override
void initState() {
super.initState();
_checkInitialLaunch();
_tapSub = FlutterHomeWidget.widgetTaps.listen((uri) {
setState(() => _lastTap = uri);
});
}
Future<void> _checkInitialLaunch() async {
final uri = await FlutterHomeWidget.initialLaunchUri();
if (uri != null && mounted) setState(() => _lastTap = uri);
}
Future<void> _pushSample() async {
final payload = jsonEncode([
{'policyNumber': 'POL-001', 'daysRemaining': 12},
{'policyNumber': 'POL-002', 'daysRemaining': 45},
]);
await FlutterHomeWidget.saveData(_kPolicies, payload);
await FlutterHomeWidget.reloadWidget(iOSName: _iOSWidgetKind);
}
Future<void> _clear() async {
await FlutterHomeWidget.saveData<String>(_kPolicies, null);
await FlutterHomeWidget.reloadWidget(iOSName: _iOSWidgetKind);
}
@override
void dispose() {
_tapSub?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('flutter_home_widget example')),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
FilledButton(
onPressed: _pushSample,
child: const Text('Push sample data + reload widget'),
),
const SizedBox(height: 8),
OutlinedButton(
onPressed: _clear,
child: const Text('Clear widget data'),
),
const SizedBox(height: 24),
Text('Last widget tap:\n${_lastTap ?? '(none)'}'),
],
),
),
),
);
}
}