Skip to content

Commit

Permalink
add: 市区町村レベルの震度を表示できるように
Browse files Browse the repository at this point in the history
  • Loading branch information
YumNumm committed Jan 1, 2024
1 parent d2c7a6d commit 33d5118
Show file tree
Hide file tree
Showing 2 changed files with 122 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,12 @@ class PrefectureIntensityWidget extends HookConsumerWidget {
subtitle: Text(
kv.value.map((e) => e.prefecture.name).join(', '),
),
onTap: () => _PrefectureModalBottomSheet.show(
context: context,
intensity: kv.key,
prefectures: kv.value,
),
trailing: const Icon(Icons.chevron_right),
),
],
),
Expand All @@ -115,6 +121,121 @@ class PrefectureIntensityWidget extends HookConsumerWidget {
}
}

class _PrefectureModalBottomSheet extends StatelessWidget {
const _PrefectureModalBottomSheet({
required this.intensity,
required this.prefectures,
});

static Future<void> show({
required BuildContext context,
required JmaIntensity intensity,
required List<_MergedPrefectureIntensity> prefectures,
}) {
return showModalBottomSheet<void>(
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(16),
),
),
context: context,
builder: (context) {
return _PrefectureModalBottomSheet(
intensity: intensity,
prefectures: prefectures,
);
},
);
}

final JmaIntensity intensity;
final List<_MergedPrefectureIntensity> prefectures;

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
"震度${intensity.type.replaceAll('+', '強').replaceAll('-', '弱')}"
'の地域',
),
),
body: ListView(
children: [
for (final prefecture in prefectures)
_PrefectureListTile(prefecture: prefecture),
],
),
);
}
}

class _PrefectureListTile extends HookWidget {
const _PrefectureListTile({
required this.prefecture,
});

final _MergedPrefectureIntensity prefecture;

@override
Widget build(BuildContext context) {
final isExpanded = useState(false);
final shrinked = ListTile(
title: Text(
prefecture.prefecture.name,
style: const TextStyle(
fontWeight: FontWeight.bold,
),
),
trailing: const Icon(Icons.expand_more),
onTap: () => isExpanded.value = true,
);
final expanded = ListTile(
title: Text(
prefecture.prefecture.name,
style: const TextStyle(
fontWeight: FontWeight.bold,
),
),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
for (final city in prefecture.cities)
Text.rich(
TextSpan(
children: [
TextSpan(
text: '${city.city.name}: ',
style: const TextStyle(
fontWeight: FontWeight.bold,
),
),
for (final station in city.stations)
TextSpan(
text: '${station.name} ',
style: const TextStyle(
color: Colors.grey,
),
),
],
),
),
],
),
onTap: () => isExpanded.value = false,
trailing: const Icon(Icons.expand_less),
);
return AnimatedCrossFade(
firstChild: shrinked,
secondChild: expanded,
crossFadeState: isExpanded.value
? CrossFadeState.showSecond
: CrossFadeState.showFirst,
duration: const Duration(milliseconds: 300),
);
}
}

class _MergedPrefectureIntensity {
factory _MergedPrefectureIntensity.fromIntensity(
RegionIntensity prefecture,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,7 @@ class _EarthquakeCommentWidget extends StatelessWidget {
return BorderedContainer(
padding: const EdgeInsets.all(8),
elevation: 1,
child: Markdown(
child: MarkdownBody(
data: switch ((comment.forecast?.text, comment.free)) {
(final String text, final String free) => '$text\n\n$free',
(final String text, _) => text,
Expand All @@ -475,8 +475,6 @@ class _EarthquakeCommentWidget extends StatelessWidget {
uri,
);
},
shrinkWrap: true,
padding: EdgeInsets.zero,
),
);
}
Expand Down

0 comments on commit 33d5118

Please sign in to comment.