From de6984eff3347d95468e909ede7a542d4e3eef10 Mon Sep 17 00:00:00 2001 From: Spark <2666652@gmail.com> Date: Thu, 14 Nov 2024 14:54:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=90=88=E5=B9=B6=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- devtools_options.yaml | 3 + lib/api/api_collection.dart | 30 +++ lib/api/api_music_return.dart | 22 +- lib/api/api_release.dart | 5 +- lib/common_widget/rank_song_row.dart | 388 +++++++++++++++------------ lib/models/getComment_bean.dart | 46 ++-- lib/models/universal_bean.dart | 9 +- lib/view/commend_view.dart | 109 +++++--- lib/view/music_view.dart | 16 +- lib/view/release_view.dart | 1 + pubspec.lock | 218 +++++++++------ pubspec.yaml | 2 +- 12 files changed, 511 insertions(+), 338 deletions(-) create mode 100644 devtools_options.yaml create mode 100644 lib/api/api_collection.dart diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/devtools_options.yaml @@ -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: diff --git a/lib/api/api_collection.dart b/lib/api/api_collection.dart new file mode 100644 index 0000000..5c3eef4 --- /dev/null +++ b/lib/api/api_collection.dart @@ -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 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 对象 + + } +} diff --git a/lib/api/api_music_return.dart b/lib/api/api_music_return.dart index ad2ffcf..58e4cf6 100644 --- a/lib/api/api_music_return.dart +++ b/lib/api/api_music_return.dart @@ -32,9 +32,10 @@ class commentMusic { Response response = await dio.post( _postComment, data: { - 'musicId': musicId, - 'password': content, - 'Authorization': Authorization + 'content': content, + 'MusicId': musicId, + 'Authorization':Authorization + }, options: Options(headers:{'Authorization':Authorization,'Content-Type':'application/json;charset=UTF-8'}) ); @@ -50,21 +51,26 @@ class getCommentApi { required String musicId, required String pageNo, required String pageSize, - required String Authorization + required String Authorization, }) async { Response response = await dio.get( _postComment, - queryParameters: {'musicId':musicId,'pageNo':pageNo,'pageSize':pageSize}, - options: Options(headers:{'Authorization':Authorization,'Content-Type':'application/json;charset=UTF-8'}) + queryParameters: { + 'musicId': musicId, + 'pageNo': pageNo, + 'pageSize': pageSize, + }, + options: Options(headers: { + 'Authorization': Authorization, + 'Content-Type': 'application/json;charset=UTF-8', + }), ); print(response.data); return GetCommentBean.formMap(response.data); } - } - diff --git a/lib/api/api_release.dart b/lib/api/api_release.dart index fc7eb9c..d5b736d 100644 --- a/lib/api/api_release.dart +++ b/lib/api/api_release.dart @@ -35,11 +35,10 @@ class ReleaseApi { queryParameters: {'singerName':singerName,'name':name,'introduce':introduce}, data: formData, options: Options(headers:{'Authorization':Authorization, - 'Content-Type':'multipart/form-data;boundary=--------------------------741231434897925203274596', - 'Content-Length':'2858240'}) + }) ); print(response.data); return UniversalBean.formMap(response.data); } -} +} \ No newline at end of file diff --git a/lib/common_widget/rank_song_row.dart b/lib/common_widget/rank_song_row.dart index dd1b4f9..99bd438 100644 --- a/lib/common_widget/rank_song_row.dart +++ b/lib/common_widget/rank_song_row.dart @@ -1,211 +1,255 @@ import 'package:flutter/material.dart'; +import '../api/api_music_likes.dart'; // 导入点赞 API +import '../api/api_collection.dart'; // 导入收藏 API + // 导入评论页面 + class RankSongsRow extends StatelessWidget { final Map sObj; final VoidCallback onPressedPlay; final VoidCallback onPressed; final String? rank; + const RankSongsRow({ super.key, required this.sObj, required this.onPressed, - required this.onPressedPlay, required this.rank, + required this.onPressedPlay, + required this.rank, }); @override Widget build(BuildContext context) { rank: sObj["rank"]; - return - Column( - children: [ - Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - children: [ - SizedBox( - width: 15, - child: RichText( - text: TextSpan( - text: sObj["rank"], - style: TextStyle( - fontSize: getRankFontSize(sObj["rank"]), - fontWeight: FontWeight.w700, - color: Color(0xffCE0000), - ), + return Column( + children: [ + Row( + children: [ + Row( + children: [ + SizedBox( + width: 15, + child: RichText( + text: TextSpan( + text: sObj["rank"], + style: TextStyle( + fontSize: getRankFontSize(sObj["rank"]), + fontWeight: FontWeight.w700, + color: Color(0xffCE0000), ), ), ), - const SizedBox(width: 10,), - ClipRRect( - borderRadius: BorderRadius.circular(10), - child: Image.asset( - sObj["image"], - width: 80, - height: 80, - fit: BoxFit.cover, - ), + ), + const SizedBox(width: 10), + ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Image.asset( + sObj["image"], + width: 80, + height: 80, + fit: BoxFit.cover, ), - - const SizedBox(width: 20,), - SizedBox( - width: 170, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - sObj["name"], - maxLines: 1, - style: TextStyle( - color: Colors.black, - fontSize: 16, - fontWeight: FontWeight.w400), - ), - Text( - sObj["artists"], - maxLines: 1, - style: TextStyle(color: Colors.black, fontSize: 14), - ) - ], - ), + ), + const SizedBox(width: 20), + SizedBox( + width: 170, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + sObj["name"], + maxLines: 1, + style: TextStyle( + color: Colors.black, + fontSize: 16, + fontWeight: FontWeight.w400, + ), + ), + Text( + sObj["artists"], + 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: 10,) - ], - - ); - + ), + const SizedBox(height: 20) + ], + ), + const SizedBox(height: 10) + ], + ); } - getRankFontSize(String rank) { + + double getRankFontSize(String rank) { switch (rank) { - case '1': case '2':case '3': - return 30.0; + case '1': + case '2': + case '3': + return 30.0; default: return 20.0; } } - Future _bottomSheet(BuildContext context){ + + Future _bottomSheet(BuildContext context) { return showModalBottomSheet( - context: context, - backgroundColor: Colors.white, - shape: const RoundedRectangleBorder(borderRadius: BorderRadius.vertical(top: Radius.circular(30))), - builder: (context) =>Container( - height: 210, - padding: const EdgeInsets.only(top: 20), - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Column( - children: [ - IconButton( - onPressed: (){}, - icon: Image.asset("assets/img/list_add.png"), - iconSize: 60, - ), - Text("加入歌单") - ], - ), - Column( - 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), + context: context, + backgroundColor: Colors.white, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical(top: Radius.circular(30))), + builder: (context) => Container( + height: 210, + padding: const EdgeInsets.only(top: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Column( + children: [ + IconButton( + onPressed: () { + // TODO: 加入歌单的逻辑 + }, + icon: Image.asset("assets/img/list_add.png"), + iconSize: 60, + ), + Text("加入歌单"), + ], ), - style: ElevatedButton.styleFrom( - backgroundColor: const Color(0xffE6F4F1), - padding: const EdgeInsets.symmetric(vertical: 8), - tapTargetSize: MaterialTapTargetSize.shrinkWrap, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), + Column( + children: [ + IconButton( + onPressed: () { + // TODO: 下载的逻辑 + }, + 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( - onPressed: () =>Navigator.pop(context), - child: Text( - "取消", - style: const TextStyle(color:Colors.black,fontSize: 18), + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xffE6F4F1), + padding: const EdgeInsets.symmetric(vertical: 8), + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.zero, ), - style: ElevatedButton.styleFrom( - backgroundColor: const Color(0xff429482), - padding: const EdgeInsets.symmetric(vertical: 8), - tapTargetSize: MaterialTapTargetSize.shrinkWrap, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), + ), + ), + ElevatedButton( + onPressed: () => Navigator.pop(context), + child: Text( + "取消", + 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 _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 _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'); + } + } } diff --git a/lib/models/getComment_bean.dart b/lib/models/getComment_bean.dart index d084d1d..11fadfa 100644 --- a/lib/models/getComment_bean.dart +++ b/lib/models/getComment_bean.dart @@ -1,26 +1,30 @@ - class GetCommentBean { int? code; String? msg; int? total; List? rows; - GetCommentBean.formMap(Map map) { - code = map['code']; - msg = map['msg']; - total = map['total']; - - List? rowList = map['rows']; - if (rowList == null) return; - - rows = rowList - .map((item) => CommentBean._formMap(item)) - .toList(); + GetCommentBean.formMap(Map map) { + code = map['code'] as int?; + msg = map['msg'] as String?; + + // 首先获取 data 字段,然后在 data 中查找 total 和 rows + Map? data = map['data']; + if (data != null) { + total = data['total'] as int?; + + List? rowList = data['rows']; + if (rowList != null) { + rows = rowList.map((item) => CommentBean.formMap(item as Map)).toList(); + } else { + rows = []; // 如果 rows 为空,初始化为空列表 + } + } else { + rows = []; // 如果 data 为空,初始化为空列表 + } } } - - class CommentBean { int? id; String? content; @@ -28,11 +32,11 @@ class CommentBean { String? username; String? avatar; - CommentBean._formMap(Map map) { - id = map['id']; - content = map['content']; - time = map['time']; - username = map['username']; - avatar = map['avatar']; + CommentBean.formMap(Map map) { + id = map['id'] as int?; + content = map['content'] as String? ?? 'No content'; + time = map['time'] as String? ?? 'Unknown time'; + username = map['username'] as String? ?? 'Anonymous'; + avatar = map['avatar'] as String? ?? 'Default avatar'; } -} +} \ No newline at end of file diff --git a/lib/models/universal_bean.dart b/lib/models/universal_bean.dart index fe0561f..f9f54ed 100644 --- a/lib/models/universal_bean.dart +++ b/lib/models/universal_bean.dart @@ -6,6 +6,9 @@ class UniversalBean { UniversalBean.formMap(Map map) { code = map['code']; msg = map['msg']; - data = map['data']; - } -} + + + + data = map['data']; + +}} \ No newline at end of file diff --git a/lib/view/commend_view.dart b/lib/view/commend_view.dart index 48fb130..36ef0c5 100644 --- a/lib/view/commend_view.dart +++ b/lib/view/commend_view.dart @@ -8,6 +8,8 @@ import 'package:music_player_miao/widget/text_field.dart'; class CommentView extends StatefulWidget { + + @override _CommentViewState createState() => _CommentViewState(); @@ -36,29 +38,33 @@ class _CommentViewState extends State { Future _fetchSonglistData() async { try { GetCommentBean bean1 = await getCommentApi().getComment( - musicId: '1', - pageNo: '0', - pageSize: '10', - 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; - }); + musicId: '1', + pageNo: '0', + pageSize: '10', + Authorization: AppData().currentToken, + ); - } catch (error) { - if (error != null) { - print('Response data: $error'); - } else { - print('Error fetching songlist data: $error'); + // 检查 rows 是否为空 + if (bean1.rows == null) { + print('No comments found'); + return; } + + 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 Widget build(BuildContext context) { return Scaffold( @@ -164,17 +170,22 @@ class _CommentViewState extends State { ), IconButton( onPressed: () { - // setState(() { - // ascendingOrder = !ascendingOrder; - // comments.sort((a, b) { - // int compare = ascendingOrder - // ? commentTimes.indexOf(a).compareTo( - // commentTimes.indexOf(b)) - // : commentTimes.indexOf(b).compareTo( - // commentTimes.indexOf(a)); - // return compare; - // }); - // }); + setState(() { + ascendingOrder = !ascendingOrder; + + // 使用时间排序索引列表 + List sortedIndexes = List.generate(comments.length, (i) => i); + sortedIndexes.sort((a, b) { + DateTime timeA = DateTime.parse(commentTimes[a]); + DateTime timeB = DateTime.parse(commentTimes[b]); + 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( ascendingOrder @@ -202,7 +213,7 @@ class _CommentViewState extends State { Row( children: [ CircleAvatar( - backgroundImage: NetworkImage(commentHeader[index]) + backgroundImage: NetworkImage(commentHeader[index]) ), const SizedBox(width: 10,), Column( @@ -284,21 +295,35 @@ class _CommentViewState extends State { ); } - void submitComment() { - String comment = commentController.text; - if (comment.isNotEmpty) { - DateTime currentTime = DateTime.now(); - String formattedTime = "${currentTime.year}/${currentTime - .month}/${currentTime.day} ${currentTime.hour}:${currentTime.minute}"; + void submitComment() async { + String comment = commentController.text.trim(); + if (comment.isEmpty) { + print('Comment cannot be empty'); + Get.snackbar('错误', '评论不能为空'); + return; + } - setState(() { - comments.add(comment); - commentTimes.add(formattedTime); - commentName.add(AppData().currentUsername); - commentHeader.add(AppData().currentAvatar); + print('Submitting comment with content: $comment'); + + try { + UniversalBean bean = await commentMusic().comment( + musicId: widget.initialSongIndex, + content: comment, + Authorization: AppData().currentToken, + ); + + // 处理响应结果 + if (bean.code == 200) { + print('Comment submitted successfully'); commentController.clear(); - playlistCount++; - }); + _fetchSonglistData(); // 刷新评论列表 + } else { + print('Failed to submit comment: ${bean.msg}'); + Get.snackbar('错误', bean.msg ?? '评论提交失败'); + } + } catch (error) { + print('Error submitting comment: $error'); } } -} + +} \ No newline at end of file diff --git a/lib/view/music_view.dart b/lib/view/music_view.dart index fdceb16..ea2ee38 100644 --- a/lib/view/music_view.dart +++ b/lib/view/music_view.dart @@ -8,8 +8,11 @@ import 'package:audioplayers/audioplayers.dart'; import '../api/api_music_likes.dart'; import '../api/api_music_list.dart'; +import '../api/api_collection.dart'; import '../common_widget/Song_widegt.dart'; import '../models/getMusicList_bean.dart'; +import '../view/commend_view.dart'; + class MusicView extends StatefulWidget { final Song song; @@ -270,7 +273,9 @@ class _MusicViewState extends State { ), ), IconButton( - onPressed: () { + onPressed: () async{ + UniversalBean bean1 = + await CollectionApiMusic().addCollection(musicId: currentSongIndex+1, Authorization: AppData().currentToken); setState(() { collectionsnot = !collectionsnot; }); @@ -285,7 +290,12 @@ class _MusicViewState extends State { ), IconButton( onPressed: () { - Image.asset("assets/img/music_good.png"); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => CommentView(initialSongIndex: widget.initialSongIndex), + ), + ); }, icon: Image.asset( "assets/img/music_commend_un.png", @@ -500,4 +510,4 @@ class _MusicViewState extends State { } } -} +} \ No newline at end of file diff --git a/lib/view/release_view.dart b/lib/view/release_view.dart index 27d1f8f..e4ee656 100644 --- a/lib/view/release_view.dart +++ b/lib/view/release_view.dart @@ -31,6 +31,7 @@ class _ReleaseViewState extends State { late File selectedMp3File; + @override Widget build(BuildContext context) { return Scaffold( diff --git a/pubspec.lock b/pubspec.lock index 1902b87..f788801 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -93,42 +93,50 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.flutter-io.cn" source: hosted - version: "1.17.2" + version: "1.18.0" cross_file: dependency: transitive description: name: cross_file - sha256: "2f9d2cbccb76127ba28528cb3ae2c2326a122446a83de5a056aaa3880d3882c5" + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.flutter-io.cn" source: hosted - version: "0.3.3+7" + version: "0.3.4+2" crypto: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.3" + version: "3.0.6" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.6" + version: "1.0.8" dio: dependency: "direct main" description: name: dio - sha256: "797e1e341c3dd2f69f2dad42564a6feff3bfb87187d05abb93b9609e6f1645c3" + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" url: "https://pub.flutter-io.cn" 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: dependency: transitive description: @@ -141,58 +149,66 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.0" + version: "2.1.3" file: dependency: transitive description: name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 url: "https://pub.flutter-io.cn" source: hosted - version: "7.0.0" + version: "7.0.1" file_picker: dependency: "direct main" description: name: file_picker - sha256: "4e42aacde3b993c5947467ab640882c56947d9d27342a5b6f2895b23956954a6" + sha256: "1bbf65dd997458a08b531042ec3794112a6c39c07c37ff22113d2e7e4f81d4e4" url: "https://pub.flutter-io.cn" source: hosted - version: "6.1.1" + version: "6.2.1" file_selector_linux: dependency: transitive description: name: file_selector_linux - sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + sha256: "712ce7fab537ba532c8febdb1a8f167b32441e74acd68c3ccb2e36dcb52c4ab2" url: "https://pub.flutter-io.cn" source: hosted - version: "0.9.2+1" + version: "0.9.3" file_selector_macos: dependency: transitive description: name: file_selector_macos - sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" url: "https://pub.flutter-io.cn" source: hosted - version: "0.9.3+3" + version: "0.9.4+2" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262" + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b url: "https://pub.flutter-io.cn" source: hosted - version: "2.6.1" + version: "2.6.2" file_selector_windows: dependency: transitive description: 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" source: hosted - version: "0.9.3+1" + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -210,10 +226,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da + sha256: "9b78450b89f059e96c9ebb355fa6b3df1d6b330436e0b885fb49594c41721398" url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.17" + version: "2.0.23" flutter_swiper_view: dependency: "direct main" description: @@ -252,10 +268,10 @@ packages: dependency: "direct main" description: name: http - sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.0" + version: "1.2.2" http_parser: dependency: "direct main" description: @@ -268,34 +284,34 @@ packages: dependency: "direct main" description: name: image_picker - sha256: "7d7f2768df2a8b0a3cefa5ef4f84636121987d403130e70b17ef7e2cf650ba84" + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.4" + version: "1.1.2" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: d6a6e78821086b0b737009b09363018309bbc6de3fd88cc5c26bc2bb44a4957f + sha256: "8faba09ba361d4b246dc0a17cb4289b3324c2b9f6db7b3d457ee69106a86bd32" url: "https://pub.flutter-io.cn" source: hosted - version: "0.8.8+2" + version: "0.8.12+17" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7" + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.1" + version: "3.0.6" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: "76ec722aeea419d03aa915c2c96bf5b47214b053899088c9abb4086ceecf97a7" + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" url: "https://pub.flutter-io.cn" source: hosted - version: "0.8.8+4" + version: "0.8.12+1" image_picker_linux: dependency: transitive description: @@ -316,10 +332,10 @@ packages: dependency: transitive description: name: image_picker_platform_interface - sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514 + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" url: "https://pub.flutter-io.cn" source: hosted - version: "2.9.1" + version: "2.10.0" image_picker_windows: dependency: transitive description: @@ -336,6 +352,30 @@ packages: url: "https://pub.flutter-io.cn" source: hosted 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: dependency: transitive description: @@ -348,34 +388,34 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.flutter-io.cn" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.flutter-io.cn" source: hosted - version: "0.5.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.flutter-io.cn" source: hosted - version: "1.9.1" + version: "1.15.0" mime: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.4" + version: "2.0.0" nested: dependency: transitive description: @@ -388,34 +428,34 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.flutter-io.cn" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: transitive description: name: path_provider - sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.1" + version: "2.1.4" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 + sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a url: "https://pub.flutter-io.cn" source: hosted - version: "2.2.1" + version: "2.2.12" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 url: "https://pub.flutter-io.cn" source: hosted - version: "2.3.1" + version: "2.4.0" path_provider_linux: dependency: transitive description: @@ -428,42 +468,42 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.flutter-io.cn" source: hosted - version: "2.2.1" + version: "2.3.0" platform: dependency: transitive description: name: platform - sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" url: "https://pub.flutter-io.cn" source: hosted - version: "3.1.3" + version: "3.1.6" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.7" + version: "2.1.8" provider: dependency: "direct main" description: name: provider - sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.flutter-io.cn" source: hosted - version: "6.1.1" + version: "6.1.2" sky_engine: dependency: transitive description: flutter @@ -489,18 +529,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.flutter-io.cn" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -513,10 +553,10 @@ packages: dependency: transitive description: name: synchronized - sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225" url: "https://pub.flutter-io.cn" source: hosted - version: "3.1.0" + version: "3.3.0+3" term_glyph: dependency: transitive description: @@ -529,26 +569,26 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.flutter-io.cn" source: hosted - version: "0.6.0" + version: "0.7.2" typed_data: dependency: transitive description: name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 url: "https://pub.flutter-io.cn" source: hosted - version: "1.3.2" + version: "1.4.0" uuid: dependency: transitive description: name: uuid - sha256: df5a4d8f22ee4ccd77f8839ac7cb274ebc11ef9adcce8b92be14b797fe889921 + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.flutter-io.cn" source: hosted - version: "4.2.1" + version: "4.5.1" vector_math: dependency: transitive description: @@ -557,30 +597,38 @@ packages: url: "https://pub.flutter-io.cn" source: hosted 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: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.flutter-io.cn" source: hosted - version: "0.1.4-beta" + version: "1.1.0" win32: - dependency: transitive + dependency: "direct main" description: name: win32 - sha256: "7c99c0e1e2fa190b48d25c81ca5e42036d5cac81430ef249027d97b0935c553f" + sha256: e1d0cc62e65dc2561f5071fcbccecf58ff20c344f8f3dc7d4922df372a11df1f url: "https://pub.flutter-io.cn" source: hosted - version: "5.1.0" + version: "5.7.1" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.3" + version: "1.1.0" sdks: - dart: ">=3.1.2 <4.0.0" - flutter: ">=3.13.0" + dart: ">=3.5.0 <4.0.0" + flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index c825d0c..3a8235d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,7 +30,7 @@ environment: dependencies: flutter: sdk: flutter - + win32: ^5.1.0 flutter_swiper_view: 1.1.8 audioplayers: ^5.2.1