相册缩略图 无法刷新和点击回顶部eventbus 方法

This commit is contained in:
YangYuhao 2023-08-10 15:39:50 +08:00
parent 7bcf0dbefe
commit 2f7876fae9
16 changed files with 94 additions and 60 deletions

View File

@ -155,6 +155,8 @@ class Call_outLogic extends GetxController {
final logic = Get.put(CircleLogic()); final logic = Get.put(CircleLogic());
logic.setCircle(numbers[0].id); logic.setCircle(numbers[0].id);
logic.refresh(); logic.refresh();
EventBusManager.fire(CallRefreshCircle(numbers[0].id));
// logic.update(); // logic.update();
// Navigator.pop(Get.context!, numbers); // Navigator.pop(Get.context!, numbers);
Get.back(); Get.back();

View File

@ -7,6 +7,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_swiper/flutter_swiper.dart'; import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../util/eventBus.dart';
import '../select_circle/logic.dart'; import '../select_circle/logic.dart';
import 'logic.dart'; import 'logic.dart';
@ -20,7 +21,6 @@ class CirclePage extends StatefulWidget {
class _CirclePageState extends State<CirclePage> class _CirclePageState extends State<CirclePage>
with AutomaticKeepAliveClientMixin { with AutomaticKeepAliveClientMixin {
final ScrollController scrollController = ScrollController();
@override @override
bool get wantKeepAlive => true; bool get wantKeepAlive => true;
@ -33,7 +33,6 @@ class _CirclePageState extends State<CirclePage>
@override @override
void dispose() { void dispose() {
// TODO: implement dispose // TODO: implement dispose
scrollController.dispose();
super.dispose(); super.dispose();
} }
@ -69,8 +68,8 @@ class _CirclePageState extends State<CirclePage>
child: Swiper( child: Swiper(
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
var bean = logic.circle.lists[index]; var bean = logic.circle.lists[index];
final GlobalKey<InfoListViewState> infoListViewKey = GlobalKey<InfoListViewState>(); // final GlobalKey<InfoListViewState> infoListViewKey = GlobalKey<InfoListViewState>();
return InfoListView(key:infoListViewKey,index:index,bean: bean, logic:logic,scrollController:scrollController); return InfoListView(index, bean, logic);
}, },
onIndexChanged: (index) { onIndexChanged: (index) {
controller.state.index = index; controller.state.index = index;
@ -178,11 +177,7 @@ class _CirclePageState extends State<CirclePage>
}, },
child: GestureDetector( child: GestureDetector(
onTap: (){ onTap: (){
scrollController.animateTo( EventBusManager.fire(ScrollToTop());
0.0, // Scroll to the top
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
);
}, },
child: Text( child: Text(
'发现', '发现',

View File

@ -1,4 +1,6 @@
import 'dart:async';
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:circle_app/app/circle/logic.dart'; import 'package:circle_app/app/circle/logic.dart';
import 'package:circle_app/app/circle/state.dart'; import 'package:circle_app/app/circle/state.dart';
@ -16,35 +18,28 @@ import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart'; import 'package:get/get_core/src/get_main.dart';
import '../../../util/SharedPreferencesHelper.dart'; import '../../../util/SharedPreferencesHelper.dart';
import '../../../util/eventBus.dart';
class InfoListView extends StatefulWidget { class InfoListView extends StatefulWidget {
// Get.lazyPut(() => ListLogic()); // Get.lazyPut(() => ListLogic());
final int index;
late final Circle bean;
var logic; var logic;
final ScrollController scrollController; Circle bean;
int index;
//MyListViewback back;
InfoListView(this.index, this.bean, this.logic,{super.key});
InfoListView({
Key? key,
required this.index,
required this.bean,
required this.logic,
required this.scrollController,
}) : super(key: key);
@override @override
State<InfoListView> createState() => InfoListViewState(); State<InfoListView> createState() => InfoListViewState();
} }
typedef void MyListViewback(State<InfoListView> result);
class InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClientMixin { class InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClientMixin {
@override @override
bool get wantKeepAlive => true; bool get wantKeepAlive => true;
final ScrollController scrollController = ScrollController();
ListLogic? listsLg; ListLogic? listsLg;
@ -60,26 +55,54 @@ class InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClien
@override @override
void dispose() { void dispose() {
// TODO: implement dispose // TODO: implement dispose
if(null!=callRefreshCicle){
EventBusManager.cancelSubscription(callRefreshCicle!);
}
if(null!=scroToTop){
EventBusManager.cancelSubscription(scroToTop!);
}
scrollController.dispose();
super.dispose(); super.dispose();
// widget.scrollController.dispose();
} }
StreamSubscription? callRefreshCicle =null;
StreamSubscription? scroToTop =null;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
widget.scrollController.addListener(() { scrollController.addListener(() {
try { try {
if (widget.scrollController.position.pixels == if (scrollController.position.pixels ==
widget.scrollController.position.maxScrollExtent) { scrollController.position.maxScrollExtent) {
loadMore(); loadMore();
} }
} catch (_) {} } catch (_) {}
}); });
circleId = widget.bean.id.toString(); circleId = widget.bean.id.toString();
loadCallOutListData(); loadCallOutListData();
callRefreshCicle = EventBusManager.on<CallRefreshCircle>().listen((event) {
if(widget.bean.id.toString() == event.circleId){
loadCallOutListData();
} }
});
scroToTop = EventBusManager.on<ScrollToTop>().listen((event) {
scrollController.animateTo(
0.0,
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
);
});
// widget.back(widget.createState());
}
@ -241,7 +264,7 @@ class InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClien
ListView.builder( ListView.builder(
physics: const AlwaysScrollableScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
controller: widget.scrollController, controller: scrollController,
itemCount: lists.length + 2, itemCount: lists.length + 2,
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == 0) { if (index == 0) {
@ -292,7 +315,7 @@ class InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClien
width: 8.sp, width: 8.sp,
), ),
Text( Text(
'${convertToTenThousand(widget.bean.joinTotal)}圈友', '${convertToTenThousand(widget.bean.joinTotal)}圈友加入',
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontSize: 12.sp), fontSize: 12.sp),
@ -374,7 +397,7 @@ class InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClien
child: GestureDetector( child: GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: (){ onTap: (){
widget.scrollController.animateTo( scrollController.animateTo(
0.0, // Scroll to the top 0.0, // Scroll to the top
duration: Duration(milliseconds: 300), duration: Duration(milliseconds: 300),
curve: Curves.easeInOut, curve: Curves.easeInOut,

View File

@ -73,7 +73,7 @@ class FriendslistPage extends StatelessWidget {
}, },
child: CachedNetworkImage( child: CachedNetworkImage(
fit: BoxFit.cover, fit: BoxFit.cover,
imageUrl: item.avatar, imageUrl: item.avatarThumb,
width: 53.sp, width: 53.sp,
height: 53.sp, height: 53.sp,
), ),

View File

@ -77,7 +77,7 @@ class LikelistPage extends StatelessWidget {
}, },
child: CachedNetworkImage( child: CachedNetworkImage(
fit: BoxFit.cover, fit: BoxFit.cover,
imageUrl: item.user.avatar, imageUrl: item.user.avatarThumb,
width: 53.sp, width: 53.sp,
height: 53.sp, height: 53.sp,
), ),

View File

@ -20,9 +20,10 @@ class Complete_materialLogic extends GetxController {
@override @override
void onReady() { void onReady() {
// TODO: implement onReady // TODO: implement onReady
// FlutterNativeSplash.remove();
super.onReady(); super.onReady();
FlutterNativeSplash.remove();
} }
final Complete_materialState state = Complete_materialState(); final Complete_materialState state = Complete_materialState();
final ImagePicker _picker = ImagePicker(); final ImagePicker _picker = ImagePicker();
@ -44,6 +45,7 @@ class Complete_materialLogic extends GetxController {
@override @override
void onInit() async { void onInit() async {
FlutterNativeSplash.remove();
if(type!=''){ if(type!=''){
var data = await DioManager.instance.get(url: Api.getUserInfo); var data = await DioManager.instance.get(url: Api.getUserInfo);
var bean = BaseResponse<ResponseBean>.fromJson( var bean = BaseResponse<ResponseBean>.fromJson(

View File

@ -50,7 +50,7 @@ class MinefragmentLogic extends GetxController {
like_me_count = bean.data.likeMeCount ?? 0; like_me_count = bean.data.likeMeCount ?? 0;
recent_visit_count = bean.data.recentVisitCount ?? 0; recent_visit_count = bean.data.recentVisitCount ?? 0;
joinedCircle = "${"加入了${bean.data.joininterestcount}"}"; joinedCircle = "${"加入了${bean.data.joininterestcount}"}";
enterHomeInfoMsg = bean.data.mainGuideText;
SharedPreferences sharedPreferences = SharedPreferences sharedPreferences =
@ -163,6 +163,7 @@ class MineResponseBean {
int? vipExpireDays; int? vipExpireDays;
String phone; String phone;
int? joininterestcount; int? joininterestcount;
String mainGuideText;
MineResponseBean( MineResponseBean(
{required this.user, {required this.user,
@ -172,7 +173,8 @@ class MineResponseBean {
this.vipExpireDate, this.vipExpireDate,
this.vipExpireDays, this.vipExpireDays,
required this.phone, required this.phone,
required this.joininterestcount}); required this.joininterestcount,
required this.mainGuideText});
factory MineResponseBean.fromJson(Map<String, dynamic> json) { factory MineResponseBean.fromJson(Map<String, dynamic> json) {
return MineResponseBean( return MineResponseBean(
@ -184,6 +186,7 @@ class MineResponseBean {
vipExpireDate: json['vip_expire_date'], vipExpireDate: json['vip_expire_date'],
vipExpireDays: json['vip_expire_days'], vipExpireDays: json['vip_expire_days'],
joininterestcount: json['join_interest_count'], joininterestcount: json['join_interest_count'],
mainGuideText:json['main_guide_text'],
); );

View File

@ -116,7 +116,7 @@ class MsgPage extends StatelessWidget {
}, },
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
print("123123123");
logic.listScrollController.animateTo( logic.listScrollController.animateTo(
0.0, 0.0,
duration: Duration(milliseconds: 300), duration: Duration(milliseconds: 300),

View File

@ -10,6 +10,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_swiper/flutter_swiper.dart'; import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../util/eventBus.dart';
class My_circlePage extends StatefulWidget { class My_circlePage extends StatefulWidget {
My_circlePage({Key? key}) : super(key: key); My_circlePage({Key? key}) : super(key: key);
@ -29,7 +31,6 @@ class _My_circlePageState extends State<My_circlePage>
var getContext; var getContext;
final ScrollController scrollController = ScrollController();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -59,14 +60,12 @@ class _My_circlePageState extends State<My_circlePage>
child: logic.circle.lists.isEmpty ? loaddingWidget(true) : Swiper( child: logic.circle.lists.isEmpty ? loaddingWidget(true) : Swiper(
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
var bean = logic.circle.lists[index]; var bean = logic.circle.lists[index];
final GlobalKey<InfoListViewState> infoListViewKey = GlobalKey<InfoListViewState>(); // final GlobalKey<InfoListViewState> infoListViewKey = GlobalKey<InfoListViewState>();
MyinfoListViewKey = infoListViewKey; // MyinfoListViewKey = infoListViewKey;
return InfoListView( return InfoListView(
key: infoListViewKey, // Assign the key here index,
index: index, bean,
bean: bean, controller
logic: controller,
scrollController: scrollController,
); );
}, },
index: controller.state.index, index: controller.state.index,
@ -100,11 +99,7 @@ class _My_circlePageState extends State<My_circlePage>
return MyAppBar( return MyAppBar(
centerTitle: '我的圈子', centerTitle: '我的圈子',
onCenterTitlePressed: (){ onCenterTitlePressed: (){
scrollController.animateTo( EventBusManager.fire(ScrollToTop());
0.0, // Scroll to the top
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
);
}, },
actionWdiget: const Text( actionWdiget: const Text(
"发布喊话", "发布喊话",
@ -117,7 +112,7 @@ class _My_circlePageState extends State<My_circlePage>
logic.getCircleIndex().title!, logic.getCircleIndex().title!,
false)); false));
var data = await Get.toNamed(AppRoutes.Call_out, arguments: {'numbers': numbers}); var data = await Get.toNamed(AppRoutes.Call_out, arguments: {'numbers': numbers});
MyinfoListViewKey.currentState?.loadCallOutListData(); // MyinfoListViewKey.currentState?.loadCallOutListData();
// logic.refresh(); // logic.refresh();
// logic.update(); // logic.update();
}, },

View File

@ -13,7 +13,6 @@ class Signal_circle_listPage extends StatelessWidget {
final logic = Get.find<Signal_circle_listLogic>(); final logic = Get.find<Signal_circle_listLogic>();
final state = Get.find<Signal_circle_listLogic>().state; final state = Get.find<Signal_circle_listLogic>().state;
final ScrollController scrollController = ScrollController();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
@ -42,7 +41,7 @@ class Signal_circle_listPage extends StatelessWidget {
Expanded( Expanded(
child: controller.circle == null child: controller.circle == null
? loaddingWidget(true) ? loaddingWidget(true)
: InfoListView(key:GlobalKey<InfoListViewState>(),index:0,bean: controller.circle!,logic: controller,scrollController:scrollController)) : InfoListView(0, controller.circle!, controller))
]), ]),
)); ));
})); }));

View File

@ -44,8 +44,9 @@ class SplashLogic extends GetxController {
SharedPreferencesHelper.getInstance().then((sharedPreferences) { SharedPreferencesHelper.getInstance().then((sharedPreferences) {
sharedPreferences.setString(SharedPreferencesHelper.AUTHORIZATION, sharedPreferences.setString(SharedPreferencesHelper.AUTHORIZATION,
bean.data!.Authorization.toString()); bean.data!.Authorization.toString());
});
Get.offNamed(AppRoutes.Complete_materialPage); Get.offNamed(AppRoutes.Complete_materialPage);
});
return; return;
} else if(bean.code == 5000||bean.code == 5001||bean.code == 5002||bean.code == 5003){ } else if(bean.code == 5000||bean.code == 5001||bean.code == 5002||bean.code == 5003){
pushLoginPage(); pushLoginPage();

View File

@ -107,7 +107,7 @@ class UserinfoLogic extends GetxController {
isOnline = userInfoBean!.isOnline; isOnline = userInfoBean!.isOnline;
isBlackBeen = bean.data.isBlock; isBlackBeen = bean.data.isBlock;
isDestroy = bean.data.isDestroy; isDestroy = bean.data.isDestroy;
if(isBlackBeen){ if (isBlackBeen) {
showOKToast("您已被对方拉黑"); showOKToast("您已被对方拉黑");
} }
} }
@ -180,7 +180,7 @@ class UserinfoLogic extends GetxController {
} }
setLike() async { setLike() async {
if(isBlack||isDestroy){ if (isBlack || isDestroy) {
showOKToast("喜欢失败,存在拉黑关系或者该账户已注销"); showOKToast("喜欢失败,存在拉黑关系或者该账户已注销");
return; return;
} }
@ -261,7 +261,8 @@ class UserinfoLogic extends GetxController {
AlbumListItem( AlbumListItem(
id: myAlbumBean.data.id, id: myAlbumBean.data.id,
type: myAlbumBean.data.type, type: myAlbumBean.data.type,
url: result)); url: result,
urlThumb: result));
update(); update();
} }
}); });
@ -405,11 +406,13 @@ class AlbumListItem {
int id; int id;
int type; int type;
String url; String url;
String urlThumb;
AlbumListItem({ AlbumListItem({
required this.id, required this.id,
required this.type, required this.type,
required this.url, required this.url,
required this.urlThumb,
}); });
factory AlbumListItem.fromJson(Map<String, dynamic> json) { factory AlbumListItem.fromJson(Map<String, dynamic> json) {
@ -417,6 +420,7 @@ class AlbumListItem {
id: json['id'], id: json['id'],
type: json['type'], type: json['type'],
url: json['url'], url: json['url'],
urlThumb: json['thumb'],
); );
} }
} }

View File

@ -543,7 +543,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
margin: EdgeInsets.all(5.sp), margin: EdgeInsets.all(5.sp),
child: Center( child: Center(
child: _buildImageItem( child: _buildImageItem(
controller.state.imaglist[index].url, controller.state.imaglist[index].urlThumb,
controller, controller,
index, index,
), ),

View File

@ -74,7 +74,7 @@ class VisitorlistPage extends StatelessWidget {
}, },
child: CachedNetworkImage( child: CachedNetworkImage(
fit: BoxFit.cover, fit: BoxFit.cover,
imageUrl: item.user.avatar, imageUrl: item.user.avatarThumb,
width: 53.sp, width: 53.sp,
height: 53.sp, height: 53.sp,
), ),

View File

@ -48,3 +48,13 @@ class CommentBlackEvent {
} }
class CommentBlackMoreEvent { class CommentBlackMoreEvent {
} }
class CallRefreshCircle {
String circleId = "";
CallRefreshCircle(String id);
}
class ScrollToTop {
}

View File

@ -172,7 +172,7 @@ String filterSensitiveWords(String input, List<String> sensitiveWords) {
} }
String getAgeCOntent(int gender, int age, int role, int orientation) { String getAgeCOntent(int gender, int age, int role, int orientation) {
return "${getGenderContent(gender)}.${age}.${getRoleContent(role)}.${getOrientationContent(orientation)}"; return "${getGenderContent(gender)}·${age}·${getRoleContent(role)}·${getOrientationContent(orientation)}";
} }
String getGenderContent(int number) { String getGenderContent(int number) {