feat: 合并一些代码

dev
Spark 2 weeks ago
parent 8d4a9e519e
commit de6984eff3

@ -0,0 +1,3 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:

@ -0,0 +1,30 @@
// api/api_collection.dart
import 'package:dio/dio.dart';
import 'package:music_player_miao/models/universal_bean.dart';
const String _CollectionURL = 'http://flyingpig.fun:10010/collections';
class CollectionApiMusic {
final Dio dio = Dio();
///
Future<UniversalBean> addCollection({
required int musicId,
required String Authorization,
}) async {
Response response = await dio.post(
_CollectionURL,
queryParameters: {'musicId': musicId},
options: Options(headers: {
'Authorization': Authorization,
'Content-Type': 'application/json;charset=UTF-8'
})
);
print(response.data);
return UniversalBean.formMap(response.data); // UniversalBean
}
}

@ -32,9 +32,10 @@ class commentMusic {
Response response = await dio.post( Response response = await dio.post(
_postComment, _postComment,
data: { data: {
'musicId': musicId, 'content': content,
'password': content, 'MusicId': musicId,
'Authorization': Authorization 'Authorization':Authorization
}, },
options: Options(headers:{'Authorization':Authorization,'Content-Type':'application/json;charset=UTF-8'}) options: Options(headers:{'Authorization':Authorization,'Content-Type':'application/json;charset=UTF-8'})
); );
@ -50,21 +51,26 @@ class getCommentApi {
required String musicId, required String musicId,
required String pageNo, required String pageNo,
required String pageSize, required String pageSize,
required String Authorization required String Authorization,
}) async { }) async {
Response response = await dio.get( Response response = await dio.get(
_postComment, _postComment,
queryParameters: {'musicId':musicId,'pageNo':pageNo,'pageSize':pageSize}, queryParameters: {
options: Options(headers:{'Authorization':Authorization,'Content-Type':'application/json;charset=UTF-8'}) 'musicId': musicId,
'pageNo': pageNo,
'pageSize': pageSize,
},
options: Options(headers: {
'Authorization': Authorization,
'Content-Type': 'application/json;charset=UTF-8',
}),
); );
print(response.data); print(response.data);
return GetCommentBean.formMap(response.data); return GetCommentBean.formMap(response.data);
} }
} }

@ -35,8 +35,7 @@ class ReleaseApi {
queryParameters: {'singerName':singerName,'name':name,'introduce':introduce}, queryParameters: {'singerName':singerName,'name':name,'introduce':introduce},
data: formData, data: formData,
options: Options(headers:{'Authorization':Authorization, options: Options(headers:{'Authorization':Authorization,
'Content-Type':'multipart/form-data;boundary=--------------------------741231434897925203274596', })
'Content-Length':'2858240'})
); );
print(response.data); print(response.data);
return UniversalBean.formMap(response.data); return UniversalBean.formMap(response.data);

@ -1,211 +1,255 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../api/api_music_likes.dart'; // API
import '../api/api_collection.dart'; // API
//
class RankSongsRow extends StatelessWidget { class RankSongsRow extends StatelessWidget {
final Map sObj; final Map sObj;
final VoidCallback onPressedPlay; final VoidCallback onPressedPlay;
final VoidCallback onPressed; final VoidCallback onPressed;
final String? rank; final String? rank;
const RankSongsRow({ const RankSongsRow({
super.key, super.key,
required this.sObj, required this.sObj,
required this.onPressed, required this.onPressed,
required this.onPressedPlay, required this.rank, required this.onPressedPlay,
required this.rank,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
rank: sObj["rank"]; rank: sObj["rank"];
return return Column(
Column( children: [
children: [ Row(
Row( children: [
// mainAxisAlignment: MainAxisAlignment.spaceBetween, Row(
children: [ children: [
Row( SizedBox(
children: [ width: 15,
SizedBox( child: RichText(
width: 15, text: TextSpan(
child: RichText( text: sObj["rank"],
text: TextSpan( style: TextStyle(
text: sObj["rank"], fontSize: getRankFontSize(sObj["rank"]),
style: TextStyle( fontWeight: FontWeight.w700,
fontSize: getRankFontSize(sObj["rank"]), color: Color(0xffCE0000),
fontWeight: FontWeight.w700,
color: Color(0xffCE0000),
),
), ),
), ),
), ),
const SizedBox(width: 10,), ),
ClipRRect( const SizedBox(width: 10),
borderRadius: BorderRadius.circular(10), ClipRRect(
child: Image.asset( borderRadius: BorderRadius.circular(10),
sObj["image"], child: Image.asset(
width: 80, sObj["image"],
height: 80, width: 80,
fit: BoxFit.cover, height: 80,
), fit: BoxFit.cover,
), ),
),
const SizedBox(width: 20,), const SizedBox(width: 20),
SizedBox( SizedBox(
width: 170, width: 170,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
sObj["name"], sObj["name"],
maxLines: 1, maxLines: 1,
style: TextStyle( style: TextStyle(
color: Colors.black, color: Colors.black,
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w400), fontWeight: FontWeight.w400,
), ),
Text( ),
sObj["artists"], Text(
maxLines: 1, sObj["artists"],
style: TextStyle(color: Colors.black, fontSize: 14), maxLines: 1,
) style: TextStyle(color: Colors.black, fontSize: 14),
], )
), ],
), ),
const SizedBox(width: 20,),
],
),
IconButton(
onPressed: (){
_bottomSheet(context);
},
icon: Image.asset(
"assets/img/More.png",
width: 25,
height: 25,
), ),
const SizedBox(width: 20),
],
),
IconButton(
onPressed: () {
_bottomSheet(context);
},
icon: Image.asset(
"assets/img/More.png",
width: 25,
height: 25,
), ),
const SizedBox(height: 20,) ),
], const SizedBox(height: 20)
), ],
const SizedBox(height: 10,) ),
], const SizedBox(height: 10)
],
); );
} }
getRankFontSize(String rank) {
double getRankFontSize(String rank) {
switch (rank) { switch (rank) {
case '1': case '2':case '3': case '1':
return 30.0; case '2':
case '3':
return 30.0;
default: default:
return 20.0; return 20.0;
} }
} }
Future _bottomSheet(BuildContext context){
Future _bottomSheet(BuildContext context) {
return showModalBottomSheet( return showModalBottomSheet(
context: context, context: context,
backgroundColor: Colors.white, backgroundColor: Colors.white,
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.vertical(top: Radius.circular(30))), shape: const RoundedRectangleBorder(
builder: (context) =>Container( borderRadius: BorderRadius.vertical(top: Radius.circular(30))),
height: 210, builder: (context) => Container(
padding: const EdgeInsets.only(top: 20), height: 210,
child: Column( padding: const EdgeInsets.only(top: 20),
crossAxisAlignment: CrossAxisAlignment.stretch, child: Column(
children: [ crossAxisAlignment: CrossAxisAlignment.stretch,
Row( children: [
mainAxisAlignment: MainAxisAlignment.spaceEvenly, Row(
children: [ mainAxisAlignment: MainAxisAlignment.spaceEvenly,
Column( children: [
children: [ Column(
IconButton( children: [
onPressed: (){}, IconButton(
icon: Image.asset("assets/img/list_add.png"), onPressed: () {
iconSize: 60, // TODO:
), },
Text("加入歌单") icon: Image.asset("assets/img/list_add.png"),
], iconSize: 60,
), ),
Column( Text("加入歌单"),
children: [ ],
IconButton(
onPressed: (){},
icon: Image.asset("assets/img/list_download.png"),
iconSize: 60,
),
Text("下载")
],
),
Column(
children: [
IconButton(
onPressed: (){},
icon: Image.asset("assets/img/list_collection.png"),
iconSize: 60,
),
Text("收藏")
],
),
Column(
children: [
IconButton(
onPressed: (){},
icon: Image.asset("assets/img/list_good.png"),
iconSize: 60,
),
Text("点赞")
],
),
Column(
children: [
IconButton(
onPressed: (){},
icon: Image.asset("assets/img/list_comment.png"),
iconSize: 60,
),
Text("评论")
],
),
],
),
const SizedBox(height: 10,),
ElevatedButton(
onPressed: () {
// Get.to(()=>const MainTabView());
},
child: Text(
"查看详情页",
style: const TextStyle(color:Colors.black,fontSize: 18),
), ),
style: ElevatedButton.styleFrom( Column(
backgroundColor: const Color(0xffE6F4F1), children: [
padding: const EdgeInsets.symmetric(vertical: 8), IconButton(
tapTargetSize: MaterialTapTargetSize.shrinkWrap, onPressed: () {
shape: RoundedRectangleBorder( // TODO:
borderRadius: BorderRadius.zero, },
), icon: Image.asset("assets/img/list_download.png"),
iconSize: 60,
),
Text("下载"),
],
),
Column(
children: [
IconButton(
onPressed: () async {
// API
await _toggleCollect();
},
icon: Image.asset("assets/img/list_collection.png"),
iconSize: 60,
),
Text("收藏"),
],
), ),
Column(
children: [
IconButton(
onPressed: () async {
// API
await _toggleLike();
},
icon: Image.asset("assets/img/list_good.png"),
iconSize: 60,
),
Text("点赞"),
],
),
Column(
children: [
IconButton(
onPressed: () {
//
},
icon: Image.asset("assets/img/list_comment.png"),
iconSize: 60,
),
Text("评论"),
],
),
],
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
// TODO:
},
child: Text(
"查看详情页",
style: const TextStyle(color: Colors.black, fontSize: 18),
), ),
ElevatedButton( style: ElevatedButton.styleFrom(
onPressed: () =>Navigator.pop(context), backgroundColor: const Color(0xffE6F4F1),
child: Text( padding: const EdgeInsets.symmetric(vertical: 8),
"取消", tapTargetSize: MaterialTapTargetSize.shrinkWrap,
style: const TextStyle(color:Colors.black,fontSize: 18), shape: RoundedRectangleBorder(
borderRadius: BorderRadius.zero,
), ),
style: ElevatedButton.styleFrom( ),
backgroundColor: const Color(0xff429482), ),
padding: const EdgeInsets.symmetric(vertical: 8), ElevatedButton(
tapTargetSize: MaterialTapTargetSize.shrinkWrap, onPressed: () => Navigator.pop(context),
shape: RoundedRectangleBorder( child: Text(
borderRadius: BorderRadius.zero, "取消",
), style: const TextStyle(color: Colors.black, fontSize: 18),
),
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xff429482),
padding: const EdgeInsets.symmetric(vertical: 8),
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.zero,
), ),
), ),
], ),
), ],
) ),
),
); );
} }
//
Future<void> _toggleLike() async {
final api = LikesApiMusic(); // API
try {
String authorizationToken = 'eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1ZDBmY2Q3ZThlYmY0N2QzOThlNmVjNDQ0ZTM5NTAxNSIsInN1YiI6IjEiLCJpc3MiOiJmbHlpbmdwaWciLCJpYXQiOjE3MzEwNDM3NTgsImV4cCI6MTczMzYzNTc1OH0.5jfhZtK46YNSC7KCaBWiPxSLO7Ym6ntBXnQwfsvMrCw'; // Token
await api.likesMusic(
musicId: sObj['id'], // 使 ID
Authorization: authorizationToken,
);
print('Liked music ID: ${sObj['id']}');
} catch (e) {
print('Error liking music: $e');
}
}
//
Future<void> _toggleCollect() async {
final api = CollectionApiMusic(); // API
try {
String authorizationToken = 'eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1ZDBmY2Q3ZThlYmY0N2QzOThlNmVjNDQ0ZTM5NTAxNSIsInN1YiI6IjEiLCJpc3MiOiJmbHlpbmdwaWciLCJpYXQiOjE3MzEwNDM3NTgsImV4cCI6MTczMzYzNTc1OH0.5jfhZtK46YNSC7KCaBWiPxSLO7Ym6ntBXnQwfsvMrCw'; // Token
await api.addCollection(
musicId: sObj['id'], // 使 ID
Authorization: authorizationToken,
);
print('Collected music ID: ${sObj['id']}');
} catch (e) {
print('Error collecting music: $e');
}
}
} }

@ -1,26 +1,30 @@
class GetCommentBean { class GetCommentBean {
int? code; int? code;
String? msg; String? msg;
int? total; int? total;
List<CommentBean>? rows; List<CommentBean>? rows;
GetCommentBean.formMap(Map map) { GetCommentBean.formMap(Map<String, dynamic> map) {
code = map['code']; code = map['code'] as int?;
msg = map['msg']; msg = map['msg'] as String?;
total = map['total'];
// data data total rows
List<dynamic>? rowList = map['rows']; Map<String, dynamic>? data = map['data'];
if (rowList == null) return; if (data != null) {
total = data['total'] as int?;
rows = rowList
.map((item) => CommentBean._formMap(item)) List<dynamic>? rowList = data['rows'];
.toList(); if (rowList != null) {
rows = rowList.map((item) => CommentBean.formMap(item as Map<String, dynamic>)).toList();
} else {
rows = []; // rows
}
} else {
rows = []; // data
}
} }
} }
class CommentBean { class CommentBean {
int? id; int? id;
String? content; String? content;
@ -28,11 +32,11 @@ class CommentBean {
String? username; String? username;
String? avatar; String? avatar;
CommentBean._formMap(Map map) { CommentBean.formMap(Map<String, dynamic> map) {
id = map['id']; id = map['id'] as int?;
content = map['content']; content = map['content'] as String? ?? 'No content';
time = map['time']; time = map['time'] as String? ?? 'Unknown time';
username = map['username']; username = map['username'] as String? ?? 'Anonymous';
avatar = map['avatar']; avatar = map['avatar'] as String? ?? 'Default avatar';
} }
} }

@ -6,6 +6,9 @@ class UniversalBean {
UniversalBean.formMap(Map map) { UniversalBean.formMap(Map map) {
code = map['code']; code = map['code'];
msg = map['msg']; msg = map['msg'];
data = map['data'];
}
}
data = map['data'];
}}

@ -8,6 +8,8 @@ import 'package:music_player_miao/widget/text_field.dart';
class CommentView extends StatefulWidget { class CommentView extends StatefulWidget {
@override @override
_CommentViewState createState() => _CommentViewState(); _CommentViewState createState() => _CommentViewState();
@ -36,29 +38,33 @@ class _CommentViewState extends State<CommentView> {
Future<void> _fetchSonglistData() async { Future<void> _fetchSonglistData() async {
try { try {
GetCommentBean bean1 = await getCommentApi().getComment( GetCommentBean bean1 = await getCommentApi().getComment(
musicId: '1', musicId: '1',
pageNo: '0', pageNo: '0',
pageSize: '10', pageSize: '10',
Authorization: AppData().currentToken); Authorization: AppData().currentToken,
setState(() { );
comments = bean1.rows!.map((rows) => rows.content!).toList();
commentTimes = bean1.rows!.map((rows) => rows.time!).toList();
commentHeader = bean1.rows!.map((rows) => rows.avatar!).toList();
commentName = bean1.rows!.map((rows) => rows.username!).toList();
playlistCount = comments.length;
});
} catch (error) { // rows
if (error != null) { if (bean1.rows == null) {
print('Response data: $error'); print('No comments found');
} else { return;
print('Error fetching songlist data: $error');
} }
setState(() {
comments = bean1.rows!.map((rows) => rows.content ?? 'No content').toList();
commentTimes = bean1.rows!.map((rows) => rows.time ?? 'Unknown time').toList();
commentHeader = bean1.rows!.map((rows) => rows.avatar ?? 'Default avatar').toList();
commentName = bean1.rows!.map((rows) => rows.username ?? 'Anonymous').toList();
playlistCount = comments.length;
});
} catch (error) {
print('Error fetching songlist data: $error');
} }
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -164,17 +170,22 @@ class _CommentViewState extends State<CommentView> {
), ),
IconButton( IconButton(
onPressed: () { onPressed: () {
// setState(() { setState(() {
// ascendingOrder = !ascendingOrder; ascendingOrder = !ascendingOrder;
// comments.sort((a, b) {
// int compare = ascendingOrder // 使
// ? commentTimes.indexOf(a).compareTo( List<int> sortedIndexes = List<int>.generate(comments.length, (i) => i);
// commentTimes.indexOf(b)) sortedIndexes.sort((a, b) {
// : commentTimes.indexOf(b).compareTo( DateTime timeA = DateTime.parse(commentTimes[a]);
// commentTimes.indexOf(a)); DateTime timeB = DateTime.parse(commentTimes[b]);
// return compare; return ascendingOrder ? timeA.compareTo(timeB) : timeB.compareTo(timeA);
// }); });
// });
comments = [for (var i in sortedIndexes) comments[i]];
commentTimes = [for (var i in sortedIndexes) commentTimes[i]];
commentHeader = [for (var i in sortedIndexes) commentHeader[i]];
commentName = [for (var i in sortedIndexes) commentName[i]];
});
}, },
icon: Image.asset( icon: Image.asset(
ascendingOrder ascendingOrder
@ -202,7 +213,7 @@ class _CommentViewState extends State<CommentView> {
Row( Row(
children: [ children: [
CircleAvatar( CircleAvatar(
backgroundImage: NetworkImage(commentHeader[index]) backgroundImage: NetworkImage(commentHeader[index])
), ),
const SizedBox(width: 10,), const SizedBox(width: 10,),
Column( Column(
@ -284,21 +295,35 @@ class _CommentViewState extends State<CommentView> {
); );
} }
void submitComment() { void submitComment() async {
String comment = commentController.text; String comment = commentController.text.trim();
if (comment.isNotEmpty) { if (comment.isEmpty) {
DateTime currentTime = DateTime.now(); print('Comment cannot be empty');
String formattedTime = "${currentTime.year}/${currentTime Get.snackbar('错误', '评论不能为空');
.month}/${currentTime.day} ${currentTime.hour}:${currentTime.minute}"; return;
}
setState(() { print('Submitting comment with content: $comment');
comments.add(comment);
commentTimes.add(formattedTime); try {
commentName.add(AppData().currentUsername); UniversalBean bean = await commentMusic().comment(
commentHeader.add(AppData().currentAvatar); musicId: widget.initialSongIndex,
content: comment,
Authorization: AppData().currentToken,
);
//
if (bean.code == 200) {
print('Comment submitted successfully');
commentController.clear(); commentController.clear();
playlistCount++; _fetchSonglistData(); //
}); } else {
print('Failed to submit comment: ${bean.msg}');
Get.snackbar('错误', bean.msg ?? '评论提交失败');
}
} catch (error) {
print('Error submitting comment: $error');
} }
} }
} }

@ -8,8 +8,11 @@ import 'package:audioplayers/audioplayers.dart';
import '../api/api_music_likes.dart'; import '../api/api_music_likes.dart';
import '../api/api_music_list.dart'; import '../api/api_music_list.dart';
import '../api/api_collection.dart';
import '../common_widget/Song_widegt.dart'; import '../common_widget/Song_widegt.dart';
import '../models/getMusicList_bean.dart'; import '../models/getMusicList_bean.dart';
import '../view/commend_view.dart';
class MusicView extends StatefulWidget { class MusicView extends StatefulWidget {
final Song song; final Song song;
@ -270,7 +273,9 @@ class _MusicViewState extends State<MusicView> {
), ),
), ),
IconButton( IconButton(
onPressed: () { onPressed: () async{
UniversalBean bean1 =
await CollectionApiMusic().addCollection(musicId: currentSongIndex+1, Authorization: AppData().currentToken);
setState(() { setState(() {
collectionsnot = !collectionsnot; collectionsnot = !collectionsnot;
}); });
@ -285,7 +290,12 @@ class _MusicViewState extends State<MusicView> {
), ),
IconButton( IconButton(
onPressed: () { onPressed: () {
Image.asset("assets/img/music_good.png"); Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CommentView(initialSongIndex: widget.initialSongIndex),
),
);
}, },
icon: Image.asset( icon: Image.asset(
"assets/img/music_commend_un.png", "assets/img/music_commend_un.png",

@ -31,6 +31,7 @@ class _ReleaseViewState extends State<ReleaseView> {
late File selectedMp3File; late File selectedMp3File;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(

@ -93,42 +93,50 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.17.2" version: "1.18.0"
cross_file: cross_file:
dependency: transitive dependency: transitive
description: description:
name: cross_file name: cross_file
sha256: "2f9d2cbccb76127ba28528cb3ae2c2326a122446a83de5a056aaa3880d3882c5" sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.3.3+7" version: "0.3.4+2"
crypto: crypto:
dependency: transitive dependency: transitive
description: description:
name: crypto name: crypto
sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "3.0.3" version: "3.0.6"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
name: cupertino_icons name: cupertino_icons
sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.6" version: "1.0.8"
dio: dio:
dependency: "direct main" dependency: "direct main"
description: description:
name: dio name: dio
sha256: "797e1e341c3dd2f69f2dad42564a6feff3bfb87187d05abb93b9609e6f1645c3" sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "5.4.0" version: "5.7.0"
dio_web_adapter:
dependency: transitive
description:
name: dio_web_adapter
sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
@ -141,58 +149,66 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: ffi name: ffi
sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.0" version: "2.1.3"
file: file:
dependency: transitive dependency: transitive
description: description:
name: file name: file
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "7.0.0" version: "7.0.1"
file_picker: file_picker:
dependency: "direct main" dependency: "direct main"
description: description:
name: file_picker name: file_picker
sha256: "4e42aacde3b993c5947467ab640882c56947d9d27342a5b6f2895b23956954a6" sha256: "1bbf65dd997458a08b531042ec3794112a6c39c07c37ff22113d2e7e4f81d4e4"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "6.1.1" version: "6.2.1"
file_selector_linux: file_selector_linux:
dependency: transitive dependency: transitive
description: description:
name: file_selector_linux name: file_selector_linux
sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" sha256: "712ce7fab537ba532c8febdb1a8f167b32441e74acd68c3ccb2e36dcb52c4ab2"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.9.2+1" version: "0.9.3"
file_selector_macos: file_selector_macos:
dependency: transitive dependency: transitive
description: description:
name: file_selector_macos name: file_selector_macos
sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.9.3+3" version: "0.9.4+2"
file_selector_platform_interface: file_selector_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: file_selector_platform_interface name: file_selector_platform_interface
sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262" sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.6.1" version: "2.6.2"
file_selector_windows: file_selector_windows:
dependency: transitive dependency: transitive
description: description:
name: file_selector_windows name: file_selector_windows
sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0 sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.3+3"
fixnum:
dependency: transitive
description:
name: fixnum
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.9.3+1" version: "1.1.1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -210,10 +226,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da sha256: "9b78450b89f059e96c9ebb355fa6b3df1d6b330436e0b885fb49594c41721398"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.17" version: "2.0.23"
flutter_swiper_view: flutter_swiper_view:
dependency: "direct main" dependency: "direct main"
description: description:
@ -252,10 +268,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: http name: http
sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.0" version: "1.2.2"
http_parser: http_parser:
dependency: "direct main" dependency: "direct main"
description: description:
@ -268,34 +284,34 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: image_picker name: image_picker
sha256: "7d7f2768df2a8b0a3cefa5ef4f84636121987d403130e70b17ef7e2cf650ba84" sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.4" version: "1.1.2"
image_picker_android: image_picker_android:
dependency: transitive dependency: transitive
description: description:
name: image_picker_android name: image_picker_android
sha256: d6a6e78821086b0b737009b09363018309bbc6de3fd88cc5c26bc2bb44a4957f sha256: "8faba09ba361d4b246dc0a17cb4289b3324c2b9f6db7b3d457ee69106a86bd32"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.8.8+2" version: "0.8.12+17"
image_picker_for_web: image_picker_for_web:
dependency: transitive dependency: transitive
description: description:
name: image_picker_for_web name: image_picker_for_web
sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7" sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "3.0.1" version: "3.0.6"
image_picker_ios: image_picker_ios:
dependency: transitive dependency: transitive
description: description:
name: image_picker_ios name: image_picker_ios
sha256: "76ec722aeea419d03aa915c2c96bf5b47214b053899088c9abb4086ceecf97a7" sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.8.8+4" version: "0.8.12+1"
image_picker_linux: image_picker_linux:
dependency: transitive dependency: transitive
description: description:
@ -316,10 +332,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: image_picker_platform_interface name: image_picker_platform_interface
sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514 sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.9.1" version: "2.10.0"
image_picker_windows: image_picker_windows:
dependency: transitive dependency: transitive
description: description:
@ -336,6 +352,30 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.6.7" version: "0.6.7"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.flutter-io.cn"
source: hosted
version: "10.0.5"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.5"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.1"
lints: lints:
dependency: transitive dependency: transitive
description: description:
@ -348,34 +388,34 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.12.16" version: "0.12.16+1"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.5.0" version: "0.11.1"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.9.1" version: "1.15.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
name: mime name: mime
sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.4" version: "2.0.0"
nested: nested:
dependency: transitive dependency: transitive
description: description:
@ -388,34 +428,34 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: path name: path
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.8.3" version: "1.9.0"
path_provider: path_provider:
dependency: transitive dependency: transitive
description: description:
name: path_provider name: path_provider
sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.1" version: "2.1.4"
path_provider_android: path_provider_android:
dependency: transitive dependency: transitive
description: description:
name: path_provider_android name: path_provider_android
sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.2.1" version: "2.2.12"
path_provider_foundation: path_provider_foundation:
dependency: transitive dependency: transitive
description: description:
name: path_provider_foundation name: path_provider_foundation
sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.3.1" version: "2.4.0"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
@ -428,42 +468,42 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
name: path_provider_windows name: path_provider_windows
sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.2.1" version: "2.3.0"
platform: platform:
dependency: transitive dependency: transitive
description: description:
name: platform name: platform
sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "3.1.3" version: "3.1.6"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: plugin_platform_interface name: plugin_platform_interface
sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.7" version: "2.1.8"
provider: provider:
dependency: "direct main" dependency: "direct main"
description: description:
name: provider name: provider
sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "6.1.1" version: "6.1.2"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -489,18 +529,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.11.0" version: "1.11.1"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
@ -513,10 +553,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: synchronized name: synchronized
sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "3.1.0" version: "3.3.0+3"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
@ -529,26 +569,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.6.0" version: "0.7.2"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
name: typed_data name: typed_data
sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.3.2" version: "1.4.0"
uuid: uuid:
dependency: transitive dependency: transitive
description: description:
name: uuid name: uuid
sha256: df5a4d8f22ee4ccd77f8839ac7cb274ebc11ef9adcce8b92be14b797fe889921 sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "4.2.1" version: "4.5.1"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
@ -557,30 +597,38 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
vm_service:
dependency: transitive
description:
name: vm_service
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.flutter-io.cn"
source: hosted
version: "14.2.5"
web: web:
dependency: transitive dependency: transitive
description: description:
name: web name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.1.4-beta" version: "1.1.0"
win32: win32:
dependency: transitive dependency: "direct main"
description: description:
name: win32 name: win32
sha256: "7c99c0e1e2fa190b48d25c81ca5e42036d5cac81430ef249027d97b0935c553f" sha256: e1d0cc62e65dc2561f5071fcbccecf58ff20c344f8f3dc7d4922df372a11df1f
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "5.1.0" version: "5.7.1"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:
name: xdg_directories name: xdg_directories
sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.3" version: "1.1.0"
sdks: sdks:
dart: ">=3.1.2 <4.0.0" dart: ">=3.5.0 <4.0.0"
flutter: ">=3.13.0" flutter: ">=3.24.0"

@ -30,7 +30,7 @@ environment:
dependencies: dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
win32: ^5.1.0
flutter_swiper_view: 1.1.8 flutter_swiper_view: 1.1.8
audioplayers: ^5.2.1 audioplayers: ^5.2.1

Loading…
Cancel
Save