184 lines
8.4 KiB
Dart
184 lines
8.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import '../main.dart';
|
|
import '../screen_settings.dart';
|
|
import '../worker/haptic.dart';
|
|
import '../worker/update.dart';
|
|
import '../worker/desktop.dart';
|
|
|
|
import 'package:ollama_app/l10n/gen/app_localizations.dart';
|
|
|
|
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
|
import 'package:simple_icons/simple_icons.dart';
|
|
import 'package:url_launcher/url_launcher.dart';
|
|
import 'package:package_info_plus/package_info_plus.dart';
|
|
import 'package:version/version.dart';
|
|
|
|
class ScreenSettingsAbout extends StatefulWidget {
|
|
const ScreenSettingsAbout({super.key});
|
|
|
|
@override
|
|
State<ScreenSettingsAbout> createState() => _ScreenSettingsAboutState();
|
|
}
|
|
|
|
class _ScreenSettingsAboutState extends State<ScreenSettingsAbout> {
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
updatesSupported(setState, true);
|
|
setState(() {});
|
|
|
|
void setCurrentVersion(Function setState) async {
|
|
currentVersion = (await PackageInfo.fromPlatform()).version;
|
|
setState(() {});
|
|
}
|
|
|
|
if (currentVersion == null) {
|
|
setCurrentVersion(setState);
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return WindowBorder(
|
|
color: Theme.of(context).colorScheme.surface,
|
|
child: Scaffold(
|
|
appBar: AppBar(
|
|
title: Row(children: [
|
|
Text(AppLocalizations.of(context)!.settingsTitleAbout),
|
|
Expanded(child: SizedBox(height: 200, child: MoveWindow()))
|
|
]),
|
|
actions: desktopControlsActions(context)),
|
|
body: Center(
|
|
child: Container(
|
|
constraints: const BoxConstraints(maxWidth: 1000),
|
|
padding: const EdgeInsets.only(left: 16, right: 16),
|
|
child: Column(children: [
|
|
Expanded(
|
|
child: ListView(children: [
|
|
// const SizedBox(height: 8),
|
|
button(
|
|
AppLocalizations.of(context)!
|
|
.settingsVersion(currentVersion ?? ""),
|
|
Icons.verified_rounded,
|
|
null),
|
|
(updateStatus == "notAvailable")
|
|
? const SizedBox.shrink()
|
|
: button(
|
|
(!updateChecked
|
|
? AppLocalizations.of(context)!
|
|
.settingsUpdateCheck
|
|
: updateLoading
|
|
? AppLocalizations.of(context)!
|
|
.settingsUpdateChecking
|
|
: (updateStatus == "rateLimit")
|
|
? AppLocalizations.of(context)!
|
|
.settingsUpdateRateLimit
|
|
: (updateStatus != "ok")
|
|
? AppLocalizations.of(context)!
|
|
.settingsUpdateIssue
|
|
: (Version.parse(latestVersion ??
|
|
"1.0.0") >
|
|
Version.parse(
|
|
currentVersion ??
|
|
"2.0.0"))
|
|
? AppLocalizations.of(context)!
|
|
.settingsUpdateAvailable(
|
|
latestVersion!)
|
|
: AppLocalizations.of(context)!
|
|
.settingsUpdateLatest),
|
|
((updateStatus != "ok")
|
|
? Icons.warning_rounded
|
|
: (Version.parse(latestVersion ?? "1.0.0") >
|
|
Version.parse(
|
|
currentVersion ?? "2.0.0"))
|
|
? Icons.info_outline_rounded
|
|
: Icons.update_rounded), () {
|
|
if (updateLoading) return;
|
|
selectionHaptic();
|
|
if ((Version.parse(latestVersion ?? "1.0.0") >
|
|
Version.parse(
|
|
currentVersion ?? "2.0.0")) &&
|
|
(updateStatus == "ok")) {
|
|
updateDialog(context, title);
|
|
} else {
|
|
checkUpdate(setState);
|
|
return;
|
|
}
|
|
},
|
|
iconBadge: (updateStatus == "ok" &&
|
|
updateDetectedOnStart &&
|
|
(Version.parse(latestVersion ?? "1.0.0") >
|
|
Version.parse(currentVersion ?? "2.0.0")))
|
|
? ""
|
|
: null),
|
|
(updateStatus == "notAvailable")
|
|
? const SizedBox.shrink()
|
|
: toggle(
|
|
context,
|
|
AppLocalizations.of(context)!
|
|
.settingsCheckForUpdates,
|
|
(prefs!.getBool("checkUpdateOnSettingsOpen") ??
|
|
true), (value) {
|
|
selectionHaptic();
|
|
prefs!
|
|
.setBool("checkUpdateOnSettingsOpen", value);
|
|
setState(() {});
|
|
}),
|
|
titleDivider(context: context),
|
|
button(AppLocalizations.of(context)!.settingsGithub,
|
|
SimpleIcons.github, () {
|
|
selectionHaptic();
|
|
launchUrl(
|
|
mode: LaunchMode.inAppBrowserView,
|
|
Uri.parse(repoUrl));
|
|
}),
|
|
button(AppLocalizations.of(context)!.settingsReportIssue,
|
|
Icons.report_rounded, () {
|
|
selectionHaptic();
|
|
launchUrl(
|
|
mode: LaunchMode.inAppBrowserView,
|
|
Uri.parse("$repoUrl/issues"));
|
|
}),
|
|
button(AppLocalizations.of(context)!.settingsLicenses,
|
|
Icons.gavel_rounded, () {
|
|
selectionHaptic();
|
|
String legal = "Copyright 2024 JHubi1";
|
|
Widget icon = const Padding(
|
|
padding: EdgeInsets.all(16),
|
|
child: ImageIcon(AssetImage("assets/logo512.png"),
|
|
size: 48),
|
|
);
|
|
if (desktopFeature()) {
|
|
showDialog(
|
|
context: context,
|
|
builder: (context) {
|
|
return Dialog(
|
|
child: ClipRRect(
|
|
borderRadius: BorderRadius.circular(28),
|
|
child: LicensePage(
|
|
applicationName: "Ollama App",
|
|
applicationVersion: currentVersion,
|
|
applicationIcon: icon,
|
|
applicationLegalese: legal),
|
|
));
|
|
});
|
|
} else {
|
|
showLicensePage(
|
|
context: context,
|
|
applicationName: "Ollama App",
|
|
applicationVersion: currentVersion,
|
|
applicationIcon: icon,
|
|
applicationLegalese: legal);
|
|
}
|
|
}),
|
|
const SizedBox(height: 16)
|
|
]),
|
|
)
|
|
])),
|
|
)),
|
|
);
|
|
}
|
|
}
|