diff --git a/lib/page/homepage/info_widget/notice_card/notice_card.dart b/lib/page/homepage/info_widget/notice_card/notice_card.dart index 5e39c9d3..6ea9be35 100644 --- a/lib/page/homepage/info_widget/notice_card/notice_card.dart +++ b/lib/page/homepage/info_widget/notice_card/notice_card.dart @@ -2,6 +2,8 @@ // SPDX-License-Identifier: MPL-2.0 import 'package:flutter/material.dart'; +import 'package:watermeter/page/homepage/info_widget/notice_card/notice_page.dart'; +import 'package:watermeter/page/public_widget/context_extension.dart'; import 'package:watermeter/page/public_widget/toast.dart'; import 'package:get/get.dart'; import 'package:styled_widget/styled_widget.dart'; @@ -20,10 +22,14 @@ class NoticeCard extends StatelessWidget { () => GestureDetector( onTap: () { if (messages.isNotEmpty) { - showDialog( - context: context, - builder: (context) => const NoticeList(), - ); + if (!isPhone(context)) { + context.pushReplacement(const NoticePage()); + } else { + showDialog( + context: context, + builder: (context) => const NoticeList(), + ); + } } else { showToast(context: context, msg: "目前没有获取应用公告,请刷新"); } diff --git a/lib/page/homepage/info_widget/notice_card/notice_page.dart b/lib/page/homepage/info_widget/notice_card/notice_page.dart new file mode 100644 index 00000000..82ceb183 --- /dev/null +++ b/lib/page/homepage/info_widget/notice_card/notice_page.dart @@ -0,0 +1,111 @@ +// Copyright 2023 BenderBlog Rodriguez and contributors. +// SPDX-License-Identifier: MPL-2.0 + +import 'package:disclosure/disclosure.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:styled_widget/styled_widget.dart'; +import 'package:url_launcher/url_launcher_string.dart'; +import 'package:watermeter/repository/message_session.dart'; +import 'package:watermeter/page/public_widget/public_widget.dart'; + +class NoticePage extends StatelessWidget { + const NoticePage({super.key}); + + @override + Widget build(BuildContext context) { + return Obx( + () => Scaffold( + appBar: AppBar(title: const Text("通知列表")), + body: DisclosureGroup( + multiple: false, + clearable: true, + children: List.generate(messages.length, (index) { + return Disclosure( + key: ValueKey('disclosure-$index'), + wrapper: (state, child) { + return Card.outlined( + clipBehavior: Clip.antiAlias, + child: child, + ); + }, + header: DisclosureButton( + child: ListTile( + title: Row( + children: [ + TagsBoxes(text: messages[index].type), + const SizedBox(width: 8), + Flexible( + child: Text( + messages[index].title, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + trailing: const DisclosureSwitcher( + opened: Icon(Icons.arrow_drop_up), + closed: Icon(Icons.arrow_drop_down), + ), + ), + ), + divider: const Divider(height: 1), + child: Builder(builder: (context) { + if (bool.tryParse(messages[index].isLink) ?? false) { + return FilledButton.icon( + onPressed: () => launchUrlString( + messages[index].message, + mode: LaunchMode.externalApplication, + ), + label: const Text("访问该链接"), + icon: const Icon(Icons.ads_click), + ).center(); + } + return SelectableText(messages[index].message); + }).padding(all: 12), + ); + }), + ).scrollable().padding(top: 20), + ), + ); + + /* + SimpleDialog( + title: const Text(), + children: List.generate( + messages.length, + (index) => SimpleDialogOption( + onPressed: () { + if (bool.parse(messages[index].isLink)) { + launchUrlString( + messages[index].message, + mode: LaunchMode.externalApplication, + ); + } else { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text(messages[index].title), + content: SelectableText(messages[index].message), + ), + ); + } + }, + child: Row( + children: [ + TagsBoxes(text: messages[index].type), + const SizedBox(width: 8), + Flexible( + child: Text( + messages[index].title, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ), + ), + ), + );*/ + } +} diff --git a/lib/page/xdu_planet/comment_popout.dart b/lib/page/xdu_planet/comment_popout.dart index e4db98b2..c13823fe 100644 --- a/lib/page/xdu_planet/comment_popout.dart +++ b/lib/page/xdu_planet/comment_popout.dart @@ -1,6 +1,9 @@ // Copyright 2024 BenderBlog Rodriguez and contributors. // SPDX-License-Identifier: MPL-2.0 +import 'dart:convert'; + +import 'package:crypto/crypto.dart'; import 'package:flutter/material.dart'; import 'package:sn_progress_dialog/sn_progress_dialog.dart'; import 'package:styled_widget/styled_widget.dart'; @@ -102,11 +105,13 @@ class CommentPopout extends StatelessWidget { } var pd = ProgressDialog(context: context); pd.show(msg: "正在发送评论"); + var hashedUid = md5.convert(utf8.encode( + "${pref.getString(pref.Preference.idsAccount)}#${pref.getString(pref.Preference.name)}")); await PlanetSession() .sendComments( id: id, content: _controller.text, - userId: CommentPopout.userIdGenerator, + userId: hashedUid.toString(), replyto: replyTo?.ID.toString(), ) .then((value) { diff --git a/lib/page/xdu_planet/person_page.dart b/lib/page/xdu_planet/person_page.dart deleted file mode 100644 index 53af74d7..00000000 --- a/lib/page/xdu_planet/person_page.dart +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2023 BenderBlog Rodriguez and contributors. -// SPDX-License-Identifier: MPL-2.0 - -// Person page of XDU Planet. - -import 'dart:math'; -import 'package:jiffy/jiffy.dart'; -import 'package:flutter/material.dart'; -import 'package:url_launcher/url_launcher_string.dart'; -import 'package:watermeter/model/xdu_planet/xdu_planet.dart'; -import 'package:watermeter/page/public_widget/context_extension.dart'; -import 'package:watermeter/page/public_widget/public_widget.dart'; -import 'package:watermeter/page/xdu_planet/content_page.dart'; - -class PersonalPage extends StatelessWidget { - final Person person; - - const PersonalPage({ - super.key, - required this.person, - }); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(person.name), - actions: [ - IconButton( - icon: const Icon(Icons.link), - onPressed: () => launchUrlString( - person.uri, - mode: LaunchMode.externalApplication, - ), - ), - ], - ), - body: Center( - child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: sheetMaxWidth - 16, - minWidth: min( - MediaQuery.of(context).size.width, - sheetMaxWidth - 16, - ), - ), - child: ListView.builder( - itemCount: person.article.length, - itemBuilder: (context, index) => ListTile( - title: Text( - person.article[index].title, - ), - subtitle: Text( - "发布于:${Jiffy.parseFromDateTime( - person.article[index].time, - ).format(pattern: "yyyy年MM月dd日")}", - ), - onTap: () => context.push( - ContentPage( - article: person.article[index], - author: person.name, - ), - ), - ), - ), - ), - ), - ); - } -}