fix: 动态渲染异常
This commit is contained in:
@ -8,7 +8,9 @@ class FollowUpModel {
|
|||||||
List<UpItem>? upList;
|
List<UpItem>? upList;
|
||||||
|
|
||||||
FollowUpModel.fromJson(Map<String, dynamic> json) {
|
FollowUpModel.fromJson(Map<String, dynamic> json) {
|
||||||
liveUsers = LiveUsers.fromJson(json['live_users']);
|
liveUsers = json['live_users'] != null
|
||||||
|
? LiveUsers.fromJson(json['live_users'])
|
||||||
|
: null;
|
||||||
upList = json['up_list'] != null
|
upList = json['up_list'] != null
|
||||||
? json['up_list'].map<UpItem>((e) => UpItem.fromJson(e)).toList()
|
? json['up_list'].map<UpItem>((e) => UpItem.fromJson(e)).toList()
|
||||||
: [];
|
: [];
|
||||||
|
|||||||
@ -54,6 +54,7 @@ class DynamicsController extends GetxController {
|
|||||||
Box userInfoCache = GStrorage.userInfo;
|
Box userInfoCache = GStrorage.userInfo;
|
||||||
RxBool userLogin = false.obs;
|
RxBool userLogin = false.obs;
|
||||||
var userInfo;
|
var userInfo;
|
||||||
|
RxBool isLoadingDynamic = false.obs;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@ -69,12 +70,14 @@ class DynamicsController extends GetxController {
|
|||||||
if (type == 'init') {
|
if (type == 'init') {
|
||||||
dynamicsList.clear();
|
dynamicsList.clear();
|
||||||
}
|
}
|
||||||
|
isLoadingDynamic.value = true;
|
||||||
var res = await DynamicsHttp.followDynamic(
|
var res = await DynamicsHttp.followDynamic(
|
||||||
page: type == 'init' ? 1 : page,
|
page: type == 'init' ? 1 : page,
|
||||||
type: dynamicsType.value.values,
|
type: dynamicsType.value.values,
|
||||||
offset: offset,
|
offset: offset,
|
||||||
mid: mid.value,
|
mid: mid.value,
|
||||||
);
|
);
|
||||||
|
isLoadingDynamic.value = false;
|
||||||
if (res['status']) {
|
if (res['status']) {
|
||||||
if (type == 'init') {
|
if (type == 'init') {
|
||||||
dynamicsList.value = res['data'].items;
|
dynamicsList.value = res['data'].items;
|
||||||
@ -194,11 +197,15 @@ class DynamicsController extends GetxController {
|
|||||||
return {'status': false, 'msg': '账号未登录'};
|
return {'status': false, 'msg': '账号未登录'};
|
||||||
}
|
}
|
||||||
if (type == 'init') {
|
if (type == 'init') {
|
||||||
upData = FollowUpModel().obs;
|
upData.value.upList = [];
|
||||||
|
upData.value.liveUsers = LiveUsers();
|
||||||
}
|
}
|
||||||
var res = await DynamicsHttp.followUp();
|
var res = await DynamicsHttp.followUp();
|
||||||
if (res['status']) {
|
if (res['status']) {
|
||||||
upData.value = res['data'];
|
upData.value = res['data'];
|
||||||
|
if (upData.value.upList!.isEmpty) {
|
||||||
|
mid.value = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -212,7 +219,7 @@ class DynamicsController extends GetxController {
|
|||||||
|
|
||||||
onRefresh() async {
|
onRefresh() async {
|
||||||
page = 1;
|
page = 1;
|
||||||
queryFollowUp();
|
await queryFollowUp();
|
||||||
await queryFollowDynamic();
|
await queryFollowDynamic();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,7 +239,7 @@ class DynamicsController extends GetxController {
|
|||||||
mid.value = -1;
|
mid.value = -1;
|
||||||
dynamicsType.value = DynamicsType.values[0];
|
dynamicsType.value = DynamicsType.values[0];
|
||||||
initialValue.value = 1;
|
initialValue.value = 1;
|
||||||
SmartDialog.showToast('还原默认加载', alignment: Alignment.topCenter);
|
SmartDialog.showToast('还原默认加载');
|
||||||
dynamicsList.value = [DynamicItemModel()];
|
dynamicsList.value = [DynamicItemModel()];
|
||||||
queryFollowDynamic();
|
queryFollowDynamic();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import 'package:get/get.dart';
|
|||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:pilipala/common/skeleton/dynamic_card.dart';
|
import 'package:pilipala/common/skeleton/dynamic_card.dart';
|
||||||
import 'package:pilipala/common/widgets/http_error.dart';
|
import 'package:pilipala/common/widgets/http_error.dart';
|
||||||
|
import 'package:pilipala/common/widgets/no_data.dart';
|
||||||
import 'package:pilipala/models/dynamics/result.dart';
|
import 'package:pilipala/models/dynamics/result.dart';
|
||||||
import 'package:pilipala/pages/main/index.dart';
|
import 'package:pilipala/pages/main/index.dart';
|
||||||
import 'package:pilipala/utils/event_bus.dart';
|
import 'package:pilipala/utils/event_bus.dart';
|
||||||
@ -152,14 +153,12 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
.textTheme
|
.textTheme
|
||||||
.labelMedium!
|
.labelMedium!
|
||||||
.fontSize)),
|
.fontSize)),
|
||||||
// 4: Text(
|
4: Text('专栏',
|
||||||
// '专栏',
|
style: TextStyle(
|
||||||
// style: TextStyle(
|
fontSize: Theme.of(context)
|
||||||
// fontSize: Theme.of(context)
|
.textTheme
|
||||||
// .textTheme
|
.labelMedium!
|
||||||
// .labelMedium!
|
.fontSize)),
|
||||||
// .fontSize),
|
|
||||||
// ),
|
|
||||||
},
|
},
|
||||||
padding: 13.0,
|
padding: 13.0,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@ -186,22 +185,22 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Obx(
|
// Obx(
|
||||||
() => Visibility(
|
// () => Visibility(
|
||||||
visible: _dynamicsController.userLogin.value,
|
// visible: _dynamicsController.userLogin.value,
|
||||||
child: Positioned(
|
// child: Positioned(
|
||||||
right: 4,
|
// right: 4,
|
||||||
top: 0,
|
// top: 0,
|
||||||
bottom: 0,
|
// bottom: 0,
|
||||||
child: IconButton(
|
// child: IconButton(
|
||||||
padding: EdgeInsets.zero,
|
// padding: EdgeInsets.zero,
|
||||||
onPressed: () =>
|
// onPressed: () =>
|
||||||
{feedBack(), _dynamicsController.resetSearch()},
|
// {feedBack(), _dynamicsController.resetSearch()},
|
||||||
icon: const Icon(Icons.history, size: 21),
|
// icon: const Icon(Icons.history, size: 21),
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -240,15 +239,25 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
List<DynamicItemModel> list =
|
List<DynamicItemModel> list =
|
||||||
_dynamicsController.dynamicsList;
|
_dynamicsController.dynamicsList;
|
||||||
return Obx(
|
return Obx(
|
||||||
() => list.isEmpty
|
() {
|
||||||
? skeleton()
|
if (list.isEmpty) {
|
||||||
: SliverList(
|
if (_dynamicsController.isLoadingDynamic.value) {
|
||||||
delegate:
|
return skeleton();
|
||||||
SliverChildBuilderDelegate((context, index) {
|
} else {
|
||||||
|
return const NoData();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return SliverList(
|
||||||
|
delegate: SliverChildBuilderDelegate(
|
||||||
|
(context, index) {
|
||||||
return DynamicPanel(item: list[index]);
|
return DynamicPanel(item: list[index]);
|
||||||
}, childCount: list.length),
|
},
|
||||||
|
childCount: list.length,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
return HttpError(
|
return HttpError(
|
||||||
errMsg: data['msg'],
|
errMsg: data['msg'],
|
||||||
|
|||||||
@ -31,7 +31,9 @@ class _UpPanelState extends State<UpPanel> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
upList = widget.upData!.upList!;
|
upList = widget.upData!.upList!;
|
||||||
|
if (widget.upData!.liveUsers != null) {
|
||||||
liveList = widget.upData!.liveUsers!.items!;
|
liveList = widget.upData!.liveUsers!.items!;
|
||||||
|
}
|
||||||
upList.insert(
|
upList.insert(
|
||||||
0,
|
0,
|
||||||
UpItem(
|
UpItem(
|
||||||
@ -66,6 +68,7 @@ class _UpPanelState extends State<UpPanel> {
|
|||||||
controller: scrollController,
|
controller: scrollController,
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
|
if (liveList.isNotEmpty) ...[
|
||||||
for (int i = 0; i < liveList.length; i++) ...[
|
for (int i = 0; i < liveList.length; i++) ...[
|
||||||
upItemBuild(liveList[i], i)
|
upItemBuild(liveList[i], i)
|
||||||
],
|
],
|
||||||
@ -73,8 +76,12 @@ class _UpPanelState extends State<UpPanel> {
|
|||||||
indent: 20,
|
indent: 20,
|
||||||
endIndent: 40,
|
endIndent: 40,
|
||||||
width: 26,
|
width: 26,
|
||||||
color: Theme.of(context).primaryColor.withOpacity(0.5),
|
color: Theme.of(context)
|
||||||
|
.colorScheme
|
||||||
|
.primary
|
||||||
|
.withOpacity(0.5),
|
||||||
),
|
),
|
||||||
|
],
|
||||||
for (int i = 0; i < upList.length; i++) ...[
|
for (int i = 0; i < upList.length; i++) ...[
|
||||||
upItemBuild(upList[i], i)
|
upItemBuild(upList[i], i)
|
||||||
],
|
],
|
||||||
@ -125,7 +132,8 @@ class _UpPanelState extends State<UpPanel> {
|
|||||||
double itemWidth = contentWidth + itemPadding.horizontal;
|
double itemWidth = contentWidth + itemPadding.horizontal;
|
||||||
double screenWidth = MediaQuery.of(context).size.width;
|
double screenWidth = MediaQuery.of(context).size.width;
|
||||||
double moveDistance = 0.0;
|
double moveDistance = 0.0;
|
||||||
if ((upLen - i - 0.5) * itemWidth > screenWidth / 2) {
|
if (itemWidth * (upList.length + liveList.length) <= screenWidth) {
|
||||||
|
} else if ((upLen - i - 0.5) * itemWidth > screenWidth / 2) {
|
||||||
moveDistance =
|
moveDistance =
|
||||||
(i + liveLen + 0.5) * itemWidth + 46 - screenWidth / 2;
|
(i + liveLen + 0.5) * itemWidth + 46 - screenWidth / 2;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user