Skip to content

Commit

Permalink
DEV UPDATE:Upgrade picture page performance
Browse files Browse the repository at this point in the history
  • Loading branch information
misakajimmy committed Feb 21, 2023
1 parent 68e75ea commit 1039ae6
Show file tree
Hide file tree
Showing 5 changed files with 260 additions and 255 deletions.
19 changes: 14 additions & 5 deletions lib/routes/picture/pictureDetail.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:cached_network_image/cached_network_image.dart';
import 'package:dio/dio.dart';
import 'package:extended_image/extended_image.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';

Expand Down Expand Up @@ -33,11 +34,19 @@ class _PictureDetailState extends State<PictureDetail> {

_save(String url) async {
try {
var response = await Dio()
.get(url, options: Options(responseType: ResponseType.bytes));
final result = await ImageGallerySaver.saveImage(
Uint8List.fromList(response.data),
);
if (url.endsWith("gif")) {
var appDocDir = await getTemporaryDirectory();
String savePath = appDocDir.path + "/tmp.gif";
await Dio().download(url, savePath);
final result = await ImageGallerySaver.saveFile(savePath);
print(result);
} else {
var response = await Dio()
.get(url, options: Options(responseType: ResponseType.bytes));
final result = await ImageGallerySaver.saveImage(
Uint8List.fromList(response.data),
);
}
Fluttertoast.showToast(
msg: "存图成功👌",
toastLength: Toast.LENGTH_SHORT,
Expand Down
214 changes: 102 additions & 112 deletions lib/routes/picture/pictureList.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:eoeFans/models/index.dart';
import 'package:eoeFans/models/member.dart';
import 'package:eoeFans/models/picturesRequest.dart';
import 'package:eoeFans/routes/picture/pictureMemberFilter.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:eoeFans/routes/picture/pictureSwiper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
Expand All @@ -22,13 +23,13 @@ class PictureList extends StatefulWidget {

class _PictureListState extends State<PictureList> {
RefreshController _refreshController =
RefreshController(initialRefresh: false);
RefreshController(initialRefresh: false);

int _page = 0;
int _totalLength = 0;
bool _loading = false;
MemberEnum? _memberFilter;
List<Dynamic> dynamicList = [];
List<Widget> listWidgets = [];

@override
void initState() {
Expand All @@ -37,25 +38,7 @@ class _PictureListState extends State<PictureList> {
super.initState();
}

_initListWidgets() {
listWidgets = [
StaggeredGridTile.count(
crossAxisCellCount: 4,
mainAxisCellCount: 1,
child: Center(
child: Container(
child: PictureMemberFilter(
filter: _memberFilter,
updateFilterMember: (MemberEnum? value) {
_memberFilter = value;
_reloadPictures();
},
),
),
),
)
];
}
_initListWidgets() {}

_getPictures() async {
setState(() {
Expand Down Expand Up @@ -90,31 +73,22 @@ class _PictureListState extends State<PictureList> {
: await Api(context).picturesLatest(param);
if (pictures.result.length != 0) {
setState(() {
dynamicList = [...dynamicList, ...pictures.result];
listWidgets = [
...listWidgets,
...pictures.result.map(
(e) {
return StaggeredGridTile.count(
crossAxisCellCount: 2,
mainAxisCellCount: 3,
child: Card(
clipBehavior: Clip.antiAliasWithSaveLayer,
child: PictureSwiper(
dynamicId: e.dynamic_id.toString(),
images: e.pictures.map((e) => e.img_src).toList(),
),
),
);
},
).toList()
];
dynamicList.addAll(pictures.result);
_loading = false;
});
} else {
await Future.delayed(Duration(seconds: 5), () {
_getPictures();
});
Fluttertoast.showToast(
msg: "已经到头了",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 1,
backgroundColor: Colors.red,
textColor: Colors.white,
fontSize: 16.0,
);
// await Future.delayed(Duration(seconds: 5), () {
// _getPictures();
// });
}
}

Expand Down Expand Up @@ -142,74 +116,90 @@ class _PictureListState extends State<PictureList> {
@override
Widget build(BuildContext context) {
return SmartRefresher(
enablePullDown: true,
enablePullUp: true,
header: WaterDropHeader(),
footer: CustomFooter(builder: (BuildContext context, LoadStatus? mode) {
Widget body;
if (mode == LoadStatus.idle) {
body = Text("上拉加载");
} else if (mode == LoadStatus.loading) {
body = CupertinoActivityIndicator();
} else if (mode == LoadStatus.failed) {
body = Text("加载失败!点击重试!");
} else if (mode == LoadStatus.canLoading) {
body = Text("松手,加载更多!");
} else {
body = Text("没有更多数据了!");
}
return Container(
child: Center(child: body),
);
}),
controller: _refreshController,
onRefresh: _onRefresh,
onLoading: _onLoading,
child: StaggeredGrid.count(
crossAxisCount: 4,
mainAxisSpacing: 4,
crossAxisSpacing: 4,
children: listWidgets,
),
// child: ListView.builder(
// itemBuilder: (c, i) => Container(
// child: i == 0
// ? SizedBox(
// width: double.infinity,
// height: 84,
// child: PictureMemberFilter(
// filter: _memberFilter,
// updateFilterMember: (MemberEnum? value) {
// _memberFilter = value;
// _reloadPictures();
// },
// ),
// )
// : SizedBox(
// width: double.infinity,
// height: 480,
// child: Card(
// clipBehavior: Clip.antiAliasWithSaveLayer,
// child: PictureSwiper(
// dynamicId: dynamicList[i].dynamic_id.toString(),
// images: dynamicList[i]
// .pictures
// .map((e) => e.img_src)
// .toList(),
// ),
// ),
// ),
//
// // child: Center(
// // child: Image(
// // image: CachedNetworkImageProvider(dynamicList[i].pictures[0].img_src),
// // fit: BoxFit.fitWidth,
// // width: double.infinity,
// // ),
// // ),
// ),
// itemCount: dynamicList.length,
// ),
);
enablePullDown: true,
enablePullUp: true,
header: WaterDropHeader(),
footer: CustomFooter(builder: (BuildContext context, LoadStatus? mode) {
Widget body;
if (mode == LoadStatus.idle) {
body = Text("上拉加载");
} else if (mode == LoadStatus.loading) {
body = CupertinoActivityIndicator();
} else if (mode == LoadStatus.failed) {
body = Text("加载失败!点击重试!");
} else if (mode == LoadStatus.canLoading) {
body = Text("松手,加载更多!");
} else {
body = Text("没有更多数据了!");
}
return Container(
child: Center(child: body),
);
}),
controller: _refreshController,
onRefresh: _onRefresh,
onLoading: _onLoading,
child: CustomScrollView(
slivers: [
SliverList(
delegate: SliverChildListDelegate([
Container(
margin: const EdgeInsets.only(top: 8.0),
child: PictureMemberFilter(
filter: _memberFilter,
updateFilterMember: (MemberEnum? value) {
_memberFilter = value;
_reloadPictures();
},
),
)
]),
),
SliverMasonryGrid.count(
crossAxisCount: 2,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
childCount: dynamicList.length,
itemBuilder: (context, index) {
return Container(
height: 240,
width: double.infinity,
child: Card(
clipBehavior: Clip.antiAliasWithSaveLayer,
child: PictureSwiper(
dynamicId: dynamicList[index].dynamic_id.toString(),
images: dynamicList[index]
.pictures
.map((e) => e.img_src)
.toList(),
),
),
);
},
),
// MasonryGridView.count(
// crossAxisCount: 2,
// mainAxisSpacing: 2,
// crossAxisSpacing: 4,
// itemCount: dynamicList.length,
// itemBuilder: (context, index) {
// return Container(
// height: 240,
// width: double.infinity,
// child: Card(
// clipBehavior: Clip.antiAliasWithSaveLayer,
// child: PictureSwiper(
// dynamicId: dynamicList[index].dynamic_id.toString(),
// images: dynamicList[index]
// .pictures
// .map((e) => e.img_src)
// .toList(),
// ),
// ),
// );
// },
// ),
],
));
}
}
13 changes: 9 additions & 4 deletions lib/routes/picture/pictureSwiper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ class PictureSwiper extends StatelessWidget {
context,
MaterialPageRoute(
builder: (context) {
return PictureDetail(index: index, images: images);
return PictureDetail(
index: index, images: images);
},
),
);
Expand Down Expand Up @@ -97,9 +98,13 @@ class PictureSwiper extends StatelessWidget {
),
onPressed: () async {
if (dynamicId != null) {
var _url = 'bilibili://following/detail/' + dynamicId!;
if (!await launchUrl(Uri.parse(_url))) {
throw 'Could not launch $_url';
try {
var _url = 'bilibili://following/detail/' + dynamicId!;
if (!await launchUrl(Uri.parse(_url))) {
throw 'Could not launch $_url';
}
} catch (e) {
print(e);
}
}
},
Expand Down
Loading

0 comments on commit 1039ae6

Please sign in to comment.