mirror of
https://github.com/wgh136/pixes.git
synced 2025-09-27 12:57:24 +00:00
follow and favorite callbacks
This commit is contained in:
@@ -9,6 +9,8 @@ import '../network/network.dart';
|
||||
import '../pages/illust_page.dart';
|
||||
import 'md.dart';
|
||||
|
||||
typedef UpdateFavoriteFunc = void Function(bool v);
|
||||
|
||||
class IllustWidget extends StatefulWidget {
|
||||
const IllustWidget(this.illust, {this.onTap, super.key});
|
||||
|
||||
@@ -16,6 +18,8 @@ class IllustWidget extends StatefulWidget {
|
||||
|
||||
final void Function()? onTap;
|
||||
|
||||
static Map<String, UpdateFavoriteFunc> favoriteCallbacks = {};
|
||||
|
||||
@override
|
||||
State<IllustWidget> createState() => _IllustWidgetState();
|
||||
}
|
||||
@@ -26,6 +30,22 @@ class _IllustWidgetState extends State<IllustWidget> {
|
||||
final contextController = FlyoutController();
|
||||
final contextAttachKey = GlobalKey();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
IllustWidget.favoriteCallbacks[widget.illust.id.toString()] = (v) {
|
||||
setState(() {
|
||||
widget.illust.isBookmarked = v;
|
||||
});
|
||||
};
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
IllustWidget.favoriteCallbacks.remove(widget.illust.id.toString());
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return LayoutBuilder(builder: (context, constrains) {
|
||||
@@ -48,11 +68,7 @@ class _IllustWidgetState extends State<IllustWidget> {
|
||||
margin: EdgeInsets.zero,
|
||||
child: GestureDetector(
|
||||
onTap: widget.onTap ?? (){
|
||||
context.to(() => IllustPage(widget.illust, favoriteCallback: (v) {
|
||||
setState(() {
|
||||
widget.illust.isBookmarked = v;
|
||||
});
|
||||
},));
|
||||
context.to(() => IllustPage(widget.illust));
|
||||
},
|
||||
onSecondaryTapUp: showMenu,
|
||||
child: ClipRRect(
|
||||
@@ -181,11 +197,7 @@ class _IllustWidgetState extends State<IllustWidget> {
|
||||
return MenuFlyout(
|
||||
items: [
|
||||
MenuFlyoutItem(text: Text("View".tl), onPressed: (){
|
||||
context.to(() => IllustPage(widget.illust, favoriteCallback: (v) {
|
||||
setState(() {
|
||||
widget.illust.isBookmarked = v;
|
||||
});
|
||||
},));
|
||||
context.to(() => IllustPage(widget.illust));
|
||||
}),
|
||||
MenuFlyoutItem(text: Text("Private Favorite".tl), onPressed: (){
|
||||
favorite("private");
|
||||
|
@@ -4,22 +4,43 @@ import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:pixes/components/animated_image.dart';
|
||||
import 'package:pixes/foundation/app.dart';
|
||||
import 'package:pixes/foundation/image_provider.dart';
|
||||
import 'package:pixes/pages/illust_page.dart';
|
||||
import 'package:pixes/pages/user_info_page.dart';
|
||||
import 'package:pixes/utils/translation.dart';
|
||||
|
||||
import '../network/network.dart';
|
||||
import 'md.dart';
|
||||
|
||||
typedef UpdateFollowCallback = void Function(bool isFollowed);
|
||||
|
||||
class UserPreviewWidget extends StatefulWidget {
|
||||
const UserPreviewWidget(this.user, {super.key});
|
||||
|
||||
final UserPreview user;
|
||||
|
||||
static Map<String, UpdateFollowCallback> followCallbacks = {};
|
||||
|
||||
@override
|
||||
State<UserPreviewWidget> createState() => _UserPreviewWidgetState();
|
||||
}
|
||||
|
||||
class _UserPreviewWidgetState extends State<UserPreviewWidget> {
|
||||
@override
|
||||
void initState() {
|
||||
UserPreviewWidget.followCallbacks[widget.user.id.toString()] = (v) {
|
||||
setState(() {
|
||||
widget.user.isFollowed = v;
|
||||
});
|
||||
};
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
UserPreviewWidget.followCallbacks.remove(widget.user.id.toString());
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
bool isFollowing = false;
|
||||
|
||||
void follow() async {
|
||||
@@ -39,6 +60,9 @@ class _UserPreviewWidgetState extends State<UserPreviewWidget> {
|
||||
setState(() {
|
||||
isFollowing = false;
|
||||
});
|
||||
UserInfoPage.followCallbacks[widget.user.id.toString()]
|
||||
?.call(widget.user.isFollowed);
|
||||
IllustPage.updateFollow(widget.user.id.toString(), widget.user.isFollowed);
|
||||
}
|
||||
|
||||
@override
|
||||
|
Reference in New Issue
Block a user