From c4abc2c8654f86ed54ede77acd47301e2d7768bd Mon Sep 17 00:00:00 2001 From: Ryotaro Onoue <73390859+YumNumm@users.noreply.github.com> Date: Tue, 9 Apr 2024 03:32:47 +0900 Subject: [PATCH] =?UTF-8?q?=E5=9C=B0=E9=9C=87=E5=B1=A5=E6=AD=B4=E3=81=AEWe?= =?UTF-8?q?bSocket=E7=B5=90=E5=90=88=20(#632)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * rename proxy name * add: websocket listen * fix: kmoni * Merge branch 'develop' into feature/earthquake-history-websocket --- app/ios/Runner.xcodeproj/project.pbxproj | 48 +++++++------------ app/lib/core/provider/dio_provider.dart | 4 +- app/lib/core/provider/dio_provider.g.dart | 2 +- .../core/provider/eew/eew_alive_telegram.dart | 2 +- .../kmoni/viewmodel/kmoni_view_model.dart | 12 ++--- .../kmoni/viewmodel/kmoni_view_model.g.dart | 2 +- app/lib/core/router/router.dart | 8 ++-- app/lib/core/router/router.g.dart | 4 +- .../data/earthquake_history_notifier.dart | 25 ++++++++-- .../data/earthquake_history_notifier.g.dart | 2 +- .../model/earthquake_history_parameter.dart | 3 -- .../ui/earthquake_history_screen.dart | 2 +- .../component/earthquake_map.dart | 6 +-- .../component/prefecture_lpgm_intensity.dart | 1 + .../earthquake_history_details_notifier.dart | 7 ++- ...earthquake_history_details_notifier.g.dart | 22 ++++----- .../screen/earthquake_history_details.dart | 2 +- .../home/component/eew/eew_widget.dart | 22 ++------- .../sheet/earthquake_history_widget.dart | 2 +- .../home/component/sheet/status_widget.dart | 6 ++- .../home/features/map/view/main_map_view.dart | 1 - .../map/viewmodel/main_map_viewmodel.dart | 28 +++++++++-- .../map/viewmodel/main_map_viewmodel.g.dart | 2 +- .../children/config/debug/debugger_page.dart | 2 +- 24 files changed, 113 insertions(+), 102 deletions(-) diff --git a/app/ios/Runner.xcodeproj/project.pbxproj b/app/ios/Runner.xcodeproj/project.pbxproj index 75bccae69..14b305b7d 100644 --- a/app/ios/Runner.xcodeproj/project.pbxproj +++ b/app/ios/Runner.xcodeproj/project.pbxproj @@ -523,11 +523,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = iOSAppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1158; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CPL7H8SHVM; + DEVELOPMENT_TEAM = CPL7H8SHVM; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = EQMonitor; @@ -540,7 +539,6 @@ PRODUCT_BUNDLE_IDENTIFIER = net.yumnumm.eqmonitor; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development net.yumnumm.eqmonitor"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; @@ -558,11 +556,10 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1158; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CPL7H8SHVM; + DEVELOPMENT_TEAM = CPL7H8SHVM; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; @@ -582,7 +579,6 @@ PRODUCT_BUNDLE_IDENTIFIER = net.yumnumm.eqmonitor.FcmServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development net.yumnumm.eqmonitor.FcmServiceExtension"; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -600,11 +596,10 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1158; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CPL7H8SHVM; + DEVELOPMENT_TEAM = CPL7H8SHVM; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; @@ -623,7 +618,6 @@ PRODUCT_BUNDLE_IDENTIFIER = net.yumnumm.eqmonitor.FcmServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore net.yumnumm.eqmonitor.FcmServiceExtension"; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -641,11 +635,10 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1158; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CPL7H8SHVM; + DEVELOPMENT_TEAM = CPL7H8SHVM; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; @@ -664,7 +657,6 @@ PRODUCT_BUNDLE_IDENTIFIER = net.yumnumm.eqmonitor.FcmServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development net.yumnumm.eqmonitor.FcmServiceExtension"; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -785,11 +777,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = iOSAppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1158; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CPL7H8SHVM; + DEVELOPMENT_TEAM = CPL7H8SHVM; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = EQMonitor; @@ -802,7 +793,6 @@ PRODUCT_BUNDLE_IDENTIFIER = net.yumnumm.eqmonitor; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development net.yumnumm.eqmonitor"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -817,11 +807,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = iOSAppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1158; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CPL7H8SHVM; + DEVELOPMENT_TEAM = CPL7H8SHVM; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = EQMonitor; @@ -834,7 +823,6 @@ PRODUCT_BUNDLE_IDENTIFIER = net.yumnumm.eqmonitor; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore net.yumnumm.eqmonitor"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; diff --git a/app/lib/core/provider/dio_provider.dart b/app/lib/core/provider/dio_provider.dart index d17886aa7..b45b83119 100644 --- a/app/lib/core/provider/dio_provider.dart +++ b/app/lib/core/provider/dio_provider.dart @@ -29,12 +29,12 @@ Dio dio(DioRef ref) { createHttpClient: () => HttpClient()..findProxy = (url) => 'PROXY macbook-pro:9090', ); - HttpOverrides.global = MyHttpOverrides(); + HttpOverrides.global = _HttpOverrides(); } return dio; } -class MyHttpOverrides extends HttpOverrides { +class _HttpOverrides extends HttpOverrides { @override HttpClient createHttpClient(SecurityContext? context) { return super.createHttpClient(context) diff --git a/app/lib/core/provider/dio_provider.g.dart b/app/lib/core/provider/dio_provider.g.dart index bb280dff1..f5c787d11 100644 --- a/app/lib/core/provider/dio_provider.g.dart +++ b/app/lib/core/provider/dio_provider.g.dart @@ -8,7 +8,7 @@ part of 'dio_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$dioHash() => r'd4571410c0b9cc61a83739afebd9a2572c87c435'; +String _$dioHash() => r'bd28b67c413f4bbbd07c40a59b381fc3849327da'; /// See also [dio]. @ProviderFor(dio) diff --git a/app/lib/core/provider/eew/eew_alive_telegram.dart b/app/lib/core/provider/eew/eew_alive_telegram.dart index 40b7d4301..50eda41be 100644 --- a/app/lib/core/provider/eew/eew_alive_telegram.dart +++ b/app/lib/core/provider/eew/eew_alive_telegram.dart @@ -78,7 +78,7 @@ class EewAliveChecker { final depth = eew.depth; // EEW警報の場合、420秒でイベント終了と判定する - final isWarning = (eew.headline ?? '').contains('強い揺れ'); + final isWarning = eew.isWarning ?? eew.headline?.contains('強い揺れ') ?? false; if (isWarning) { return happenedDiff > 420; } diff --git a/app/lib/core/provider/kmoni/viewmodel/kmoni_view_model.dart b/app/lib/core/provider/kmoni/viewmodel/kmoni_view_model.dart index bb8efbdae..28190435e 100644 --- a/app/lib/core/provider/kmoni/viewmodel/kmoni_view_model.dart +++ b/app/lib/core/provider/kmoni/viewmodel/kmoni_view_model.dart @@ -57,14 +57,12 @@ class KmoniViewModel extends _$KmoniViewModel { Future initialize() async { // Timer開始 while (true) { - try { - await syncDelayWithKmoni(); - // ignore: avoid_catches_without_on_clauses - } catch (e) { - log('error $e'); - await Future.delayed(const Duration(milliseconds: 1000)); - continue; + final result = await syncDelayWithKmoni(); + if (result != null) { + break; } + await Future.delayed(const Duration(milliseconds: 1000)); + break; } state = state.copyWith( diff --git a/app/lib/core/provider/kmoni/viewmodel/kmoni_view_model.g.dart b/app/lib/core/provider/kmoni/viewmodel/kmoni_view_model.g.dart index 8b4280b68..b6c937bd3 100644 --- a/app/lib/core/provider/kmoni/viewmodel/kmoni_view_model.g.dart +++ b/app/lib/core/provider/kmoni/viewmodel/kmoni_view_model.g.dart @@ -8,7 +8,7 @@ part of 'kmoni_view_model.dart'; // RiverpodGenerator // ************************************************************************** -String _$kmoniViewModelHash() => r'3ab08000b67efda4ead9ca659ef8301e975576bf'; +String _$kmoniViewModelHash() => r'493abd6c1bf46946c110e40faba585298d6f914c'; /// See also [KmoniViewModel]. @ProviderFor(KmoniViewModel) diff --git a/app/lib/core/router/router.dart b/app/lib/core/router/router.dart index df60151f6..51a0aca91 100644 --- a/app/lib/core/router/router.dart +++ b/app/lib/core/router/router.dart @@ -80,13 +80,15 @@ class EarthquakeHistoryDetailsRoute extends GoRouteData { required this.eventId, }); - final String eventId; + final int eventId; @override - Widget build(BuildContext context, GoRouterState state) => - EarthquakeHistoryDetailsPage( + Widget build(BuildContext context, GoRouterState state) { + + return EarthquakeHistoryDetailsPage( eventId: eventId, ); + } } @TypedGoRoute(path: '/information-history') diff --git a/app/lib/core/router/router.g.dart b/app/lib/core/router/router.g.dart index 4a93420ee..e299794a8 100644 --- a/app/lib/core/router/router.g.dart +++ b/app/lib/core/router/router.g.dart @@ -74,11 +74,11 @@ extension $EarthquakeHistoryDetailsRouteExtension on EarthquakeHistoryDetailsRoute { static EarthquakeHistoryDetailsRoute _fromState(GoRouterState state) => EarthquakeHistoryDetailsRoute( - eventId: state.pathParameters['eventId']!, + eventId: int.parse(state.pathParameters['eventId']!), ); String get location => GoRouteData.$location( - '/earthquake-history-details/${Uri.encodeComponent(eventId)}', + '/earthquake-history-details/${Uri.encodeComponent(eventId.toString())}', ); void go(BuildContext context) => context.go(location); diff --git a/app/lib/feature/earthquake_history/data/earthquake_history_notifier.dart b/app/lib/feature/earthquake_history/data/earthquake_history_notifier.dart index 78f0963b9..3d138dc14 100644 --- a/app/lib/feature/earthquake_history/data/earthquake_history_notifier.dart +++ b/app/lib/feature/earthquake_history/data/earthquake_history_notifier.dart @@ -38,7 +38,7 @@ class EarthquakeHistoryNotifier extends _$EarthquakeHistoryNotifier { throw EarthquakeParameterHasNotInitializedException(); } // 検索条件を指定していないNotifierでのみ、30秒ごとにデータ再取得するタイマーを設定 - if (parameter == EarthquakeHistoryParameter.empty()) { + if (parameter == const EarthquakeHistoryParameter()) { // 30秒ごとにデータ再取得するタイマー final refetchTimer = Timer.periodic( const Duration(seconds: 30), @@ -55,8 +55,27 @@ class EarthquakeHistoryNotifier extends _$EarthquakeHistoryNotifier { await _onResumed(); } }, + ) + // WebSocketからのデータを適用する + ..listen( + websocketTableMessagesProvider(), + (_, next) { + if (next case AsyncData(value: final value)) { + if (value is RealtimePostgresInsertPayload) { + _upsertEarthquakeV1s([value.newData]); + } + final _ = switch (value) { + RealtimePostgresInsertPayload(:final newData) => + _upsertEarthquakeV1s([newData]), + RealtimePostgresUpdatePayload(:final newData) => + _upsertEarthquakeV1s([newData]), + RealtimePostgresDeletePayload() => null, + }; + } + }, ); } + return _fetchInitialData( param: parameter, regions: earthquakeParameter.regions, @@ -156,7 +175,7 @@ class EarthquakeHistoryNotifier extends _$EarthquakeHistoryNotifier { Future _onResumed() async { // パラメータが指定されている場合は何もしない - if (parameter != EarthquakeHistoryParameter.empty()) { + if (parameter != const EarthquakeHistoryParameter()) { return; } final repository = ref.read(earthquakeHistoryRepositoryProvider); @@ -175,7 +194,7 @@ class EarthquakeHistoryNotifier extends _$EarthquakeHistoryNotifier { return; } // パラメータが指定されている場合は何もしない - if (parameter != EarthquakeHistoryParameter.empty()) { + if (parameter != const EarthquakeHistoryParameter()) { return; } diff --git a/app/lib/feature/earthquake_history/data/earthquake_history_notifier.g.dart b/app/lib/feature/earthquake_history/data/earthquake_history_notifier.g.dart index a1dd12213..988ca7d89 100644 --- a/app/lib/feature/earthquake_history/data/earthquake_history_notifier.g.dart +++ b/app/lib/feature/earthquake_history/data/earthquake_history_notifier.g.dart @@ -206,7 +206,7 @@ class _EarthquakeV1ExtendedProviderElement } String _$earthquakeHistoryNotifierHash() => - r'ef1fec37b3fa30ad94a6a64b9e3657d7faf67dc7'; + r'51adaff861fb48218133b21cd4f2e11c5edd84ea'; abstract class _$EarthquakeHistoryNotifier extends BuildlessAutoDisposeAsyncNotifier { diff --git a/app/lib/feature/earthquake_history/data/model/earthquake_history_parameter.dart b/app/lib/feature/earthquake_history/data/model/earthquake_history_parameter.dart index 937d66df3..b5946d8c2 100644 --- a/app/lib/feature/earthquake_history/data/model/earthquake_history_parameter.dart +++ b/app/lib/feature/earthquake_history/data/model/earthquake_history_parameter.dart @@ -16,9 +16,6 @@ class EarthquakeHistoryParameter with _$EarthquakeHistoryParameter { JmaIntensity? intensityLte, JmaIntensity? intensityGte, }) = _EarthquakeHistoryParameter; - - factory EarthquakeHistoryParameter.empty() => - const EarthquakeHistoryParameter(); } extension EarthquakeHistoryParameterEx on EarthquakeHistoryParameter { diff --git a/app/lib/feature/earthquake_history/ui/earthquake_history_screen.dart b/app/lib/feature/earthquake_history/ui/earthquake_history_screen.dart index 6fe6ee869..53fd6f29c 100644 --- a/app/lib/feature/earthquake_history/ui/earthquake_history_screen.dart +++ b/app/lib/feature/earthquake_history/ui/earthquake_history_screen.dart @@ -174,7 +174,7 @@ class _SliverListBody extends HookConsumerWidget { return EarthquakeHistoryListTile( item: item, onTap: () => EarthquakeHistoryDetailsRoute( - eventId: item.eventId.toString(), + eventId: item.eventId, ).push(context), ); }, diff --git a/app/lib/feature/earthquake_history_details/component/earthquake_map.dart b/app/lib/feature/earthquake_history_details/component/earthquake_map.dart index ffd772c40..c5ed4f937 100644 --- a/app/lib/feature/earthquake_history_details/component/earthquake_map.dart +++ b/app/lib/feature/earthquake_history_details/component/earthquake_map.dart @@ -721,7 +721,7 @@ class _StationAction extends _Action { ['linear'], ['zoom'], 3, - 0.3, + 0.2, 20, 1, ], @@ -754,9 +754,9 @@ class _StationAction extends _Action { ['linear'], ['zoom'], 3, - 0.1, + 0.04, 7, - 0.4, + 0.3, ], textAllowOverlap: true, iconAllowOverlap: true, diff --git a/app/lib/feature/earthquake_history_details/component/prefecture_lpgm_intensity.dart b/app/lib/feature/earthquake_history_details/component/prefecture_lpgm_intensity.dart index 72aee7e1a..7880def8d 100644 --- a/app/lib/feature/earthquake_history_details/component/prefecture_lpgm_intensity.dart +++ b/app/lib/feature/earthquake_history_details/component/prefecture_lpgm_intensity.dart @@ -101,6 +101,7 @@ class PrefectureLpgmIntensityWidget extends HookConsumerWidget { child: CircularProgressIndicator.adaptive(), ), ), + AsyncData(:final value) when value.isEmpty => const SizedBox.shrink(), AsyncData(:final value) => BorderedContainer( elevation: 1, padding: const EdgeInsets.symmetric( diff --git a/app/lib/feature/earthquake_history_details/data/earthquake_history_details_notifier.dart b/app/lib/feature/earthquake_history_details/data/earthquake_history_details_notifier.dart index 8465d9e40..d6c9b2007 100644 --- a/app/lib/feature/earthquake_history_details/data/earthquake_history_details_notifier.dart +++ b/app/lib/feature/earthquake_history_details/data/earthquake_history_details_notifier.dart @@ -5,15 +5,14 @@ import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'earthquake_history_details_notifier.g.dart'; -@Riverpod(keepAlive: true) +@riverpod Future earthquakeHistoryDetailsNotifier( EarthquakeHistoryDetailsNotifierRef ref, - String eventId, + int eventId, ) async { final api = ref.watch(eqApiProvider); - final response = await api.v1.getEarthquakeDetail(eventId: eventId); + final response = await api.v1.getEarthquakeDetail(eventId: eventId.toString()); final data = response.data; - // TODO(YumNumm): ここでWebSocketからの地震情報を結合する final extended = await ref.read(earthquakeV1ExtendedProvider(data).future); return extended; diff --git a/app/lib/feature/earthquake_history_details/data/earthquake_history_details_notifier.g.dart b/app/lib/feature/earthquake_history_details/data/earthquake_history_details_notifier.g.dart index 81609dff7..35ce000fb 100644 --- a/app/lib/feature/earthquake_history_details/data/earthquake_history_details_notifier.g.dart +++ b/app/lib/feature/earthquake_history_details/data/earthquake_history_details_notifier.g.dart @@ -9,7 +9,7 @@ part of 'earthquake_history_details_notifier.dart'; // ************************************************************************** String _$earthquakeHistoryDetailsNotifierHash() => - r'e5ebdd73e7eb20ea51d9bb5298315f11f1d8d8f5'; + r'fba4b50fde4d4f30b998853546cca98511e088c6'; /// Copied from Dart SDK class _SystemHash { @@ -58,7 +58,7 @@ class EarthquakeHistoryDetailsNotifierFamily extends Family { /// See also [earthquakeHistoryDetailsNotifier]. EarthquakeHistoryDetailsNotifierProvider call( - String eventId, + int eventId, ) { return EarthquakeHistoryDetailsNotifierProvider( eventId, @@ -105,10 +105,10 @@ class _$EarthquakeHistoryDetailsNotifierFamilyOverride /// See also [earthquakeHistoryDetailsNotifier]. class EarthquakeHistoryDetailsNotifierProvider - extends FutureProvider { + extends AutoDisposeFutureProvider { /// See also [earthquakeHistoryDetailsNotifier]. EarthquakeHistoryDetailsNotifierProvider( - String eventId, + int eventId, ) : this._internal( (ref) => earthquakeHistoryDetailsNotifier( ref as EarthquakeHistoryDetailsNotifierRef, @@ -136,7 +136,7 @@ class EarthquakeHistoryDetailsNotifierProvider required this.eventId, }) : super.internal(); - final String eventId; + final int eventId; @override Override overrideWith( @@ -159,12 +159,12 @@ class EarthquakeHistoryDetailsNotifierProvider } @override - (String,) get argument { + (int,) get argument { return (eventId,); } @override - FutureProviderElement createElement() { + AutoDisposeFutureProviderElement createElement() { return _EarthquakeHistoryDetailsNotifierProviderElement(this); } @@ -200,18 +200,18 @@ class EarthquakeHistoryDetailsNotifierProvider } mixin EarthquakeHistoryDetailsNotifierRef - on FutureProviderRef { + on AutoDisposeFutureProviderRef { /// The parameter `eventId` of this provider. - String get eventId; + int get eventId; } class _EarthquakeHistoryDetailsNotifierProviderElement - extends FutureProviderElement + extends AutoDisposeFutureProviderElement with EarthquakeHistoryDetailsNotifierRef { _EarthquakeHistoryDetailsNotifierProviderElement(super.provider); @override - String get eventId => + int get eventId => (origin as EarthquakeHistoryDetailsNotifierProvider).eventId; } // ignore_for_file: type=lint diff --git a/app/lib/feature/earthquake_history_details/screen/earthquake_history_details.dart b/app/lib/feature/earthquake_history_details/screen/earthquake_history_details.dart index 4a8710330..76746d6e8 100644 --- a/app/lib/feature/earthquake_history_details/screen/earthquake_history_details.dart +++ b/app/lib/feature/earthquake_history_details/screen/earthquake_history_details.dart @@ -31,7 +31,7 @@ class EarthquakeHistoryDetailsPage extends HookConsumerWidget { super.key, }); - final String eventId; + final int eventId; @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/app/lib/feature/home/component/eew/eew_widget.dart b/app/lib/feature/home/component/eew/eew_widget.dart index d0469f3d4..276cc5c7a 100644 --- a/app/lib/feature/home/component/eew/eew_widget.dart +++ b/app/lib/feature/home/component/eew/eew_widget.dart @@ -8,6 +8,7 @@ import 'package:eqmonitor/core/provider/config/theme/intensity_color/intensity_c import 'package:eqmonitor/core/provider/config/theme/intensity_color/model/intensity_color_model.dart'; import 'package:eqmonitor/core/provider/eew/eew_alive_telegram.dart'; import 'package:eqmonitor/core/provider/websocket/websocket_provider.dart'; +import 'package:eqmonitor/core/theme/build_theme.dart'; import 'package:eqmonitor/gen/fonts.gen.dart'; import 'package:extensions/extensions.dart'; import 'package:flutter/foundation.dart'; @@ -114,7 +115,7 @@ class EewWidget extends ConsumerWidget { final (_, backgroundColor) = (intensityScheme.foreground, intensityScheme.background); // 「緊急地震速報 警報 [SPACE] #5(最終)」 - final isWarning = eew.headline?.contains('強い揺れ') ?? false; + final isWarning = eew.isWarning ?? eew.headline?.contains('強い揺れ') ?? false; final header = Wrap( alignment: WrapAlignment.spaceBetween, crossAxisAlignment: WrapCrossAlignment.center, @@ -417,7 +418,7 @@ class EewWidget extends ConsumerWidget { return Stack( alignment: Alignment.center, children: [ - if (index != null) ...[ + if (index != null) Center( child: FittedBox( child: Text( @@ -425,27 +426,12 @@ class EewWidget extends ConsumerWidget { style: TextStyle( fontSize: 100, fontWeight: FontWeight.w900, + fontFamily: monoFont, color: textTheme.bodyMedium!.color!.withOpacity(0.3), ), ), ), ), - Center( - child: FittedBox( - child: Text( - (index).toString(), - style: TextStyle( - fontSize: 100, - fontWeight: FontWeight.w900, - foreground: Paint() - ..style = PaintingStyle.stroke - ..strokeWidth = 0 - ..color = textTheme.bodyMedium!.color!.withOpacity(0.3), - ), - ), - ), - ), - ], card, if (eew.status != TelegramStatus.normal.type) Center( diff --git a/app/lib/feature/home/component/sheet/earthquake_history_widget.dart b/app/lib/feature/home/component/sheet/earthquake_history_widget.dart index 9692e29fa..d7b6d8d1f 100644 --- a/app/lib/feature/home/component/sheet/earthquake_history_widget.dart +++ b/app/lib/feature/home/component/sheet/earthquake_history_widget.dart @@ -48,7 +48,7 @@ class EarthquakeHistorySheetWidget extends HookConsumerWidget { (e) => EarthquakeHistoryListTile( item: e, onTap: () => EarthquakeHistoryDetailsRoute( - eventId: e.eventId.toString(), + eventId: e.eventId, ).push(context), showBackgroundColor: false, ), diff --git a/app/lib/feature/home/component/sheet/status_widget.dart b/app/lib/feature/home/component/sheet/status_widget.dart index 28006a778..3e91686cc 100644 --- a/app/lib/feature/home/component/sheet/status_widget.dart +++ b/app/lib/feature/home/component/sheet/status_widget.dart @@ -3,6 +3,7 @@ import 'package:eqmonitor/core/provider/kmoni/model/kmoni_view_model_state.dart' import 'package:eqmonitor/core/provider/kmoni/viewmodel/kmoni_view_model.dart'; import 'package:eqmonitor/core/provider/kmoni/viewmodel/kmoni_view_settings.dart'; import 'package:eqmonitor/core/provider/websocket/websocket_provider.dart'; +import 'package:eqmonitor/core/theme/build_theme.dart'; import 'package:flutter/material.dart' hide ConnectionState; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:intl/intl.dart'; @@ -128,7 +129,10 @@ class SheetStatusWidget extends ConsumerWidget { DateFormat('yyyy/MM/dd HH:mm:ss').format( latestTime, ), - style: theme.textTheme.bodyMedium, + style: theme.textTheme.bodyMedium!.copyWith( + fontFamily: monoFont, + letterSpacing: -0.2, + ), ), ), ], diff --git a/app/lib/feature/home/features/map/view/main_map_view.dart b/app/lib/feature/home/features/map/view/main_map_view.dart index 9407419a7..80560143e 100644 --- a/app/lib/feature/home/features/map/view/main_map_view.dart +++ b/app/lib/feature/home/features/map/view/main_map_view.dart @@ -150,7 +150,6 @@ class MainMapView extends HookConsumerWidget { ); await notifier.onMapControllerRegistered(); await notifier.startUpdateEew(); - await notifier.animateCameraToDefaultPosition(); }, rotateGesturesEnabled: false, tiltGesturesEnabled: false, diff --git a/app/lib/feature/home/features/map/viewmodel/main_map_viewmodel.dart b/app/lib/feature/home/features/map/viewmodel/main_map_viewmodel.dart index 150529f01..25a6b7b2d 100644 --- a/app/lib/feature/home/features/map/viewmodel/main_map_viewmodel.dart +++ b/app/lib/feature/home/features/map/viewmodel/main_map_viewmodel.dart @@ -95,8 +95,6 @@ class MainMapViewModel extends _$MainMapViewModel { controller: controller, ); - await moveToHomeBoundary(); - await ( _kmoniObservationPointService!.init(), _eewHypocenterService!.init( @@ -127,6 +125,22 @@ class MainMapViewModel extends _$MainMapViewModel { _eewEstimatedIntensityService!.dispose(), ).wait; }); + log('_onEewStateChanged called!', name: 'MainMapViewModel'); + + final aliveEews = ref.read(eewAliveTelegramProvider); + if (aliveEews != null && aliveEews.isNotEmpty) { + await ( + _onEewStateChanged( + ref.read(eewAliveTelegramProvider) ?? [], + ), + _onEstimatedIntensityChanged( + ref.read(estimatedIntensityProvider) ?? [], + true, + ) + ).wait; + } else { + await moveToHomeBoundary(); + } } Future onTick(DateTime now) async { @@ -156,6 +170,7 @@ class MainMapViewModel extends _$MainMapViewModel { Future _onEewStateChanged(List values) async { // 初期化が終わっていない場合は何もしない if (!_isEewInitialized) { + log('not initialized!', name: 'MainMapViewModel'); return; } final aliveBodies = values @@ -166,9 +181,12 @@ class MainMapViewModel extends _$MainMapViewModel { final normalEews = aliveBodies .where((e) => !(e.isIpfOnePoint || e.isLevelEew || (e.isPlum ?? false))) .map( - (e) => (e, e.headline?.contains('強い揺れ') ?? false), - ) - .toList(); + (eew) { + final isWarning = + eew.isWarning ?? eew.headline?.contains('強い揺れ') ?? false; + return (eew, isWarning); + }, + ).toList(); _eewPsWaveService!.update(normalEews); await _eewHypocenterService!.update(aliveBodies); final transformed = _EewEstimatedIntensityService.transform( diff --git a/app/lib/feature/home/features/map/viewmodel/main_map_viewmodel.g.dart b/app/lib/feature/home/features/map/viewmodel/main_map_viewmodel.g.dart index 1f6a9b03e..b0e19dde5 100644 --- a/app/lib/feature/home/features/map/viewmodel/main_map_viewmodel.g.dart +++ b/app/lib/feature/home/features/map/viewmodel/main_map_viewmodel.g.dart @@ -35,7 +35,7 @@ Map _$$_EewHypocenterPropertiesImplToJson( // RiverpodGenerator // ************************************************************************** -String _$mainMapViewModelHash() => r'761169bc5b0996eb5772ecc9d2ab8f33d87475a2'; +String _$mainMapViewModelHash() => r'1c107c53f516facecfaa42c3f3fb7ff979a2463b'; /// See also [MainMapViewModel]. @ProviderFor(MainMapViewModel) diff --git a/app/lib/feature/settings/children/config/debug/debugger_page.dart b/app/lib/feature/settings/children/config/debug/debugger_page.dart index 0ef11f790..7c99ee391 100644 --- a/app/lib/feature/settings/children/config/debug/debugger_page.dart +++ b/app/lib/feature/settings/children/config/debug/debugger_page.dart @@ -123,7 +123,7 @@ class _DebugWidget extends ConsumerWidget { .read(isDioProxyEnabledProvider.notifier) .set(value: value), title: const Text('Dio Proxy'), - subtitle: const Text('mac-mini:9090へのPROXY'), + subtitle: const Text('macbook-pro:9090へのPROXY'), ), ], ),