Skip to content

Commit

Permalink
DEV UPDATE:1.6.2
Browse files Browse the repository at this point in the history
  • Loading branch information
misakajimmy committed Feb 16, 2023
1 parent d7e7ed4 commit bda052d
Show file tree
Hide file tree
Showing 6 changed files with 190 additions and 124 deletions.
126 changes: 88 additions & 38 deletions lib/routes/picture/pictureList.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:eoe_fans/routes/picture/pictureMemberFilter.dart';
import 'package:eoe_fans/routes/picture/pictureSwiper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

class PictureList extends StatefulWidget {
Expand All @@ -27,13 +28,35 @@ class _PictureListState extends State<PictureList> {
bool _loading = false;
MemberEnum? _memberFilter;
List<Dynamic> dynamicList = [];
List<Widget> listWidgets = [];

@override
void initState() {
_getPictures();
_initListWidgets();
super.initState();
}

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

_getPictures() async {
setState(() {
_loading = true;
Expand Down Expand Up @@ -68,6 +91,24 @@ class _PictureListState extends State<PictureList> {
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()
];
_loading = false;
});
} else {
Expand All @@ -79,6 +120,9 @@ class _PictureListState extends State<PictureList> {

_reloadPictures({int? page}) async {
dynamicList = [];
setState(() {
_initListWidgets();
});
_page = page ?? 0;
await _getPictures();
}
Expand Down Expand Up @@ -121,45 +165,51 @@ class _PictureListState extends State<PictureList> {
controller: _refreshController,
onRefresh: _onRefresh,
onLoading: _onLoading,
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,
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,
// ),
);
}
}
20 changes: 12 additions & 8 deletions lib/routes/picture/pictureMemberFilter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,14 @@ class _PictureMemberFilterState extends State<PictureMemberFilter> {
@override
Widget build(BuildContext context) {
return Container(
child: GridView.count(
crossAxisCount: 5,
childAspectRatio: 1.0,
children: MemberEnum.values
.map(
(m) => GestureDetector(
child: Center(
child: GridView.count(
shrinkWrap: true,
crossAxisCount: 5,
childAspectRatio: 1.0,
children: MemberEnum.values
.map(
(m) => GestureDetector(
onTap: () {
setState(() {
if (widget.filter == m) {
Expand Down Expand Up @@ -79,7 +81,9 @@ class _PictureMemberFilterState extends State<PictureMemberFilter> {
),
),
)
.toList(),
));
.toList(),
),
),
);
}
}
2 changes: 1 addition & 1 deletion lib/routes/picture/picturePage.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class _PicturePageState extends State<PicturePage> {
),
),
body: Container(
padding: const EdgeInsets.only(left: 4, right: 4, top: 8, bottom: 40),
padding: const EdgeInsets.only(left: 4, right: 4, bottom: 40),
child: const TabBarView(
children: [
PictureList(pageType: PicturePageType.recommend),
Expand Down
159 changes: 85 additions & 74 deletions lib/routes/picture/pictureSwiper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart';
import 'package:eoe_fans/routes/picture/pictureDetail.dart';
import 'package:extended_image/extended_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_swiper_null_safety/flutter_swiper_null_safety.dart';
import 'package:url_launcher/url_launcher.dart';

Expand All @@ -13,89 +14,99 @@ class PictureSwiper extends StatelessWidget {

@override
Widget build(BuildContext context) {
return Stack(
children: [
Swiper(
itemBuilder: (BuildContext context, int index) {
var image = CachedNetworkImageProvider(images[index]);
return Stack(
children: [
Positioned(
top: 0,
bottom: 0,
left: 0,
right: 0,
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return PictureDetail(index: index, images: images);
},
return GestureDetector(
onLongPress: () {
HapticFeedback.heavyImpact();
// showMaterialModalBottomSheet(
// context: context,
// builder: (context) => Container(),
// );
print('long press');
},
child: Stack(
children: [
Swiper(
itemBuilder: (BuildContext context, int index) {
var image = CachedNetworkImageProvider(images[index]);
return Stack(
children: [
Positioned(
top: 0,
bottom: 0,
left: 0,
right: 0,
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return PictureDetail(index: index, images: images);
},
),
);
},
child: Container(
child: ExtendedImage(
image: image,
fit: BoxFit.cover,
),
);
},
child: Container(
child: ExtendedImage(
image: image,
fit: BoxFit.cover,
),
),
),
),
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Container(
height: 40,
decoration: new BoxDecoration(
color: Color.fromRGBO(0, 0, 0, .3),
gradient: LinearGradient(
colors: [Colors.transparent, Colors.black],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Container(
height: 40,
decoration: new BoxDecoration(
color: Color.fromRGBO(0, 0, 0, .3),
gradient: LinearGradient(
colors: [Colors.transparent, Colors.black],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
),
),
)
],
);
},
itemCount: images.length,
onTap: (int index) async {},
pagination: const SwiperPagination(
alignment: Alignment.bottomLeft,
builder: DotSwiperPaginationBuilder(
color: Colors.white30, // 其他点的颜色
activeColor: Colors.white,
space: 2, // 点与点之间的距离
activeSize: 15, // 当前点的大小
)
],
);
},
itemCount: images.length,
onTap: (int index) async {},
pagination: const SwiperPagination(
alignment: Alignment.bottomLeft,
builder: DotSwiperPaginationBuilder(
color: Colors.white30, // 其他点的颜色
activeColor: Colors.white,
space: 2, // 点与点之间的距离
activeSize: 15, // 当前点的大小
),
),
autoplay: false,
),
autoplay: false,
),
Positioned(
bottom: -4,
right: 8,
child: IconButton(
icon: Icon(
Icons.arrow_forward_ios,
size: 16,
color: Colors.white,
),
onPressed: () async {
if (dynamicId != null) {
var _url = 'bilibili://following/detail/' + dynamicId!;
if (!await launchUrl(Uri.parse(_url))) {
throw 'Could not launch $_url';
Positioned(
bottom: -4,
right: 8,
child: IconButton(
icon: Icon(
Icons.arrow_forward_ios,
size: 16,
color: Colors.white,
),
onPressed: () async {
if (dynamicId != null) {
var _url = 'bilibili://following/detail/' + dynamicId!;
if (!await launchUrl(Uri.parse(_url))) {
throw 'Could not launch $_url';
}
}
}
},
),
)
],
},
),
)
],
),
);
}
}
Loading

0 comments on commit bda052d

Please sign in to comment.