Skip to content

Commit 837d8ba

Browse files
committed
feat: version notice with badges
1 parent b6a1e3e commit 837d8ba

File tree

9 files changed

+114
-73
lines changed

9 files changed

+114
-73
lines changed

lib/components/chat/menu_button.dart

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,41 @@
11
import 'package:flutter/material.dart';
2+
import 'package:badges/badges.dart' as badges;
3+
// import 'package:get/get.dart';
4+
// import 'package:logger/logger.dart';
25
// import 'package:get/get.dart';
36

47
// ignore: must_be_immutable
58
class LeftMenuButtonComponent extends StatelessWidget {
6-
LeftMenuButtonComponent(
7-
{super.key,
8-
required this.title,
9-
// required this.routeName,
10-
required this.onPressed,
11-
required this.icon});
9+
LeftMenuButtonComponent({
10+
super.key,
11+
required this.title,
12+
// required this.routeName,
13+
required this.onPressed,
14+
required this.icon,
15+
this.needNotice,
16+
});
1217

1318
String title;
1419
Function onPressed;
1520
IconData icon;
21+
bool? needNotice;
1622
// String routeName;
23+
// Logger logger = Get.find();
24+
25+
Widget getLabelTitle() {
26+
// logger.d("getLabelTitle $needNotice");
27+
if (needNotice != null && needNotice == true) {
28+
// return Row(
29+
// children: [Text(title), Text("*")],
30+
// );
31+
return badges.Badge(
32+
position: badges.BadgePosition.topEnd(top: 0, end: -12),
33+
showBadge: true,
34+
child: Text(title),
35+
);
36+
}
37+
return Text(title);
38+
}
1739

1840
@override
1941
Widget build(BuildContext context) {
@@ -31,7 +53,7 @@ class LeftMenuButtonComponent extends StatelessWidget {
3153
onPressed();
3254
},
3355
icon: Icon(icon),
34-
label: Text(title),
56+
label: getLabelTitle(),
3557
),
3658
);
3759
}

lib/controller/main_controller.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ class MainController extends GetxController {
6464
version.then((value) {
6565
logger.d("message: $value");
6666
if (value.isNotEmpty) {
67+
// value =
68+
// '{"version": "v0.0.46", "notice": true, "assets": [{"name": "GeekChat-0.0.81+81-android.aab", "url": "https://pub-6be131b6553c4ce5a6f736f91a7d011a.r2.dev/v0.0.81/GeekChat-0.0.81+81-android.aab"}, {"name": "GeekChat-0.0.81+81-android.apk", "url": "https://pub-6be131b6553c4ce5a6f736f91a7d011a.r2.dev/v0.0.81/GeekChat-0.0.81+81-android.apk"}, {"name": "GeekChat-0.0.81+81-macos.dmg", "url": "https://pub-6be131b6553c4ce5a6f736f91a7d011a.r2.dev/v0.0.81/GeekChat-0.0.81+81-macos.dmg"}, {"name": "GeekChat-0.0.81+81-windows-setup.exe", "url": "https://pub-6be131b6553c4ce5a6f736f91a7d011a.r2.dev/v0.0.81/GeekChat-0.0.81+81-windows-setup.exe"}, {"name": "GeekChat-0.0.81+81-windows.msix", "url": "https://pub-6be131b6553c4ce5a6f736f91a7d011a.r2.dev/v0.0.81/GeekChat-0.0.81+81-windows.msix"}]}';
6769
_releaseModel = ReleaseModel.fromJson(value, currentVersion);
6870
logger.d("release model: ${_releaseModel.needUpdate}");
6971
if (releaseModel.needUpdate) {

lib/controller/settings.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ class SettingsController extends GetxController {
6868

6969
Logger logger = Get.find();
7070

71+
bool hasNewVersion = false;
72+
String newVersion = "*";
73+
7174
@override
7275
void onInit() {
7376
resetSettings();

lib/main.dart

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ initServices() async {
102102
logger.d("locale: ${localeController.locale.toJson()}");
103103

104104
///SettingsServerController settingsServerController = ;
105-
Get.put(
105+
SettingsServerController settingsServerController = Get.put(
106106
SettingsServerController(provider: settingsController.settings.provider));
107107

108108
MainController mainController = Get.put(MainController());
@@ -127,19 +127,31 @@ initServices() async {
127127
if (settingsController.channelName == "site") {
128128
mainController.checkUpdate(settingsController.packageInfo.version,
129129
(ReleaseModel releaseModel) {
130-
String tip = "Found a new version".tr;
131-
Get.defaultDialog(
132-
title: "Update!".tr,
133-
textConfirm: "Download".tr,
134-
textCancel: "Cancel".tr,
135-
onCancel: () => Get.back(),
136-
onConfirm: () {
137-
logger.d("confirm click");
138-
launchUrl(
139-
Uri.parse("https://github.com/geeker-ai/geek_chat/releases"));
140-
},
141-
radius: 5,
142-
middleText: "$tip : ${releaseModel.version}");
130+
if (releaseModel.needUpdate && releaseModel.notice) {
131+
String tip = "Found a new version".tr;
132+
Get.defaultDialog(
133+
title: "Update!".tr,
134+
textConfirm: "Download".tr,
135+
textCancel: "Cancel".tr,
136+
onCancel: () => Get.back(),
137+
onConfirm: () {
138+
logger.d("confirm click");
139+
launchUrl(
140+
Uri.parse("https://github.com/geeker-ai/geek_chat/releases"));
141+
},
142+
radius: 5,
143+
middleText: "$tip : ${releaseModel.version}");
144+
settingsController.hasNewVersion = true;
145+
settingsController.newVersion = releaseModel.version;
146+
settingsServerController.update(['subscription']);
147+
// settingsController.update();
148+
} else if (releaseModel.needUpdate && !releaseModel.notice) {
149+
logger.d("releaseModel.needUpdate && !releaseModel.notice");
150+
settingsController.hasNewVersion = true;
151+
settingsController.newVersion = releaseModel.version;
152+
settingsServerController.update(['subscription']);
153+
// settt.update();
154+
}
143155
});
144156
}
145157

lib/models/release.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class ReleaseModel {
77
String version = '0.0.1';
88
String currentVersion = '0.0.1';
99
String currentChangeLog = '';
10+
bool notice = true;
1011
late Map<String, String> changeLogs;
1112

1213
ReleaseModel();
@@ -16,10 +17,13 @@ class ReleaseModel {
1617
releaseModel.currentVersion = currentVersion;
1718
if (jsonString.isNotEmpty) {
1819
try {
19-
var jsonObject = jsonDecode(jsonString);
20+
Map<String, dynamic> jsonObject = jsonDecode(jsonString);
2021
releaseModel.needUpdate =
2122
checkVersion(currentVersion, jsonObject['version']);
2223
releaseModel.version = jsonObject['version'];
24+
if (jsonObject.containsKey("notice")) {
25+
releaseModel.notice = jsonObject['notice'];
26+
}
2327
} catch (e) {
2428
//
2529
}

lib/models/server.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ class ServerModel {
201201

202202
for (var key in azconfig.keys) {
203203
String tmpKey = "";
204-
String tmpVersion = "";
204+
// String tmpVersion = "";
205205
// print("--------------------------${azconfig[key].keys}");
206206
if (azconfig[key]!.containsKey("apiKey")) {
207207
tmpKey = azconfig[key]!['apiKey'];

lib/pages/about_page.dart

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ class AboutPage extends StatelessWidget {
1717
Widget build(BuildContext context) {
1818
tracker
1919
.trackEvent("Page-About", {"uuid": settingsController.settings.uuid});
20+
ChangeLogModel lastVersion = mainController.versions.first;
21+
List<ChangeLogModel> changeLogs = [];
22+
changeLogs.addAll(mainController.versions);
23+
changeLogs.removeAt(0);
2024
return Scaffold(
2125
appBar: AppBar(
2226
title: Text("About".tr),
@@ -36,6 +40,42 @@ class AboutPage extends StatelessWidget {
3640
style: const TextStyle(fontSize: 20),
3741
),
3842
),
43+
Card(
44+
shape: RoundedRectangleBorder(
45+
borderRadius: BorderRadius.circular(5),
46+
),
47+
child: Container(
48+
width: double.infinity,
49+
padding: const EdgeInsets.only(top: 10, left: 10, bottom: 10),
50+
child: Column(
51+
mainAxisAlignment: MainAxisAlignment.start,
52+
crossAxisAlignment: CrossAxisAlignment.start,
53+
children: [
54+
MarkdownWidget(
55+
data: "Geeker Chat Intro".tr,
56+
shrinkWrap: true,
57+
),
58+
Container(
59+
padding: const EdgeInsets.only(top: 10),
60+
child: const MarkdownWidget(
61+
data:
62+
"Download Link: https://github.com/geeker-ai/geek_chat/releases",
63+
shrinkWrap: true,
64+
),
65+
),
66+
],
67+
),
68+
),
69+
),
70+
ListTile(
71+
title: Text(
72+
"${lastVersion.version} (Latest Version)",
73+
style: TextStyle(
74+
fontSize:
75+
Theme.of(context).textTheme.titleLarge?.fontSize),
76+
),
77+
dense: true,
78+
),
3979
Card(
4080
shape: RoundedRectangleBorder(
4181
borderRadius: BorderRadius.circular(5),
@@ -44,12 +84,12 @@ class AboutPage extends StatelessWidget {
4484
width: double.infinity,
4585
padding: const EdgeInsets.only(top: 10, left: 10, bottom: 10),
4686
child: MarkdownWidget(
47-
data: "Geeker Chat Intro".tr,
87+
data: lastVersion.content,
4888
shrinkWrap: true,
4989
),
5090
),
5191
),
52-
for (ChangeLogModel version in mainController.versions)
92+
for (ChangeLogModel version in changeLogs)
5393
ExpansionTile(
5494
title: Text(version.version),
5595
controlAffinity: ListTileControlAffinity.leading,

lib/pages/desktop_home_page.dart

Lines changed: 3 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import 'package:geek_chat/controller/question_input_controller.dart';
88
import 'package:geek_chat/controller/settings.dart';
99
import 'package:geek_chat/controller/settings_server_controller.dart';
1010
import 'package:geek_chat/controller/tracker_controller.dart';
11-
import 'package:geek_chat/models/model.dart';
11+
// import 'package:geek_chat/models/model.dart';
1212
import 'package:geek_chat/models/session.dart';
13-
import 'package:geek_chat/util/app_constants.dart';
13+
// import 'package:geek_chat/util/app_constants.dart';
1414
import 'package:geek_chat/util/input_submit_util.dart';
1515
import 'package:get/get.dart';
1616
import 'package:logger/logger.dart';
@@ -48,52 +48,6 @@ class DesktopHomePage extends StatelessWidget {
4848
chatMessageController,
4949
settingsServerController,
5050
questionInputController);
51-
// AiModel aiModel =
52-
// AppConstants.getAiModel(chatSessionController.currentSession.model);
53-
// if (settingsServerController.defaultServer.provider == "openai" ||
54-
// settingsServerController.defaultServer.provider == "geekerchat") {
55-
// if (aiModel.aiType == AiType.chatgpt) {
56-
// if (chatSessionController.currentSession.modelType ==
57-
// ModelType.image.name) {
58-
// await InputSubmitUtil.instance.submitImageModel(
59-
// chatMessageController,
60-
// chatSessionController,
61-
// questionInputController,
62-
// settingsServerController);
63-
// } else if (chatSessionController.currentSession.modelType ==
64-
// ModelType.chat.name) {
65-
// await InputSubmitUtil.instance.submitChatModel(
66-
// chatMessageController,
67-
// chatSessionController,
68-
// questionInputController,
69-
// settingsServerController);
70-
// } else if (chatSessionController.currentSession.modelType ==
71-
// ModelType.text.name) {
72-
// // TODO process text model
73-
// }
74-
// questionInputController.clear();
75-
// questionInputController.update();
76-
// } else if (aiModel.aiType == AiType.bard) {
77-
// logger.d("bard type");
78-
// }
79-
// } else if (settingsServerController.defaultServer.provider == "azure") {
80-
// if (aiModel.aiType == AiType.chatgpt) {
81-
// if (chatSessionController.currentSession.modelType ==
82-
// ModelType.chat.name) {
83-
// await InputSubmitUtil.instance.submitAzureChatModel(
84-
// chatMessageController,
85-
// chatSessionController,
86-
// questionInputController,
87-
// settingsServerController);
88-
// }
89-
// questionInputController.clear();
90-
// questionInputController.update();
91-
// }
92-
// }
93-
94-
// if (context != null) {
95-
// LoadingProgress.stop(context);
96-
// }
9751
}
9852

9953
List<Widget> getLeftMenus(SettingsServerController controller) {
@@ -127,6 +81,7 @@ class DesktopHomePage extends StatelessWidget {
12781
// );
12882
},
12983
icon: Icons.info_outline,
84+
needNotice: settingsController.hasNewVersion,
13085
),
13186
];
13287
return leftMenus;

pubspec.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,9 @@ dependencies:
163163
# https://pub.dev/packages/image_gallery_saver
164164
image_gallery_saver: '^2.0.3'
165165

166+
# https://pub.dev/packages/badges
167+
badges: ^3.1.2
168+
166169

167170
dev_dependencies:
168171
flutter_test:

0 commit comments

Comments
 (0)