reason

修改框架适配首页逻辑

......@@ -8,6 +8,7 @@ import 'package:Parlando/account/models/upload_avatar_entity.dart';
import 'package:Parlando/account/models/user_entity.dart';
import 'package:Parlando/category/models/category_entity.dart';
import 'package:Parlando/category/models/category_item_entity.dart';
import 'package:Parlando/home/models/home_entity.dart';
import 'package:Parlando/home/models/setting_entity.dart';
import 'package:Parlando/login/models/auth_entity.dart';
import 'package:Parlando/models/upload_entity.dart';
......@@ -35,6 +36,12 @@ class JsonConvert {
CategoryDataMetaPagination.fromJson,
(CategoryError).toString(): CategoryError.fromJson,
(CategoryItemEntity).toString(): CategoryItemEntity.fromJson,
(HomeEntity).toString(): HomeEntity.fromJson,
(HomeData).toString(): HomeData.fromJson,
(HomeDataData).toString(): HomeDataData.fromJson,
(HomeDataMeta).toString(): HomeDataMeta.fromJson,
(HomeDataMetaPagination).toString(): HomeDataMetaPagination.fromJson,
(HomeError).toString(): HomeError.fromJson,
(SettingEntity).toString(): SettingEntity.fromJson,
(SettingData).toString(): SettingData.fromJson,
(SettingDataLoginSetting).toString(): SettingDataLoginSetting.fromJson,
......@@ -208,6 +215,39 @@ class JsonConvert {
(Map<String, dynamic> e) => CategoryItemEntity.fromJson(e))
.toList() as M;
}
if (<HomeEntity>[] is M) {
return data
.map<HomeEntity>((Map<String, dynamic> e) => HomeEntity.fromJson(e))
.toList() as M;
}
if (<HomeData>[] is M) {
return data
.map<HomeData>((Map<String, dynamic> e) => HomeData.fromJson(e))
.toList() as M;
}
if (<HomeDataData>[] is M) {
return data
.map<HomeDataData>(
(Map<String, dynamic> e) => HomeDataData.fromJson(e))
.toList() as M;
}
if (<HomeDataMeta>[] is M) {
return data
.map<HomeDataMeta>(
(Map<String, dynamic> e) => HomeDataMeta.fromJson(e))
.toList() as M;
}
if (<HomeDataMetaPagination>[] is M) {
return data
.map<HomeDataMetaPagination>(
(Map<String, dynamic> e) => HomeDataMetaPagination.fromJson(e))
.toList() as M;
}
if (<HomeError>[] is M) {
return data
.map<HomeError>((Map<String, dynamic> e) => HomeError.fromJson(e))
.toList() as M;
}
if (<SettingEntity>[] is M) {
return data
.map<SettingEntity>(
......@@ -310,7 +350,8 @@ class JsonConvert {
static M? fromJsonAsT<M>(dynamic json) {
if (json is List) {
return _getListChildType<M>(json.map((e) => e as Map<String, dynamic>).toList());
return _getListChildType<M>(
json.map((e) => e as Map<String, dynamic>).toList());
} else {
return jsonConvert.asT<M>(json);
}
......
import 'package:Parlando/generated/json/base/json_convert_content.dart';
import 'package:Parlando/home/models/home_entity.dart';
HomeEntity $HomeEntityFromJson(Map<String, dynamic> json) {
final HomeEntity homeEntity = HomeEntity();
final String? status = jsonConvert.convert<String>(json['status']);
if (status != null) {
homeEntity.status = status;
}
final int? code = jsonConvert.convert<int>(json['code']);
if (code != null) {
homeEntity.code = code;
}
final String? message = jsonConvert.convert<String>(json['message']);
if (message != null) {
homeEntity.message = message;
}
final HomeData? data = jsonConvert.convert<HomeData>(json['data']);
if (data != null) {
homeEntity.data = data;
}
final HomeError? error = jsonConvert.convert<HomeError>(json['error']);
if (error != null) {
homeEntity.error = error;
}
return homeEntity;
}
Map<String, dynamic> $HomeEntityToJson(HomeEntity entity) {
final Map<String, dynamic> data = <String, dynamic>{};
data['status'] = entity.status;
data['code'] = entity.code;
data['message'] = entity.message;
data['data'] = entity.data?.toJson();
data['error'] = entity.error?.toJson();
return data;
}
HomeData $HomeDataFromJson(Map<String, dynamic> json) {
final HomeData homeData = HomeData();
final List<HomeDataData>? data =
jsonConvert.convertListNotNull<HomeDataData>(json['data']);
if (data != null) {
homeData.data = data;
}
final HomeDataMeta? meta = jsonConvert.convert<HomeDataMeta>(json['meta']);
if (meta != null) {
homeData.meta = meta;
}
return homeData;
}
Map<String, dynamic> $HomeDataToJson(HomeData entity) {
final Map<String, dynamic> data = <String, dynamic>{};
data['data'] = entity.data?.map((v) => v.toJson()).toList();
data['meta'] = entity.meta?.toJson();
return data;
}
HomeDataData $HomeDataDataFromJson(Map<String, dynamic> json) {
final HomeDataData homeDataData = HomeDataData();
final int? id = jsonConvert.convert<int>(json['id']);
if (id != null) {
homeDataData.id = id;
}
final String? userId = jsonConvert.convert<String>(json['user_id']);
if (userId != null) {
homeDataData.userId = userId;
}
final String? title = jsonConvert.convert<String>(json['title']);
if (title != null) {
homeDataData.title = title;
}
final String? content = jsonConvert.convert<String>(json['content']);
if (content != null) {
homeDataData.content = content;
}
final String? url = jsonConvert.convert<String>(json['url']);
if (url != null) {
homeDataData.url = url;
}
final String? type = jsonConvert.convert<String>(json['type']);
if (type != null) {
homeDataData.type = type;
}
final String? duration = jsonConvert.convert<String>(json['duration']);
if (duration != null) {
homeDataData.duration = duration;
}
final String? size = jsonConvert.convert<String>(json['size']);
if (size != null) {
homeDataData.size = size;
}
final String? poemId = jsonConvert.convert<String>(json['poem_id']);
if (poemId != null) {
homeDataData.poemId = poemId;
}
final String? tempId = jsonConvert.convert<String>(json['temp_id']);
if (tempId != null) {
homeDataData.tempId = tempId;
}
final String? thumbnail = jsonConvert.convert<String>(json['thumbnail']);
if (thumbnail != null) {
homeDataData.thumbnail = thumbnail;
}
final String? bgm = jsonConvert.convert<String>(json['bgm']);
if (bgm != null) {
homeDataData.bgm = bgm;
}
final String? praise = jsonConvert.convert<String>(json['praise']);
if (praise != null) {
homeDataData.praise = praise;
}
final String? view = jsonConvert.convert<String>(json['view']);
if (view != null) {
homeDataData.view = view;
}
final String? collect = jsonConvert.convert<String>(json['collect']);
if (collect != null) {
homeDataData.collect = collect;
}
final String? share = jsonConvert.convert<String>(json['share']);
if (share != null) {
homeDataData.share = share;
}
final String? comment = jsonConvert.convert<String>(json['comment']);
if (comment != null) {
homeDataData.comment = comment;
}
final String? state = jsonConvert.convert<String>(json['state']);
if (state != null) {
homeDataData.state = state;
}
final String? isPublish = jsonConvert.convert<String>(json['is_publish']);
if (isPublish != null) {
homeDataData.isPublish = isPublish;
}
final String? isCheck = jsonConvert.convert<String>(json['is_check']);
if (isCheck != null) {
homeDataData.isCheck = isCheck;
}
final String? createdAt = jsonConvert.convert<String>(json['created_at']);
if (createdAt != null) {
homeDataData.createdAt = createdAt;
}
final String? updatedAt = jsonConvert.convert<String>(json['updated_at']);
if (updatedAt != null) {
homeDataData.updatedAt = updatedAt;
}
return homeDataData;
}
Map<String, dynamic> $HomeDataDataToJson(HomeDataData entity) {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = entity.id;
data['user_id'] = entity.userId;
data['title'] = entity.title;
data['content'] = entity.content;
data['url'] = entity.url;
data['type'] = entity.type;
data['duration'] = entity.duration;
data['size'] = entity.size;
data['poem_id'] = entity.poemId;
data['temp_id'] = entity.tempId;
data['thumbnail'] = entity.thumbnail;
data['bgm'] = entity.bgm;
data['praise'] = entity.praise;
data['view'] = entity.view;
data['collect'] = entity.collect;
data['share'] = entity.share;
data['comment'] = entity.comment;
data['state'] = entity.state;
data['is_publish'] = entity.isPublish;
data['is_check'] = entity.isCheck;
data['created_at'] = entity.createdAt;
data['updated_at'] = entity.updatedAt;
return data;
}
HomeDataMeta $HomeDataMetaFromJson(Map<String, dynamic> json) {
final HomeDataMeta homeDataMeta = HomeDataMeta();
final HomeDataMetaPagination? pagination =
jsonConvert.convert<HomeDataMetaPagination>(json['pagination']);
if (pagination != null) {
homeDataMeta.pagination = pagination;
}
return homeDataMeta;
}
Map<String, dynamic> $HomeDataMetaToJson(HomeDataMeta entity) {
final Map<String, dynamic> data = <String, dynamic>{};
data['pagination'] = entity.pagination?.toJson();
return data;
}
HomeDataMetaPagination $HomeDataMetaPaginationFromJson(
Map<String, dynamic> json) {
final HomeDataMetaPagination homeDataMetaPagination =
HomeDataMetaPagination();
final int? total = jsonConvert.convert<int>(json['total']);
if (total != null) {
homeDataMetaPagination.total = total;
}
final int? count = jsonConvert.convert<int>(json['count']);
if (count != null) {
homeDataMetaPagination.count = count;
}
final int? perPage = jsonConvert.convert<int>(json['per_page']);
if (perPage != null) {
homeDataMetaPagination.perPage = perPage;
}
final int? currentPage = jsonConvert.convert<int>(json['current_page']);
if (currentPage != null) {
homeDataMetaPagination.currentPage = currentPage;
}
return homeDataMetaPagination;
}
Map<String, dynamic> $HomeDataMetaPaginationToJson(
HomeDataMetaPagination entity) {
final Map<String, dynamic> data = <String, dynamic>{};
data['total'] = entity.total;
data['count'] = entity.count;
data['per_page'] = entity.perPage;
data['current_page'] = entity.currentPage;
return data;
}
HomeError $HomeErrorFromJson(Map<String, dynamic> json) {
final HomeError homeError = HomeError();
return homeError;
}
Map<String, dynamic> $HomeErrorToJson(HomeError entity) {
final Map<String, dynamic> data = <String, dynamic>{};
return data;
}
import 'dart:convert';
import 'package:Parlando/generated/json/base/json_field.dart';
import 'package:Parlando/generated/json/home_entity.g.dart';
@JsonSerializable()
class HomeEntity {
String? status;
int? code;
String? message;
HomeData? data;
HomeError? error;
HomeEntity();
factory HomeEntity.fromJson(Map<String, dynamic> json) =>
$HomeEntityFromJson(json);
Map<String, dynamic> toJson() => $HomeEntityToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
@JsonSerializable()
class HomeData {
List<HomeDataData>? data;
HomeDataMeta? meta;
HomeData();
factory HomeData.fromJson(Map<String, dynamic> json) =>
$HomeDataFromJson(json);
Map<String, dynamic> toJson() => $HomeDataToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
@JsonSerializable()
class HomeDataData {
int? id;
@JSONField(name: "user_id")
String? userId;
String? title;
String? content;
String? url;
String? type;
String? duration;
String? size;
@JSONField(name: "poem_id")
String? poemId;
@JSONField(name: "temp_id")
String? tempId;
String? thumbnail;
String? bgm;
String? praise;
String? view;
String? collect;
String? share;
String? comment;
String? state;
@JSONField(name: "is_publish")
String? isPublish;
@JSONField(name: "is_check")
String? isCheck;
@JSONField(name: "created_at")
String? createdAt;
@JSONField(name: "updated_at")
String? updatedAt;
HomeDataData();
factory HomeDataData.fromJson(Map<String, dynamic> json) =>
$HomeDataDataFromJson(json);
Map<String, dynamic> toJson() => $HomeDataDataToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
@JsonSerializable()
class HomeDataMeta {
HomeDataMetaPagination? pagination;
HomeDataMeta();
factory HomeDataMeta.fromJson(Map<String, dynamic> json) =>
$HomeDataMetaFromJson(json);
Map<String, dynamic> toJson() => $HomeDataMetaToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
@JsonSerializable()
class HomeDataMetaPagination {
int? total;
int? count;
@JSONField(name: "per_page")
int? perPage;
@JSONField(name: "current_page")
int? currentPage;
HomeDataMetaPagination();
factory HomeDataMetaPagination.fromJson(Map<String, dynamic> json) =>
$HomeDataMetaPaginationFromJson(json);
Map<String, dynamic> toJson() => $HomeDataMetaPaginationToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
@JsonSerializable()
class HomeError {
HomeError();
factory HomeError.fromJson(Map<String, dynamic> json) =>
$HomeErrorFromJson(json);
Map<String, dynamic> toJson() => $HomeErrorToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
......@@ -273,8 +273,8 @@ class _LoginPageState extends State<LoginPage>
AppleIDAuthorizationScopes.fullName,
],
);
print("authorizationCode:" + credential.authorizationCode);
print("identityToken:" + credential.identityToken.toString());
print("authorizationCode:${credential.authorizationCode}");
print("identityToken:${credential.identityToken}");
},
),
)
......
......@@ -9,6 +9,7 @@ class HttpApi {
static const String immersive = 'immersive';
static const String avatar = 'avatar';
static const String user = 'user';
static const String home = 'home';
static const String search = 'search/repositories';
static const String subscriptions = 'users/simplezhli/subscriptions';
static const String upload = 'uuc/upload-inco';
......
import 'dart:async';
import 'package:Parlando/events/trans_event.dart';
import 'package:Parlando/home/models/home_entity.dart';
import 'package:Parlando/net/dio_utils.dart';
import 'package:Parlando/net/http_api.dart';
import 'package:Parlando/util/toast_utils.dart';
import 'package:flutter/material.dart';
import 'package:Parlando/category/category_router.dart';
import 'package:Parlando/poem/poem_router.dart';
......@@ -16,6 +20,7 @@ import 'package:Parlando/tiktok/widgets/tiktok_video_button_column.dart';
import 'package:Parlando/tiktok/widgets/tiktok_video_poem.dart';
import 'package:Parlando/widgets/bars/home_types_bar.dart';
import 'package:Parlando/widgets/my_app_bar.dart';
import 'package:getwidget/getwidget.dart';
import 'package:video_player/video_player.dart';
import 'poem_detail.dart';
......@@ -31,13 +36,12 @@ class PoemPage extends StatefulWidget {
class _PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
TikTokScaffoldController tkController = TikTokScaffoldController();
final PageController _pageController = PageController();
final TikTokVideoListController _videoListController =
TikTokVideoListController();
List<UserVideo> videoDataList = [];
late StreamSubscription bus;
bool isLoading = false;
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
......@@ -56,15 +60,32 @@ class _PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
@override
void initState() {
videoDataList = UserVideo.fetchVideo();
WidgetsBinding.instance.addObserver(this);
isLoading = true;
DioUtils.instance.asyncRequestNetwork<HomeEntity>(
Method.get,
HttpApi.home,
params: [],
onSuccess: (data) {
isLoading = false;
setState(() {});
List<UserVideo> videoDataList = <UserVideo>[];
for (HomeDataData data in data!.data!.data!) {
videoDataList.add(
UserVideo(
image: '',
url: data.url!,
desc: data.content,
),
);
}
_videoListController.init(
pageController: _pageController,
initialList: videoDataList
.map(
(e) => VPVideoController(
videoInfo: e,
builder: () => VideoPlayerController.asset(e.url),
builder: () => VideoPlayerController.network(e.url),
),
)
.toList(),
......@@ -73,12 +94,13 @@ class _PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
.map(
(e) => VPVideoController(
videoInfo: e,
builder: () => VideoPlayerController.asset(e.url),
builder: () => VideoPlayerController.network(e.url),
),
)
.toList();
},
);
_videoListController.addListener(() {
setState(() {});
});
......@@ -95,7 +117,12 @@ class _PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
bus = eventBus.on<TransEvent>().listen((event) {
_videoListController.currentPlayer.pause();
});
},
onError: (code, msg) {
Toast.show("获取数据失败,请稍候再试...");
isLoading = false;
},
);
super.initState();
}
......@@ -124,7 +151,9 @@ class _PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
);
// 组合
return TikTokScaffold(
return isLoading
? const GFLoader()
: TikTokScaffold(
controller: tkController,
header: MyAppBar(
isBack: false,
......@@ -195,7 +224,7 @@ class _PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
// 手势播放与自然播放都会产生暂停按钮状态变化,待处理
hidePauseIcon: !player.showPauseIcon.value,
aspectRatio: 9 / 16.0,
key: Key(data.url + '$i'),
key: Key('${data.url}$i'),
tag: data.url,
bottomPadding: hasBottomPadding ? 16.px : 16.px,
onSingleTap: () async {
......@@ -208,8 +237,8 @@ class _PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
},
onAddFavorite: () {},
rightButtonColumn: buttons,
leftPoemArea: poem,
topInfo: topInfo,
// leftPoemArea: poem,
// topInfo: topInfo,
video: currentVideo,
);
return currentVideo;
......