mirror of
https://github.com/darkmoonight/Rain.git
synced 2026-03-13 10:31:53 +08:00
fix(widget): ensure Android home widget updates data and handle unsupported pinning
Call updateWidget() after reading cached weather on Android so the home screen widget immediately shows the current temperature and icon instead of only the date. Wrap the “Add widget” setting in isRequestPinWidgetSupported() and show the addWidgetLauncher snackbar on launchers that don’t support pinning widgets (e.g. some GrapheneOS setups), avoiding silent failures. No changes to layouts or existing comments; only widget update logic and settings behavior were adjusted.
This commit is contained in:
@@ -2,3 +2,4 @@ org.gradle.jvmargs=-Xmx4G
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
android.enableR8.fullMode = false
|
||||
android.overridePathCheck=true
|
||||
|
||||
@@ -195,12 +195,14 @@ class WeatherController extends GetxController {
|
||||
}
|
||||
|
||||
Future<void> readCache() async {
|
||||
MainWeatherCache? mainWeatherCache;
|
||||
LocationCache? locationCache;
|
||||
MainWeatherCache? mainWeatherCache =
|
||||
isar.mainWeatherCaches.where().findFirstSync();
|
||||
LocationCache? locationCache =
|
||||
isar.locationCaches.where().findFirstSync();
|
||||
|
||||
while (mainWeatherCache == null || locationCache == null) {
|
||||
mainWeatherCache = isar.mainWeatherCaches.where().findFirstSync();
|
||||
locationCache = isar.locationCaches.where().findFirstSync();
|
||||
if (mainWeatherCache == null || locationCache == null) {
|
||||
isLoading.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
_mainWeather.value = mainWeatherCache;
|
||||
@@ -222,6 +224,7 @@ class WeatherController extends GetxController {
|
||||
frequency: const Duration(minutes: 15),
|
||||
existingWorkPolicy: ExistingPeriodicWorkPolicy.update,
|
||||
);
|
||||
await updateWidget();
|
||||
}
|
||||
|
||||
isLoading.value = false;
|
||||
|
||||
@@ -17,6 +17,7 @@ import 'package:rain/app/ui/settings/widgets/setting_card.dart';
|
||||
import 'package:rain/main.dart';
|
||||
import 'package:rain/theme/theme_controller.dart';
|
||||
import 'package:rain/app/utils/color_converter.dart';
|
||||
import 'package:rain/app/utils/show_snack_bar.dart';
|
||||
import 'package:restart_app/restart_app.dart';
|
||||
|
||||
class SettingsPage extends StatefulWidget {
|
||||
@@ -717,8 +718,17 @@ class _SettingsPageState extends State<SettingsPage> {
|
||||
elevation: 4,
|
||||
icon: const Icon(IconsaxPlusLinear.add_square),
|
||||
text: 'addWidget'.tr,
|
||||
onPressed: () {
|
||||
HomeWidget.requestPinWidget(
|
||||
onPressed: () async {
|
||||
if (!Platform.isAndroid) return;
|
||||
|
||||
final supported =
|
||||
await HomeWidget.isRequestPinWidgetSupported() ?? false;
|
||||
if (!supported) {
|
||||
showSnackBar(content: 'addWidgetLauncher'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
await HomeWidget.requestPinWidget(
|
||||
name: androidWidgetName,
|
||||
androidName: androidWidgetName,
|
||||
qualifiedAndroidName: 'com.yoshi.rain.OreoWidget',
|
||||
|
||||
@@ -10,6 +10,11 @@ include(${EPHEMERAL_DIR}/generated_config.cmake)
|
||||
# https://github.com/flutter/flutter/issues/57146.
|
||||
set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
|
||||
|
||||
# Set fallback configurations for older versions of the flutter tool.
|
||||
if (NOT DEFINED FLUTTER_TARGET_PLATFORM)
|
||||
set(FLUTTER_TARGET_PLATFORM "windows-x64")
|
||||
endif()
|
||||
|
||||
# === Flutter Library ===
|
||||
set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
|
||||
|
||||
@@ -92,7 +97,7 @@ add_custom_command(
|
||||
COMMAND ${CMAKE_COMMAND} -E env
|
||||
${FLUTTER_TOOL_ENVIRONMENT}
|
||||
"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
|
||||
windows-x64 $<CONFIG>
|
||||
${FLUTTER_TARGET_PLATFORM} $<CONFIG>
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_target(flutter_assemble DEPENDS
|
||||
|
||||
Reference in New Issue
Block a user