mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
mod: handle dispose
This commit is contained in:
@@ -33,6 +33,7 @@ class AnimatedDialogState extends State<AnimatedDialog>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
controller!.removeListener(() {});
|
||||||
controller!.dispose();
|
controller!.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ class _BangumiPageState extends State<BangumiPage>
|
|||||||
final BangumiController _bangumiController = Get.put(BangumiController());
|
final BangumiController _bangumiController = Get.put(BangumiController());
|
||||||
late Future? _futureBuilderFuture;
|
late Future? _futureBuilderFuture;
|
||||||
late Future? _futureBuilderFutureFollow;
|
late Future? _futureBuilderFutureFollow;
|
||||||
late ScrollController scrollController;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
@@ -34,17 +33,17 @@ class _BangumiPageState extends State<BangumiPage>
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
scrollController = _bangumiController.scrollController;
|
|
||||||
StreamController<bool> mainStream =
|
StreamController<bool> mainStream =
|
||||||
Get.find<MainController>().bottomBarStream;
|
Get.find<MainController>().bottomBarStream;
|
||||||
StreamController<bool> searchBarStream =
|
StreamController<bool> searchBarStream =
|
||||||
Get.find<HomeController>().searchBarStream;
|
Get.find<HomeController>().searchBarStream;
|
||||||
_futureBuilderFuture = _bangumiController.queryBangumiListFeed();
|
_futureBuilderFuture = _bangumiController.queryBangumiListFeed();
|
||||||
_futureBuilderFutureFollow = _bangumiController.queryBangumiFollow();
|
_futureBuilderFutureFollow = _bangumiController.queryBangumiFollow();
|
||||||
scrollController.addListener(
|
_bangumiController.scrollController.addListener(
|
||||||
() async {
|
() async {
|
||||||
if (scrollController.position.pixels >=
|
if (_bangumiController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
_bangumiController.scrollController.position.maxScrollExtent -
|
||||||
|
200) {
|
||||||
EasyThrottle.throttle('my-throttler', const Duration(seconds: 1), () {
|
EasyThrottle.throttle('my-throttler', const Duration(seconds: 1), () {
|
||||||
_bangumiController.isLoadingMore = true;
|
_bangumiController.isLoadingMore = true;
|
||||||
_bangumiController.onLoad();
|
_bangumiController.onLoad();
|
||||||
@@ -52,7 +51,7 @@ class _BangumiPageState extends State<BangumiPage>
|
|||||||
}
|
}
|
||||||
|
|
||||||
final ScrollDirection direction =
|
final ScrollDirection direction =
|
||||||
scrollController.position.userScrollDirection;
|
_bangumiController.scrollController.position.userScrollDirection;
|
||||||
if (direction == ScrollDirection.forward) {
|
if (direction == ScrollDirection.forward) {
|
||||||
mainStream.add(true);
|
mainStream.add(true);
|
||||||
searchBarStream.add(true);
|
searchBarStream.add(true);
|
||||||
@@ -66,7 +65,8 @@ class _BangumiPageState extends State<BangumiPage>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
scrollController.removeListener(() {});
|
_bangumiController.scrollController.removeListener(() {});
|
||||||
|
_bangumiController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ class _BlackListPageState extends State<BlackListPage> {
|
|||||||
_blackListController.blackList.map<int>((e) => e.mid!).toList();
|
_blackListController.blackList.map<int>((e) => e.mid!).toList();
|
||||||
localCache.put(LocalCacheKey.blackMidsList, blackMidsList);
|
localCache.put(LocalCacheKey.blackMidsList, blackMidsList);
|
||||||
scrollController.removeListener(() {});
|
scrollController.removeListener(() {});
|
||||||
|
scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -182,8 +182,9 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
scrollController.removeListener(() {});
|
titleStreamC.close();
|
||||||
fabAnimationCtr.dispose();
|
fabAnimationCtr.dispose();
|
||||||
|
scrollController.removeListener(() {});
|
||||||
scrollController.dispose();
|
scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
final DynamicsController _dynamicsController = Get.put(DynamicsController());
|
final DynamicsController _dynamicsController = Get.put(DynamicsController());
|
||||||
late Future _futureBuilderFutureUp;
|
late Future _futureBuilderFutureUp;
|
||||||
Box userInfoCache = GStorage.userInfo;
|
Box userInfoCache = GStorage.userInfo;
|
||||||
late ScrollController scrollController;
|
|
||||||
late UpPanelPosition upPanelPosition;
|
late UpPanelPosition upPanelPosition;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -57,12 +56,12 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
SettingBoxKey.upPanelPosition,
|
SettingBoxKey.upPanelPosition,
|
||||||
defaultValue: UpPanelPosition.leftFixed.code)];
|
defaultValue: UpPanelPosition.leftFixed.code)];
|
||||||
print('upPanelPosition: $upPanelPosition');
|
print('upPanelPosition: $upPanelPosition');
|
||||||
scrollController = _dynamicsController.scrollController;
|
|
||||||
if (GStorage.setting
|
if (GStorage.setting
|
||||||
.get(SettingBoxKey.dynamicsShowAllFollowedUp, defaultValue: false)) {
|
.get(SettingBoxKey.dynamicsShowAllFollowedUp, defaultValue: false)) {
|
||||||
scrollController.addListener(() {
|
_dynamicsController.scrollController.addListener(() {
|
||||||
if (scrollController.position.pixels >=
|
if (_dynamicsController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 300) {
|
_dynamicsController.scrollController.position.maxScrollExtent -
|
||||||
|
300) {
|
||||||
EasyThrottle.throttle('following', const Duration(seconds: 1), () {
|
EasyThrottle.throttle('following', const Duration(seconds: 1), () {
|
||||||
_dynamicsController.queryFollowing2();
|
_dynamicsController.queryFollowing2();
|
||||||
});
|
});
|
||||||
@@ -75,6 +74,8 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
void dispose() {
|
void dispose() {
|
||||||
_dynamicsController.tabController.removeListener(() {});
|
_dynamicsController.tabController.removeListener(() {});
|
||||||
_dynamicsController.tabController.dispose();
|
_dynamicsController.tabController.dispose();
|
||||||
|
_dynamicsController.scrollController.removeListener(() {});
|
||||||
|
_dynamicsController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,8 +97,8 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
}
|
}
|
||||||
Map data = snapshot.data;
|
Map data = snapshot.data;
|
||||||
if (data['status']) {
|
if (data['status']) {
|
||||||
return Obx(() => UpPanel(
|
return Obx(() => UpPanel(_dynamicsController.upData.value,
|
||||||
_dynamicsController.upData.value, scrollController));
|
_dynamicsController.scrollController));
|
||||||
} else {
|
} else {
|
||||||
return const SizedBox();
|
return const SizedBox();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ class _FansPageState extends State<FansPage> {
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
scrollController.removeListener(() {});
|
scrollController.removeListener(() {});
|
||||||
|
scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,13 @@ class _FavPageState extends State<FavPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ class _FavDetailPageState extends State<FavDetailPage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
titleStreamC.close();
|
||||||
|
_controller.removeListener(() {});
|
||||||
_controller.dispose();
|
_controller.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,18 +16,16 @@ class FavSearchPage extends StatefulWidget {
|
|||||||
|
|
||||||
class _FavSearchPageState extends State<FavSearchPage> {
|
class _FavSearchPageState extends State<FavSearchPage> {
|
||||||
final FavSearchController _favSearchCtr = Get.put(FavSearchController());
|
final FavSearchController _favSearchCtr = Get.put(FavSearchController());
|
||||||
late ScrollController scrollController;
|
|
||||||
late int searchType;
|
late int searchType;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
searchType = int.parse(Get.parameters['searchType']!);
|
searchType = int.parse(Get.parameters['searchType']!);
|
||||||
scrollController = _favSearchCtr.scrollController;
|
_favSearchCtr.scrollController.addListener(
|
||||||
scrollController.addListener(
|
|
||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (_favSearchCtr.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 300) {
|
_favSearchCtr.scrollController.position.maxScrollExtent - 300) {
|
||||||
EasyThrottle.throttle('fav', const Duration(seconds: 1), () {
|
EasyThrottle.throttle('fav', const Duration(seconds: 1), () {
|
||||||
_favSearchCtr.onLoad();
|
_favSearchCtr.onLoad();
|
||||||
});
|
});
|
||||||
@@ -38,8 +36,9 @@ class _FavSearchPageState extends State<FavSearchPage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
scrollController.removeListener(() {});
|
_favSearchCtr.searchFocusNode.dispose();
|
||||||
scrollController.dispose();
|
_favSearchCtr.scrollController.removeListener(() {});
|
||||||
|
_favSearchCtr.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +85,7 @@ class _FavSearchPageState extends State<FavSearchPage> {
|
|||||||
)
|
)
|
||||||
: _favSearchCtr.favList.isNotEmpty
|
: _favSearchCtr.favList.isNotEmpty
|
||||||
? ListView.builder(
|
? ListView.builder(
|
||||||
controller: scrollController,
|
controller: _favSearchCtr.scrollController,
|
||||||
itemCount: _favSearchCtr.favList.length + 1,
|
itemCount: _favSearchCtr.favList.length + 1,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
if (index == _favSearchCtr.favList.length) {
|
if (index == _favSearchCtr.favList.length) {
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ class FollowPage extends StatefulWidget {
|
|||||||
class _FollowPageState extends State<FollowPage> {
|
class _FollowPageState extends State<FollowPage> {
|
||||||
late String mid;
|
late String mid;
|
||||||
late FollowController _followController;
|
late FollowController _followController;
|
||||||
final ScrollController scrollController = ScrollController();
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -41,8 +40,7 @@ class _FollowPageState extends State<FollowPage> {
|
|||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () => Get.toNamed('/followSearch?mid=$mid'),
|
onPressed: () => Get.toNamed('/followSearch?mid=$mid'),
|
||||||
icon: const Icon(Icons.search_outlined),
|
icon: const Icon(Icons.search_outlined),
|
||||||
tooltip: '搜索'
|
tooltip: '搜索'),
|
||||||
),
|
|
||||||
PopupMenuButton(
|
PopupMenuButton(
|
||||||
icon: const Icon(Icons.more_vert),
|
icon: const Icon(Icons.more_vert),
|
||||||
itemBuilder: (BuildContext context) => <PopupMenuEntry>[
|
itemBuilder: (BuildContext context) => <PopupMenuEntry>[
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:easy_debounce/easy_throttle.dart';
|
import 'package:easy_debounce/easy_throttle.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:PiliPalaX/common/widgets/http_error.dart';
|
import 'package:PiliPalaX/common/widgets/http_error.dart';
|
||||||
@@ -20,6 +19,14 @@ class _FollowSearchPageState extends State<FollowSearchPage> {
|
|||||||
late Future? _futureBuilder;
|
late Future? _futureBuilder;
|
||||||
final ScrollController scrollController = ScrollController();
|
final ScrollController scrollController = ScrollController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_followSearchController.searchFocusNode.dispose();
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ class _HistoryPageState extends State<HistoryPage> {
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
scrollController.removeListener(() {});
|
scrollController.removeListener(() {});
|
||||||
|
scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,12 @@ class HomeController extends GetxController with GetTickerProviderStateMixin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
tabController.animation!.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
void searchDefault() async {
|
void searchDefault() async {
|
||||||
var res = await Request().get(Api.searchDefault);
|
var res = await Request().get(Api.searchDefault);
|
||||||
if (res.data['code'] == 0) {
|
if (res.data['code'] == 0) {
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
|
|||||||
final HotController _hotController = Get.put(HotController());
|
final HotController _hotController = Get.put(HotController());
|
||||||
List videoList = [];
|
List videoList = [];
|
||||||
Future? _futureBuilderFuture;
|
Future? _futureBuilderFuture;
|
||||||
late ScrollController scrollController;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
@@ -35,15 +34,14 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_futureBuilderFuture = _hotController.queryHotFeed('init');
|
_futureBuilderFuture = _hotController.queryHotFeed('init');
|
||||||
scrollController = _hotController.scrollController;
|
|
||||||
StreamController<bool> mainStream =
|
StreamController<bool> mainStream =
|
||||||
Get.find<MainController>().bottomBarStream;
|
Get.find<MainController>().bottomBarStream;
|
||||||
StreamController<bool> searchBarStream =
|
StreamController<bool> searchBarStream =
|
||||||
Get.find<HomeController>().searchBarStream;
|
Get.find<HomeController>().searchBarStream;
|
||||||
scrollController.addListener(
|
_hotController.scrollController.addListener(
|
||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (_hotController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
_hotController.scrollController.position.maxScrollExtent - 200) {
|
||||||
if (!_hotController.isLoadingMore) {
|
if (!_hotController.isLoadingMore) {
|
||||||
_hotController.isLoadingMore = true;
|
_hotController.isLoadingMore = true;
|
||||||
_hotController.onLoad();
|
_hotController.onLoad();
|
||||||
@@ -51,7 +49,7 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final ScrollDirection direction =
|
final ScrollDirection direction =
|
||||||
scrollController.position.userScrollDirection;
|
_hotController.scrollController.position.userScrollDirection;
|
||||||
if (direction == ScrollDirection.forward) {
|
if (direction == ScrollDirection.forward) {
|
||||||
mainStream.add(true);
|
mainStream.add(true);
|
||||||
searchBarStream.add(true);
|
searchBarStream.add(true);
|
||||||
@@ -65,7 +63,8 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
scrollController.removeListener(() {});
|
_hotController.scrollController.removeListener(() {});
|
||||||
|
_hotController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,14 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
|
|||||||
scrollListener();
|
scrollListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
fabAnimationCtr.dispose();
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
void scrollListener() {
|
void scrollListener() {
|
||||||
scrollController = _htmlRenderCtr.scrollController;
|
scrollController = _htmlRenderCtr.scrollController;
|
||||||
scrollController.addListener(
|
scrollController.addListener(
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ class _LivePageState extends State<LivePage>
|
|||||||
with AutomaticKeepAliveClientMixin {
|
with AutomaticKeepAliveClientMixin {
|
||||||
final LiveController _liveController = Get.put(LiveController());
|
final LiveController _liveController = Get.put(LiveController());
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
late ScrollController scrollController;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
@@ -36,15 +35,14 @@ class _LivePageState extends State<LivePage>
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_futureBuilderFuture = _liveController.queryLiveList('init');
|
_futureBuilderFuture = _liveController.queryLiveList('init');
|
||||||
scrollController = _liveController.scrollController;
|
|
||||||
StreamController<bool> mainStream =
|
StreamController<bool> mainStream =
|
||||||
Get.find<MainController>().bottomBarStream;
|
Get.find<MainController>().bottomBarStream;
|
||||||
StreamController<bool> searchBarStream =
|
StreamController<bool> searchBarStream =
|
||||||
Get.find<HomeController>().searchBarStream;
|
Get.find<HomeController>().searchBarStream;
|
||||||
scrollController.addListener(
|
_liveController.scrollController.addListener(
|
||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (_liveController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
_liveController.scrollController.position.maxScrollExtent - 200) {
|
||||||
EasyThrottle.throttle('liveList', const Duration(milliseconds: 200),
|
EasyThrottle.throttle('liveList', const Duration(milliseconds: 200),
|
||||||
() {
|
() {
|
||||||
_liveController.onLoad();
|
_liveController.onLoad();
|
||||||
@@ -52,7 +50,7 @@ class _LivePageState extends State<LivePage>
|
|||||||
}
|
}
|
||||||
|
|
||||||
final ScrollDirection direction =
|
final ScrollDirection direction =
|
||||||
scrollController.position.userScrollDirection;
|
_liveController.scrollController.position.userScrollDirection;
|
||||||
if (direction == ScrollDirection.forward) {
|
if (direction == ScrollDirection.forward) {
|
||||||
mainStream.add(true);
|
mainStream.add(true);
|
||||||
searchBarStream.add(true);
|
searchBarStream.add(true);
|
||||||
@@ -66,7 +64,8 @@ class _LivePageState extends State<LivePage>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
scrollController.removeListener(() {});
|
_liveController.scrollController.removeListener(() {});
|
||||||
|
_liveController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class _LiveRoomPageState extends State<LiveRoomPage> {
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
floating?.dispose();
|
floating?.dispose();
|
||||||
plPlayerController!.dispose();
|
plPlayerController?.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -326,14 +326,13 @@ class LoginPageController extends GetxController
|
|||||||
String captchaKey = '';
|
String captchaKey = '';
|
||||||
Get.dialog(AlertDialog(
|
Get.dialog(AlertDialog(
|
||||||
title: const Text("本次登录需要验证您的手机号"),
|
title: const Text("本次登录需要验证您的手机号"),
|
||||||
content: Column(
|
content: Column(children: [
|
||||||
children:[
|
|
||||||
Text(accountInfo['hindTel'] ?? '未能获取手机号'),
|
Text(accountInfo['hindTel'] ?? '未能获取手机号'),
|
||||||
TextField(
|
TextField(
|
||||||
controller: _textFieldController,
|
controller: _textFieldController,
|
||||||
decoration: const InputDecoration(hintText: "请输入短信验证码"),
|
decoration: const InputDecoration(hintText: "请输入短信验证码"),
|
||||||
),]),
|
),
|
||||||
|
]),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
TextButton(
|
TextButton(
|
||||||
child: const Text("发送验证码 "),
|
child: const Text("发送验证码 "),
|
||||||
@@ -349,7 +348,8 @@ class LoginPageController extends GetxController
|
|||||||
captchaData.token = preCaptureRes['data']['recaptcha_token']!;
|
captchaData.token = preCaptureRes['data']['recaptcha_token']!;
|
||||||
|
|
||||||
getCaptcha(geeGt, geeChallenge, () async {
|
getCaptcha(geeGt, geeChallenge, () async {
|
||||||
var safeCenterSendSmsCodeRes = await LoginHttp.safeCenterSmsCode(
|
var safeCenterSendSmsCodeRes =
|
||||||
|
await LoginHttp.safeCenterSmsCode(
|
||||||
tmpCode: currentUri.queryParameters['tmp_token']!,
|
tmpCode: currentUri.queryParameters['tmp_token']!,
|
||||||
geeChallenge: geeChallenge,
|
geeChallenge: geeChallenge,
|
||||||
geeSeccode: captchaData.seccode!,
|
geeSeccode: captchaData.seccode!,
|
||||||
@@ -376,7 +376,8 @@ class LoginPageController extends GetxController
|
|||||||
SmartDialog.showToast("请输入短信验证码");
|
SmartDialog.showToast("请输入短信验证码");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var safeCenterSmsVerifyRes = await LoginHttp.safeCenterSmsVerify(
|
var safeCenterSmsVerifyRes =
|
||||||
|
await LoginHttp.safeCenterSmsVerify(
|
||||||
code: code,
|
code: code,
|
||||||
tmpCode: currentUri.queryParameters['tmp_token']!,
|
tmpCode: currentUri.queryParameters['tmp_token']!,
|
||||||
requestId: currentUri.queryParameters['request_id']!,
|
requestId: currentUri.queryParameters['request_id']!,
|
||||||
@@ -396,7 +397,6 @@ class LoginPageController extends GetxController
|
|||||||
],
|
],
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (data['token_info'] == null || data['cookie_info'] == null) {
|
if (data['token_info'] == null || data['cookie_info'] == null) {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ class _LoginPageState extends State<LoginPage> {
|
|||||||
// 二维码生成时间
|
// 二维码生成时间
|
||||||
bool showPassword = false;
|
bool showPassword = false;
|
||||||
GlobalKey globalKey = GlobalKey();
|
GlobalKey globalKey = GlobalKey();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -33,6 +34,10 @@ class _LoginPageState extends State<LoginPage> {
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_loginPageCtr.dispose();
|
_loginPageCtr.dispose();
|
||||||
|
_loginPageCtr.telTextController.dispose();
|
||||||
|
_loginPageCtr.usernameTextController.dispose();
|
||||||
|
_loginPageCtr.passwordTextController.dispose();
|
||||||
|
_loginPageCtr.smsCodeTextController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ class _MediaPageState extends State<MediaPage>
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
mediaController.scrollController.removeListener(() {});
|
mediaController.scrollController.removeListener(() {});
|
||||||
|
mediaController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,9 +18,15 @@ class MemberArchivePage extends StatefulWidget {
|
|||||||
class _MemberArchivePageState extends State<MemberArchivePage> {
|
class _MemberArchivePageState extends State<MemberArchivePage> {
|
||||||
late MemberArchiveController _memberArchivesController;
|
late MemberArchiveController _memberArchivesController;
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
late ScrollController scrollController;
|
|
||||||
late int mid;
|
late int mid;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_memberArchivesController.scrollController.removeListener(() {});
|
||||||
|
_memberArchivesController.scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -29,11 +35,12 @@ class _MemberArchivePageState extends State<MemberArchivePage> {
|
|||||||
_memberArchivesController =
|
_memberArchivesController =
|
||||||
Get.put(MemberArchiveController(), tag: heroTag);
|
Get.put(MemberArchiveController(), tag: heroTag);
|
||||||
_futureBuilderFuture = _memberArchivesController.getMemberArchive('init');
|
_futureBuilderFuture = _memberArchivesController.getMemberArchive('init');
|
||||||
scrollController = _memberArchivesController.scrollController;
|
_memberArchivesController.scrollController.addListener(
|
||||||
scrollController.addListener(
|
|
||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (_memberArchivesController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
_memberArchivesController
|
||||||
|
.scrollController.position.maxScrollExtent -
|
||||||
|
200) {
|
||||||
EasyThrottle.throttle(
|
EasyThrottle.throttle(
|
||||||
'member_archives', const Duration(milliseconds: 500), () {
|
'member_archives', const Duration(milliseconds: 500), () {
|
||||||
_memberArchivesController.onLoad();
|
_memberArchivesController.onLoad();
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ class MemberDynamicsPage extends StatefulWidget {
|
|||||||
class _MemberDynamicsPageState extends State<MemberDynamicsPage> {
|
class _MemberDynamicsPageState extends State<MemberDynamicsPage> {
|
||||||
late MemberDynamicsController _memberDynamicController;
|
late MemberDynamicsController _memberDynamicController;
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
late ScrollController scrollController;
|
|
||||||
late int mid;
|
late int mid;
|
||||||
late bool dynamicsWaterfallFlow;
|
late bool dynamicsWaterfallFlow;
|
||||||
|
|
||||||
@@ -34,11 +33,11 @@ class _MemberDynamicsPageState extends State<MemberDynamicsPage> {
|
|||||||
Get.put(MemberDynamicsController(), tag: heroTag);
|
Get.put(MemberDynamicsController(), tag: heroTag);
|
||||||
_futureBuilderFuture =
|
_futureBuilderFuture =
|
||||||
_memberDynamicController.getMemberDynamic('onRefresh');
|
_memberDynamicController.getMemberDynamic('onRefresh');
|
||||||
scrollController = _memberDynamicController.scrollController;
|
_memberDynamicController.scrollController.addListener(
|
||||||
scrollController.addListener(
|
|
||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (_memberDynamicController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
_memberDynamicController.scrollController.position.maxScrollExtent -
|
||||||
|
200) {
|
||||||
EasyThrottle.throttle(
|
EasyThrottle.throttle(
|
||||||
'member_dynamics', const Duration(milliseconds: 1000), () {
|
'member_dynamics', const Duration(milliseconds: 1000), () {
|
||||||
_memberDynamicController.onLoad();
|
_memberDynamicController.onLoad();
|
||||||
@@ -53,6 +52,7 @@ class _MemberDynamicsPageState extends State<MemberDynamicsPage> {
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_memberDynamicController.scrollController.removeListener(() {});
|
_memberDynamicController.scrollController.removeListener(() {});
|
||||||
|
_memberDynamicController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ class _MemberSearchPageState extends State<MemberSearchPage>
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
// _tabController.dispose();
|
// _tabController.dispose();
|
||||||
|
_memberSearchCtr.searchFocusNode.dispose();
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,18 +17,24 @@ class _MemberSeasonsPageState extends State<MemberSeasonsPage> {
|
|||||||
final MemberSeasonsController _memberSeasonsController =
|
final MemberSeasonsController _memberSeasonsController =
|
||||||
Get.put(MemberSeasonsController());
|
Get.put(MemberSeasonsController());
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
late ScrollController scrollController;
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_memberSeasonsController.scrollController.removeListener(() {});
|
||||||
|
_memberSeasonsController.scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_futureBuilderFuture =
|
_futureBuilderFuture =
|
||||||
_memberSeasonsController.getSeasonDetail('onRefresh');
|
_memberSeasonsController.getSeasonDetail('onRefresh');
|
||||||
scrollController = _memberSeasonsController.scrollController;
|
_memberSeasonsController.scrollController.addListener(
|
||||||
scrollController.addListener(
|
|
||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (_memberSeasonsController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
_memberSeasonsController.scrollController.position.maxScrollExtent -
|
||||||
|
200) {
|
||||||
EasyThrottle.throttle(
|
EasyThrottle.throttle(
|
||||||
'member_archives', const Duration(milliseconds: 500), () {
|
'member_archives', const Duration(milliseconds: 500), () {
|
||||||
_memberSeasonsController.onLoad();
|
_memberSeasonsController.onLoad();
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
// ignore_for_file: no_leading_underscores_for_local_identifiers
|
// ignore_for_file: no_leading_underscores_for_local_identifiers
|
||||||
|
|
||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:PiliPalaX/common/constants.dart';
|
import 'package:PiliPalaX/common/constants.dart';
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'package:easy_debounce/easy_throttle.dart';
|
import 'package:easy_debounce/easy_throttle.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
|
import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
|
||||||
|
|
||||||
@@ -25,6 +24,13 @@ class _AtMePageState extends State<AtMePage> {
|
|||||||
_scrollController.addListener(_scrollListener);
|
_scrollController.addListener(_scrollListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_scrollController.removeListener(_scrollListener);
|
||||||
|
_scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
Future _scrollListener() async {
|
Future _scrollListener() async {
|
||||||
if (_scrollController.position.pixels >=
|
if (_scrollController.position.pixels >=
|
||||||
_scrollController.position.maxScrollExtent - 200) {
|
_scrollController.position.maxScrollExtent - 200) {
|
||||||
@@ -63,8 +69,8 @@ class _AtMePageState extends State<AtMePage> {
|
|||||||
itemBuilder: (_, int i) {
|
itemBuilder: (_, int i) {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
String? nativeUri = _atMeController
|
String? nativeUri =
|
||||||
.msgFeedAtMeList[i].item?.nativeUri;
|
_atMeController.msgFeedAtMeList[i].item?.nativeUri;
|
||||||
if (nativeUri != null) {
|
if (nativeUri != null) {
|
||||||
PiliScheme.routePush(Uri.parse(nativeUri));
|
PiliScheme.routePush(Uri.parse(nativeUri));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'package:easy_debounce/easy_throttle.dart';
|
import 'package:easy_debounce/easy_throttle.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
|
import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
|
||||||
|
|
||||||
@@ -26,6 +25,13 @@ class _LikeMePageState extends State<LikeMePage> {
|
|||||||
_scrollController.addListener(_scrollListener);
|
_scrollController.addListener(_scrollListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_scrollController.removeListener(_scrollListener);
|
||||||
|
_scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
Future _scrollListener() async {
|
Future _scrollListener() async {
|
||||||
if (_scrollController.position.pixels >=
|
if (_scrollController.position.pixels >=
|
||||||
_scrollController.position.maxScrollExtent - 200) {
|
_scrollController.position.maxScrollExtent - 200) {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'package:easy_debounce/easy_throttle.dart';
|
import 'package:easy_debounce/easy_throttle.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
|
import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
|
||||||
|
|
||||||
@@ -26,6 +25,13 @@ class _ReplyMePageState extends State<ReplyMePage> {
|
|||||||
_scrollController.addListener(_scrollListener);
|
_scrollController.addListener(_scrollListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_scrollController.removeListener(_scrollListener);
|
||||||
|
_scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
Future _scrollListener() async {
|
Future _scrollListener() async {
|
||||||
if (_scrollController.position.pixels >=
|
if (_scrollController.position.pixels >=
|
||||||
_scrollController.position.maxScrollExtent - 200) {
|
_scrollController.position.maxScrollExtent - 200) {
|
||||||
|
|||||||
@@ -24,6 +24,13 @@ class _SysMsgPageState extends State<SysMsgPage> {
|
|||||||
_scrollController.addListener(_scrollListener);
|
_scrollController.addListener(_scrollListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_scrollController.removeListener(_scrollListener);
|
||||||
|
_scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
Future _scrollListener() async {
|
Future _scrollListener() async {
|
||||||
if (_scrollController.position.pixels >=
|
if (_scrollController.position.pixels >=
|
||||||
_scrollController.position.maxScrollExtent - 200) {
|
_scrollController.position.maxScrollExtent - 200) {
|
||||||
@@ -60,7 +67,8 @@ class _SysMsgPageState extends State<SysMsgPage> {
|
|||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
itemBuilder: (_, int i) {
|
itemBuilder: (_, int i) {
|
||||||
String? content = _sysMsgController.msgFeedSysMsgList[i].content;
|
String? content =
|
||||||
|
_sysMsgController.msgFeedSysMsgList[i].content;
|
||||||
if (content != null) {
|
if (content != null) {
|
||||||
try {
|
try {
|
||||||
dynamic jsonContent = json.decode(content);
|
dynamic jsonContent = json.decode(content);
|
||||||
@@ -73,16 +81,17 @@ class _SysMsgPageState extends State<SysMsgPage> {
|
|||||||
onTap: () {},
|
onTap: () {},
|
||||||
title: Text(
|
title: Text(
|
||||||
"${_sysMsgController.msgFeedSysMsgList[i].title}",
|
"${_sysMsgController.msgFeedSysMsgList[i].title}",
|
||||||
style: Theme.of(context).textTheme.titleMedium!.copyWith(
|
style: Theme.of(context)
|
||||||
color: Theme.of(context).colorScheme.primary
|
.textTheme
|
||||||
),
|
.titleMedium!
|
||||||
|
.copyWith(
|
||||||
|
color: Theme.of(context).colorScheme.primary),
|
||||||
),
|
),
|
||||||
subtitle: Column(
|
subtitle: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 4),
|
const SizedBox(height: 4),
|
||||||
SelectableText(
|
SelectableText("$content",
|
||||||
"$content",
|
|
||||||
style: Theme.of(context)
|
style: Theme.of(context)
|
||||||
.textTheme
|
.textTheme
|
||||||
.bodySmall!
|
.bodySmall!
|
||||||
@@ -101,7 +110,8 @@ class _SysMsgPageState extends State<SysMsgPage> {
|
|||||||
.copyWith(
|
.copyWith(
|
||||||
color: Theme.of(context)
|
color: Theme.of(context)
|
||||||
.colorScheme
|
.colorScheme
|
||||||
.outline.withOpacity(0.8))),
|
.outline
|
||||||
|
.withOpacity(0.8))),
|
||||||
]));
|
]));
|
||||||
},
|
},
|
||||||
separatorBuilder: (BuildContext context, int index) {
|
separatorBuilder: (BuildContext context, int index) {
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:dismissible_page/dismissible_page.dart';
|
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ class _ZonePageState extends State<ZonePage>
|
|||||||
with AutomaticKeepAliveClientMixin {
|
with AutomaticKeepAliveClientMixin {
|
||||||
late ZoneController _zoneController;
|
late ZoneController _zoneController;
|
||||||
Future? _futureBuilderFuture;
|
Future? _futureBuilderFuture;
|
||||||
late ScrollController scrollController;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
@@ -38,15 +37,14 @@ class _ZonePageState extends State<ZonePage>
|
|||||||
super.initState();
|
super.initState();
|
||||||
_zoneController = Get.put(ZoneController(), tag: widget.rid.toString());
|
_zoneController = Get.put(ZoneController(), tag: widget.rid.toString());
|
||||||
_futureBuilderFuture = _zoneController.queryRankFeed('init', widget.rid);
|
_futureBuilderFuture = _zoneController.queryRankFeed('init', widget.rid);
|
||||||
scrollController = _zoneController.scrollController;
|
|
||||||
StreamController<bool> mainStream =
|
StreamController<bool> mainStream =
|
||||||
Get.find<MainController>().bottomBarStream;
|
Get.find<MainController>().bottomBarStream;
|
||||||
StreamController<bool> searchBarStream =
|
StreamController<bool> searchBarStream =
|
||||||
Get.find<HomeController>().searchBarStream;
|
Get.find<HomeController>().searchBarStream;
|
||||||
scrollController.addListener(
|
_zoneController.scrollController.addListener(
|
||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (_zoneController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
_zoneController.scrollController.position.maxScrollExtent - 200) {
|
||||||
if (!_zoneController.isLoadingMore) {
|
if (!_zoneController.isLoadingMore) {
|
||||||
_zoneController.isLoadingMore = true;
|
_zoneController.isLoadingMore = true;
|
||||||
_zoneController.onLoad();
|
_zoneController.onLoad();
|
||||||
@@ -54,7 +52,7 @@ class _ZonePageState extends State<ZonePage>
|
|||||||
}
|
}
|
||||||
|
|
||||||
final ScrollDirection direction =
|
final ScrollDirection direction =
|
||||||
scrollController.position.userScrollDirection;
|
_zoneController.scrollController.position.userScrollDirection;
|
||||||
if (direction == ScrollDirection.forward) {
|
if (direction == ScrollDirection.forward) {
|
||||||
mainStream.add(true);
|
mainStream.add(true);
|
||||||
searchBarStream.add(true);
|
searchBarStream.add(true);
|
||||||
@@ -68,7 +66,8 @@ class _ZonePageState extends State<ZonePage>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
scrollController.removeListener(() {});
|
_zoneController.scrollController.removeListener(() {});
|
||||||
|
_zoneController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,12 +79,12 @@ class _ZonePageState extends State<ZonePage>
|
|||||||
return await _zoneController.onRefresh();
|
return await _zoneController.onRefresh();
|
||||||
},
|
},
|
||||||
child: CustomScrollView(
|
child: CustomScrollView(
|
||||||
controller: scrollController,
|
controller: _zoneController.scrollController,
|
||||||
slivers: [
|
slivers: [
|
||||||
SliverPadding(
|
SliverPadding(
|
||||||
// 单列布局 EdgeInsets.zero
|
// 单列布局 EdgeInsets.zero
|
||||||
padding:
|
padding: const EdgeInsets.fromLTRB(
|
||||||
const EdgeInsets.fromLTRB(StyleString.cardSpace, StyleString.safeSpace, 0, 0),
|
StyleString.cardSpace, StyleString.safeSpace, 0, 0),
|
||||||
sliver: FutureBuilder(
|
sliver: FutureBuilder(
|
||||||
future: _futureBuilderFuture,
|
future: _futureBuilderFuture,
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ class _RcmdPageState extends State<RcmdPage>
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_rcmdController.scrollController.removeListener(() {});
|
_rcmdController.scrollController.removeListener(() {});
|
||||||
|
_rcmdController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,12 @@ class _SearchPageState extends State<SearchPage> with RouteAware {
|
|||||||
_futureBuilderFuture = _searchController.queryHotSearchList();
|
_futureBuilderFuture = _searchController.queryHotSearchList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_searchController.searchFocusNode.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
// 返回当前页面时
|
// 返回当前页面时
|
||||||
void didPopNext() async {
|
void didPopNext() async {
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ class _SearchPanelState extends State<SearchPanel>
|
|||||||
late SearchPanelController _searchPanelController;
|
late SearchPanelController _searchPanelController;
|
||||||
|
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
late ScrollController scrollController;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
@@ -47,10 +46,10 @@ class _SearchPanelState extends State<SearchPanel>
|
|||||||
),
|
),
|
||||||
tag: widget.searchType!.type + widget.keyword!,
|
tag: widget.searchType!.type + widget.keyword!,
|
||||||
);
|
);
|
||||||
scrollController = _searchPanelController.scrollController;
|
_searchPanelController.scrollController.addListener(() async {
|
||||||
scrollController.addListener(() async {
|
if (_searchPanelController.scrollController.position.pixels >=
|
||||||
if (scrollController.position.pixels >=
|
_searchPanelController.scrollController.position.maxScrollExtent -
|
||||||
scrollController.position.maxScrollExtent - 100) {
|
100) {
|
||||||
EasyThrottle.throttle('history', const Duration(seconds: 1), () {
|
EasyThrottle.throttle('history', const Duration(seconds: 1), () {
|
||||||
_searchPanelController.onSearch(type: 'onLoad');
|
_searchPanelController.onSearch(type: 'onLoad');
|
||||||
});
|
});
|
||||||
@@ -61,7 +60,8 @@ class _SearchPanelState extends State<SearchPanel>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
scrollController.removeListener(() {});
|
_searchPanelController.scrollController.removeListener(() {});
|
||||||
|
_searchPanelController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class SearchResultPage extends StatefulWidget {
|
|||||||
class _SearchResultPageState extends State<SearchResultPage>
|
class _SearchResultPageState extends State<SearchResultPage>
|
||||||
with TickerProviderStateMixin {
|
with TickerProviderStateMixin {
|
||||||
late SearchResultController? _searchResultController;
|
late SearchResultController? _searchResultController;
|
||||||
late TabController? _tabController;
|
late TabController _tabController;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -29,6 +29,12 @@ class _SearchResultPageState extends State<SearchResultPage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_tabController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
|||||||
@@ -32,6 +32,13 @@ class _SetDisplayModeState extends State<SetDisplayMode> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
controller.removeListener(() {});
|
||||||
|
controller.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
// 获取所有的mode
|
// 获取所有的mode
|
||||||
Future<void> fetchAll() async {
|
Future<void> fetchAll() async {
|
||||||
preferred = await FlutterDisplayMode.preferred;
|
preferred = await FlutterDisplayMode.preferred;
|
||||||
|
|||||||
@@ -17,17 +17,22 @@ class SubPage extends StatefulWidget {
|
|||||||
class _SubPageState extends State<SubPage> {
|
class _SubPageState extends State<SubPage> {
|
||||||
final SubController _subController = Get.put(SubController());
|
final SubController _subController = Get.put(SubController());
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
late ScrollController scrollController;
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_subController.scrollController.removeListener(() {});
|
||||||
|
_subController.scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_futureBuilderFuture = _subController.querySubFolder();
|
_futureBuilderFuture = _subController.querySubFolder();
|
||||||
scrollController = _subController.scrollController;
|
_subController.scrollController.addListener(
|
||||||
scrollController.addListener(
|
|
||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (_subController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 300) {
|
_subController.scrollController.position.maxScrollExtent - 300) {
|
||||||
EasyThrottle.throttle('history', const Duration(seconds: 1), () {
|
EasyThrottle.throttle('history', const Duration(seconds: 1), () {
|
||||||
_subController.onLoad();
|
_subController.onLoad();
|
||||||
});
|
});
|
||||||
@@ -54,7 +59,7 @@ class _SubPageState extends State<SubPage> {
|
|||||||
Map? data = snapshot.data;
|
Map? data = snapshot.data;
|
||||||
if (data != null && data['status']) {
|
if (data != null && data['status']) {
|
||||||
return Obx(() => CustomScrollView(
|
return Obx(() => CustomScrollView(
|
||||||
controller: scrollController,
|
controller: _subController.scrollController,
|
||||||
physics: const AlwaysScrollableScrollPhysics(),
|
physics: const AlwaysScrollableScrollPhysics(),
|
||||||
slivers: [
|
slivers: [
|
||||||
SliverGrid(
|
SliverGrid(
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ class _SubDetailPageState extends State<SubDetailPage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
titleStreamC.close();
|
||||||
|
_controller.removeListener(() {});
|
||||||
_controller.dispose();
|
_controller.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,14 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
|
|||||||
scrollListener();
|
scrollListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
fabAnimationCtr.dispose();
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
void scrollListener() {
|
void scrollListener() {
|
||||||
scrollController = _videoReplyController.scrollController;
|
scrollController = _videoReplyController.scrollController;
|
||||||
scrollController.addListener(
|
scrollController.addListener(
|
||||||
|
|||||||
@@ -33,9 +33,7 @@ class VideoReplyReplyPanel extends StatefulWidget {
|
|||||||
|
|
||||||
class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
|
class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
|
||||||
late VideoReplyReplyController _videoReplyReplyController;
|
late VideoReplyReplyController _videoReplyReplyController;
|
||||||
late AnimationController replyAnimationCtl;
|
|
||||||
Future? _futureBuilderFuture;
|
Future? _futureBuilderFuture;
|
||||||
late ScrollController scrollController;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -46,11 +44,12 @@ class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
|
|||||||
tag: widget.rpid.toString());
|
tag: widget.rpid.toString());
|
||||||
|
|
||||||
// 上拉加载更多
|
// 上拉加载更多
|
||||||
scrollController = _videoReplyReplyController.scrollController;
|
_videoReplyReplyController.scrollController.addListener(
|
||||||
scrollController.addListener(
|
|
||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (_videoReplyReplyController.scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 300) {
|
_videoReplyReplyController
|
||||||
|
.scrollController.position.maxScrollExtent -
|
||||||
|
300) {
|
||||||
EasyThrottle.throttle('replylist', const Duration(milliseconds: 200),
|
EasyThrottle.throttle('replylist', const Duration(milliseconds: 200),
|
||||||
() {
|
() {
|
||||||
_videoReplyReplyController.queryReplyList(type: 'onLoad');
|
_videoReplyReplyController.queryReplyList(type: 'onLoad');
|
||||||
@@ -66,7 +65,8 @@ class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
// scrollController.dispose();
|
_videoReplyReplyController.scrollController.removeListener(() {});
|
||||||
|
_videoReplyReplyController.scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -262,6 +262,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
appbarStream.close();
|
||||||
floating.dispose();
|
floating.dispose();
|
||||||
videoDetailController.floating?.dispose();
|
videoDetailController.floating?.dispose();
|
||||||
videoIntroController.videoDetail.close();
|
videoIntroController.videoDetail.close();
|
||||||
|
|||||||
@@ -28,6 +28,13 @@ class _WhisperPageState extends State<WhisperPage> {
|
|||||||
_scrollController.addListener(_scrollListener);
|
_scrollController.addListener(_scrollListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_scrollController.removeListener(_scrollListener);
|
||||||
|
_scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
Future _scrollListener() async {
|
Future _scrollListener() async {
|
||||||
if (_scrollController.position.pixels >=
|
if (_scrollController.position.pixels >=
|
||||||
_scrollController.position.maxScrollExtent - 200) {
|
_scrollController.position.maxScrollExtent - 200) {
|
||||||
@@ -201,7 +208,8 @@ class _WhisperPageState extends State<WhisperPage> {
|
|||||||
width: 45,
|
width: 45,
|
||||||
height: 45,
|
height: 45,
|
||||||
type: 'avatar',
|
type: 'avatar',
|
||||||
src: sessionList[i].accountInfo?.face ?? "",
|
src: sessionList[i].accountInfo?.face ??
|
||||||
|
"",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
title: Text(
|
title: Text(
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ class _WhisperDetailPageState extends State<WhisperDetailPage>
|
|||||||
with WidgetsBindingObserver {
|
with WidgetsBindingObserver {
|
||||||
final WhisperDetailController _whisperDetailController =
|
final WhisperDetailController _whisperDetailController =
|
||||||
Get.put(WhisperDetailController());
|
Get.put(WhisperDetailController());
|
||||||
late TextEditingController _replyContentController;
|
|
||||||
final FocusNode replyContentFocusNode = FocusNode();
|
final FocusNode replyContentFocusNode = FocusNode();
|
||||||
final _debouncer = Debouncer(milliseconds: 200); // 设置延迟时间
|
final _debouncer = Debouncer(milliseconds: 200); // 设置延迟时间
|
||||||
late double emoteHeight = 0.0;
|
late double emoteHeight = 0.0;
|
||||||
@@ -35,7 +34,6 @@ class _WhisperDetailPageState extends State<WhisperDetailPage>
|
|||||||
super.initState();
|
super.initState();
|
||||||
WidgetsBinding.instance.addObserver(this);
|
WidgetsBinding.instance.addObserver(this);
|
||||||
_whisperDetailController.querySessionMsg();
|
_whisperDetailController.querySessionMsg();
|
||||||
_replyContentController = _whisperDetailController.replyContentController;
|
|
||||||
_focusListener();
|
_focusListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,17 +80,20 @@ class _WhisperDetailPageState extends State<WhisperDetailPage>
|
|||||||
WidgetsBinding.instance.removeObserver(this);
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
replyContentFocusNode.removeListener(() {});
|
replyContentFocusNode.removeListener(() {});
|
||||||
replyContentFocusNode.dispose();
|
replyContentFocusNode.dispose();
|
||||||
|
_whisperDetailController.replyContentController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
void onChooseEmote(Packages package, Emote emote) {
|
void onChooseEmote(Packages package, Emote emote) {
|
||||||
int cursorPosition = _replyContentController.selection.baseOffset;
|
int cursorPosition =
|
||||||
|
_whisperDetailController.replyContentController.selection.baseOffset;
|
||||||
if (cursorPosition == -1) cursorPosition = 0;
|
if (cursorPosition == -1) cursorPosition = 0;
|
||||||
final String currentText = _replyContentController.text;
|
final String currentText =
|
||||||
|
_whisperDetailController.replyContentController.text;
|
||||||
final String newText = currentText.substring(0, cursorPosition) +
|
final String newText = currentText.substring(0, cursorPosition) +
|
||||||
emote.text! +
|
emote.text! +
|
||||||
currentText.substring(cursorPosition);
|
currentText.substring(cursorPosition);
|
||||||
_replyContentController.value = TextEditingValue(
|
_whisperDetailController.replyContentController.value = TextEditingValue(
|
||||||
text: newText,
|
text: newText,
|
||||||
selection:
|
selection:
|
||||||
TextSelection.collapsed(offset: cursorPosition + emote.text!.length),
|
TextSelection.collapsed(offset: cursorPosition + emote.text!.length),
|
||||||
@@ -261,7 +262,8 @@ class _WhisperDetailPageState extends State<WhisperDetailPage>
|
|||||||
label: '私信输入框',
|
label: '私信输入框',
|
||||||
child: TextField(
|
child: TextField(
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
style: Theme.of(context).textTheme.titleMedium,
|
||||||
controller: _replyContentController,
|
controller:
|
||||||
|
_whisperDetailController.replyContentController,
|
||||||
autofocus: false,
|
autofocus: false,
|
||||||
focusNode: replyContentFocusNode,
|
focusNode: replyContentFocusNode,
|
||||||
decoration: const InputDecoration(
|
decoration: const InputDecoration(
|
||||||
|
|||||||
Reference in New Issue
Block a user