aves/lib/widgets/about/update.dart
2021-09-07 12:12:35 +09:00

93 lines
3.5 KiB
Dart

import 'package:aves/services/services.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/about/news_badge.dart';
import 'package:aves/widgets/common/basic/link_chip.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:flutter/material.dart';
class AboutUpdate extends StatefulWidget {
const AboutUpdate({Key? key}) : super(key: key);
@override
_AboutUpdateState createState() => _AboutUpdateState();
}
class _AboutUpdateState extends State<AboutUpdate> {
late Future<bool> _updateChecker;
@override
void initState() {
super.initState();
_updateChecker = availability.isNewVersionAvailable;
}
@override
Widget build(BuildContext context) {
return FutureBuilder<bool>(
future: _updateChecker,
builder: (context, snapshot) {
final newVersionAvailable = snapshot.data == true;
if (!newVersionAvailable) return const SizedBox();
return Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ConstrainedBox(
constraints: const BoxConstraints(minHeight: 48),
child: Align(
alignment: AlignmentDirectional.centerStart,
child: Text.rich(
TextSpan(
children: [
const WidgetSpan(
child: Padding(
padding: EdgeInsetsDirectional.only(end: 8),
child: AboutNewsBadge(),
),
alignment: PlaceholderAlignment.middle,
),
TextSpan(text: context.l10n.aboutUpdate, style: Constants.titleTextStyle),
],
),
),
),
),
Text.rich(
TextSpan(
children: [
TextSpan(text: context.l10n.aboutUpdateLinks1),
WidgetSpan(
child: LinkChip(
text: context.l10n.aboutUpdateGitHub,
url: '${Constants.avesGithub}/releases',
textStyle: const TextStyle(fontWeight: FontWeight.bold),
),
alignment: PlaceholderAlignment.middle,
),
TextSpan(text: context.l10n.aboutUpdateLinks2),
WidgetSpan(
child: LinkChip(
text: context.l10n.aboutUpdateGooglePlay,
url: 'https://play.google.com/store/apps/details?id=deckers.thibault.aves',
textStyle: const TextStyle(fontWeight: FontWeight.bold),
),
alignment: PlaceholderAlignment.middle,
),
TextSpan(text: context.l10n.aboutUpdateLinks3),
],
),
),
const SizedBox(height: 16),
],
),
),
const Divider(),
],
);
},
);
}
}