Initial iOS widget target

This commit is contained in:
2024-12-14 18:18:13 +08:00
parent df18370bde
commit 026a4dfb27
22 changed files with 608 additions and 9 deletions

View File

@ -1,9 +1,11 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:home_widget/home_widget.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:surface/providers/sn_network.dart';
import 'package:surface/providers/widget.dart';
import 'package:surface/types/account.dart';
class UserProvider extends ChangeNotifier {
@ -11,16 +13,18 @@ class UserProvider extends ChangeNotifier {
SnAccount? user;
late final SnNetworkProvider _sn;
late final HomeWidgetProvider _home;
UserProvider(BuildContext context) {
_sn = context.read<SnNetworkProvider>();
_home = context.read<HomeWidgetProvider>();
}
Future<String?> get atk async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString(kAtkStoreKey);
}
UserProvider(BuildContext context) {
_sn = context.read<SnNetworkProvider>();
}
Future<void> initialize() async {
final prefs = await SharedPreferences.getInstance();
final value = prefs.getString(kAtkStoreKey);
@ -29,6 +33,7 @@ class UserProvider extends ChangeNotifier {
refreshUser().then((value) {
if (value != null) {
log('Logged in as @${value.name}');
_home.saveWidgetData('user', value.toJson());
}
});
}

32
lib/providers/widget.dart Normal file
View File

@ -0,0 +1,32 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:home_widget/home_widget.dart';
class HomeWidgetProvider {
HomeWidgetProvider(BuildContext context);
Future<void> initialize() async {
if (kIsWeb || !(Platform.isAndroid || Platform.isIOS)) return;
if (!kIsWeb && Platform.isIOS) {
await HomeWidget.setAppGroupId("group.solsynth.solian");
}
}
Future<void> saveWidgetData(String id, dynamic data) async {
if (kIsWeb || !(Platform.isAndroid || Platform.isIOS)) return;
await HomeWidget.saveWidgetData(id, jsonEncode(data));
}
Future<void> updateWidget() async {
if (kIsWeb || !(Platform.isAndroid || Platform.isIOS)) return;
await HomeWidget.updateWidget(
name: "SolarWidget",
iOSName: "SolarWidget",
androidName: "com.solsynth.solian.SolarWidget",
qualifiedAndroidName: "group.solsynth.solian.SolarWidget",
);
}
}