From fc22339a6ef869bde9ae12bb00240e414ab411c8 Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Mon, 7 Mar 2022 15:22:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=8F=91=E5=B8=83-=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E6=96=B0=E4=BB=BB=E5=8A=A1-=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=85=A7=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icons/camera.png | Bin 0 -> 1566 bytes assets/icons/connect.png | Bin 0 -> 531 bytes lib/gen/assets.gen.dart | 645 +++++++++ lib/generated_plugin_registrant.dart | 2 + lib/pages/home/home_page.dart | 2 +- lib/ui/service/hall/hall_view.dart | 1 + lib/ui/service/publish_task_page.dart | 1318 +++++++++++------- lib/ui/service/task_func.dart | 43 +- lib/ui/service/task_remark_page.dart | 82 ++ lib/widget/picker/bee_pick_image_widget.dart | 115 ++ lib/widget/voice_player.dart | 117 +- pubspec.lock | 30 +- pubspec.yaml | 4 +- 13 files changed, 1804 insertions(+), 555 deletions(-) create mode 100644 assets/icons/camera.png create mode 100644 assets/icons/connect.png create mode 100644 lib/ui/service/task_remark_page.dart create mode 100644 lib/widget/picker/bee_pick_image_widget.dart diff --git a/assets/icons/camera.png b/assets/icons/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..65264d94099af4cf6f680338ed2cac5ddcb1ecb3 GIT binary patch literal 1566 zcmV+(2I2XMP)uo|s{tlI3( zMX&jTVGXy_vE)W+adUl2KWo-FPb|`44!?Mcw?tqF`zSk|b~Iw~(rd23hAotlN0K%%fm^LOku;)H)f9n=T~-UsvDY@M$6(Sq6nJnb@ZeD3!QqZjeX#ZS zCjWMbaA2l#FB_#WQQ*2j*u%xYVY%^jdJQSWMZGFrbUjcrbqKr;YkrZ!?8Sm{@#fha zm_KSld@bG*-UDmKjZn;8k0>xi#8w(E7RI|%;Jv!_rm06;t=z@VV-C)p0z1&)B`1IB zb9%pi23C#Tv(f=isn}+QT-E?_p9}mB#`+X*06lguFoF01X){e zT;E{qhThagLLUVLc9MM*cOt~6w&F^^&b>jFdA zW8ifNuyj03;Zgh|BS_nNnzkD20*A&zb<10W-|)>%HL^B~Wr0Jb8M<2pEc{ItqQE$crIG@yYfvd&04WlfkS1H zEsNoNp2KXz)7}JbT?~icc3Ck6&cqj7Sy*{ z-!-Gaq&^gQaI6aKbH$d|eNA3Vs{;GZ%R;p3ni84ygcLX*m%wHl)mRnSH{Z4JU=5eR zW;0_fTd>P2Gz+p7zU)g1ya3<2Z_9;!S9S@mAq8H5Z&M+(PrM~3ao=2~6BjKDtYw{- zXiZXWe7|Y>aXr=-I(!%JUFy1OUqU>F5!2Vuy1<%@?gDA6HC#1*!<9W*BKduDdRVFq zCA@82gmw!2hI#7+JqR4ipbQDHme6-={gZiO`>S_iV-FT?+LuN~5EB^|2XWNWuOu$Ee&$WW zbx;{z9q1>pxgw#_sN0?aM_EW?dM?A?yt2OrPJM9XzjI;o&&O(QMvBALfoB*-?l!AsCcEy5&9vFUp}>Pffd_{I4-N$$911)*6nJoA z0-J8~MdHK+Hrtwjd=XuajR|a_7Kr$X>XTx@6xlAv*c(!UEb|>zcM8Of4xuRm!-7rs zW85LWWc+WWPLpa?5s)-OZI=HdCu0(pj1BQFbCU)^3-6LWYL38~Ug~S-N47``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxfPx+jv*C{Z)a-zGdqg3^7FHb2}qdS`1R|R zm5@x+{00X1f{X*x6jnPv&ejytS&)5t&YQd)KAUeJKQra+vzn8h>6dOVi%&0`wU@O; zz==Z7%RQsdhhj=Rg!o=K5WmQ{j<V{>}pYF^%%_<}qToD$Tlo}u77n}EC_f*Zhj!a3M=as8pY?|G_v$pz#3%j2G zvURO2M+Cm5{tkZCf93~oJ^zYyV><^Xr`F0tzcyWN(T%@%=TyET=e*WLxy&?BPud-k5IkJE^@%?Y`5RLtMer zeD^NW71?sCR9r8G`{c&c%uFjb8&p5r_r`XU-t$8`&K1XJzn}F{;;PG3)s=j@ayqW% zpM)aATX?OuW#nGYw>VtwI$2foUzTEwWLH?JoMu7$$@8Bxo&~0QuG0Pcu&Dc_na)BM z)+*KYvNLzB*ralmOZ-FC*4s1U8CX|sE7D#sudrziG)Oy)>KL5vxvrYGEG`WghYX&s KelF{r5}E+IwBN-5 literal 0 HcmV?d00001 diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index 2baf7494..b510d681 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -3,65 +3,123 @@ /// FlutterGen /// ***************************************************** +// ignore_for_file: directives_ordering,unnecessary_import + import 'package:flutter/widgets.dart'; class $AssetsApplicationsGen { const $AssetsApplicationsGen(); + /// File path: assets/applications/advice.png AssetGenImage get advice => const AssetGenImage('assets/applications/advice.png'); + + /// File path: assets/applications/all_app.png AssetGenImage get allApp => const AssetGenImage('assets/applications/all_app.png'); + + /// File path: assets/applications/borrow.png AssetGenImage get borrow => const AssetGenImage('assets/applications/borrow.png'); + + /// File path: assets/applications/box.png AssetGenImage get box => const AssetGenImage('assets/applications/box.png'); + + /// File path: assets/applications/committee.png AssetGenImage get committee => const AssetGenImage('assets/applications/committee.png'); + + /// File path: assets/applications/community_phone.png AssetGenImage get communityPhone => const AssetGenImage('assets/applications/community_phone.png'); + + /// File path: assets/applications/complaint.png AssetGenImage get complaint => const AssetGenImage('assets/applications/complaint.png'); + + /// File path: assets/applications/decoration.png AssetGenImage get decoration => const AssetGenImage('assets/applications/decoration.png'); + + /// File path: assets/applications/digital.png AssetGenImage get digital => const AssetGenImage('assets/applications/digital.png'); + + /// File path: assets/applications/door_code.png AssetGenImage get doorCode => const AssetGenImage('assets/applications/door_code.png'); + + /// File path: assets/applications/fix.png AssetGenImage get fix => const AssetGenImage('assets/applications/fix.png'); + + /// File path: assets/applications/goods_out.png AssetGenImage get goodsOut => const AssetGenImage('assets/applications/goods_out.png'); + + /// File path: assets/applications/home_live.png AssetGenImage get homeLive => const AssetGenImage('assets/applications/home_live.png'); + + /// File path: assets/applications/hospital.png AssetGenImage get hospital => const AssetGenImage('assets/applications/hospital.png'); + + /// File path: assets/applications/makeup.png AssetGenImage get makeup => const AssetGenImage('assets/applications/makeup.png'); + + /// File path: assets/applications/oepn_door.png AssetGenImage get oepnDoor => const AssetGenImage('assets/applications/oepn_door.png'); + + /// File path: assets/applications/payment.png AssetGenImage get payment => const AssetGenImage('assets/applications/payment.png'); + + /// File path: assets/applications/police.png AssetGenImage get police => const AssetGenImage('assets/applications/police.png'); + + /// File path: assets/applications/question.png AssetGenImage get question => const AssetGenImage('assets/applications/question.png'); + + /// File path: assets/applications/snack.png AssetGenImage get snack => const AssetGenImage('assets/applications/snack.png'); + + /// File path: assets/applications/tool_bmts.png AssetGenImage get toolBmts => const AssetGenImage('assets/applications/tool_bmts.png'); + + /// File path: assets/applications/toy.png AssetGenImage get toy => const AssetGenImage('assets/applications/toy.png'); + + /// File path: assets/applications/transfer.png AssetGenImage get transfer => const AssetGenImage('assets/applications/transfer.png'); + + /// File path: assets/applications/visitor_invite.png AssetGenImage get visitorInvite => const AssetGenImage('assets/applications/visitor_invite.png'); + + /// File path: assets/applications/vote.png AssetGenImage get vote => const AssetGenImage('assets/applications/vote.png'); + + /// File path: assets/applications/wine.png AssetGenImage get wine => const AssetGenImage('assets/applications/wine.png'); } class $AssetsBraceletGen { const $AssetsBraceletGen(); + /// File path: assets/bracelet/x5.png AssetGenImage get x5 => const AssetGenImage('assets/bracelet/x5.png'); + + /// File path: assets/bracelet/x8.png AssetGenImage get x8 => const AssetGenImage('assets/bracelet/x8.png'); + + /// File path: assets/bracelet/xiaomi6.png AssetGenImage get xiaomi6 => const AssetGenImage('assets/bracelet/xiaomi6.png'); } @@ -69,543 +127,1123 @@ class $AssetsBraceletGen { class $AssetsIconsGen { const $AssetsIconsGen(); + /// File path: assets/icons/add.png AssetGenImage get add => const AssetGenImage('assets/icons/add.png'); + + /// File path: assets/icons/alarm.png AssetGenImage get alarm => const AssetGenImage('assets/icons/alarm.png'); + + /// File path: assets/icons/alipay_round.png AssetGenImage get alipayRound => const AssetGenImage('assets/icons/alipay_round.png'); + + /// File path: assets/icons/app_add.png AssetGenImage get appAdd => const AssetGenImage('assets/icons/app_add.png'); + + /// File path: assets/icons/app_alarm.png AssetGenImage get appAlarm => const AssetGenImage('assets/icons/app_alarm.png'); + + /// File path: assets/icons/app_reduce.png AssetGenImage get appReduce => const AssetGenImage('assets/icons/app_reduce.png'); + + /// File path: assets/icons/appointment-address.png AssetGenImage get appointmentAddress => const AssetGenImage('assets/icons/appointment-address.png'); + + /// File path: assets/icons/appointment-code.png AssetGenImage get appointmentCode => const AssetGenImage('assets/icons/appointment-code.png'); + + /// File path: assets/icons/appointment_date.png AssetGenImage get appointmentDate => const AssetGenImage('assets/icons/appointment_date.png'); + + /// File path: assets/icons/article_count.png AssetGenImage get articleCount => const AssetGenImage('assets/icons/article_count.png'); + + /// File path: assets/icons/article_name.png AssetGenImage get articleName => const AssetGenImage('assets/icons/article_name.png'); + + /// File path: assets/icons/bee_task.png AssetGenImage get beeTask => const AssetGenImage('assets/icons/bee_task.png'); + + /// File path: assets/icons/blood_ressure.png AssetGenImage get bloodRessure => const AssetGenImage('assets/icons/blood_ressure.png'); + + /// File path: assets/icons/borrow_failure.png AssetGenImage get borrowFailure => const AssetGenImage('assets/icons/borrow_failure.png'); + + /// File path: assets/icons/borrow_status.png AssetGenImage get borrowStatus => const AssetGenImage('assets/icons/borrow_status.png'); + + /// File path: assets/icons/borrow_success.png AssetGenImage get borrowSuccess => const AssetGenImage('assets/icons/borrow_success.png'); + + /// File path: assets/icons/camera.png + AssetGenImage get camera => const AssetGenImage('assets/icons/camera.png'); + + /// File path: assets/icons/change.png AssetGenImage get change => const AssetGenImage('assets/icons/change.png'); + + /// File path: assets/icons/clock_circle.png AssetGenImage get clockCircle => const AssetGenImage('assets/icons/clock_circle.png'); + + /// File path: assets/icons/clock_success.png AssetGenImage get clockSuccess => const AssetGenImage('assets/icons/clock_success.png'); + + /// File path: assets/icons/collect.png AssetGenImage get collect => const AssetGenImage('assets/icons/collect.png'); + + /// File path: assets/icons/collection_setting.png AssetGenImage get collectionSetting => const AssetGenImage('assets/icons/collection_setting.png'); + + /// File path: assets/icons/collection_share.png AssetGenImage get collectionShare => const AssetGenImage('assets/icons/collection_share.png'); + + /// File path: assets/icons/comment_notice.png AssetGenImage get commentNotice => const AssetGenImage('assets/icons/comment_notice.png'); + + /// File path: assets/icons/commerc.png AssetGenImage get commerc => const AssetGenImage('assets/icons/commerc.png'); + + /// File path: assets/icons/community_comment.png AssetGenImage get communityComment => const AssetGenImage('assets/icons/community_comment.png'); + + /// File path: assets/icons/community_comment_is.png AssetGenImage get communityCommentIs => const AssetGenImage('assets/icons/community_comment_is.png'); + + /// File path: assets/icons/community_like.png AssetGenImage get communityLike => const AssetGenImage('assets/icons/community_like.png'); + + /// File path: assets/icons/community_like_is.png AssetGenImage get communityLikeIs => const AssetGenImage('assets/icons/community_like_is.png'); + + /// File path: assets/icons/complaint.png AssetGenImage get complaint => const AssetGenImage('assets/icons/complaint.png'); + + /// File path: assets/icons/connect.png + AssetGenImage get connect => const AssetGenImage('assets/icons/connect.png'); + + /// File path: assets/icons/consult.png AssetGenImage get consult => const AssetGenImage('assets/icons/consult.png'); + + /// File path: assets/icons/contract.png AssetGenImage get contract => const AssetGenImage('assets/icons/contract.png'); + + /// File path: assets/icons/delete.png AssetGenImage get delete => const AssetGenImage('assets/icons/delete.png'); + + /// File path: assets/icons/device_alarm.png AssetGenImage get deviceAlarm => const AssetGenImage('assets/icons/device_alarm.png'); + + /// File path: assets/icons/edit.png AssetGenImage get edit => const AssetGenImage('assets/icons/edit.png'); + + /// File path: assets/icons/environment.png AssetGenImage get environment => const AssetGenImage('assets/icons/environment.png'); + + /// File path: assets/icons/examine.png AssetGenImage get examine => const AssetGenImage('assets/icons/examine.png'); + + /// File path: assets/icons/examining.png AssetGenImage get examining => const AssetGenImage('assets/icons/examining.png'); + + /// File path: assets/icons/eye_close.png AssetGenImage get eyeClose => const AssetGenImage('assets/icons/eye_close.png'); + + /// File path: assets/icons/facility.png AssetGenImage get facility => const AssetGenImage('assets/icons/facility.png'); + + /// File path: assets/icons/falldown.png AssetGenImage get falldown => const AssetGenImage('assets/icons/falldown.png'); + + /// File path: assets/icons/file.png AssetGenImage get file => const AssetGenImage('assets/icons/file.png'); + + /// File path: assets/icons/filter.png AssetGenImage get filter => const AssetGenImage('assets/icons/filter.png'); + + /// File path: assets/icons/finish.png AssetGenImage get finish => const AssetGenImage('assets/icons/finish.png'); + + /// File path: assets/icons/fire_alarm.png AssetGenImage get fireAlarm => const AssetGenImage('assets/icons/fire_alarm.png'); + + /// File path: assets/icons/foot.png AssetGenImage get foot => const AssetGenImage('assets/icons/foot.png'); + + /// File path: assets/icons/func_all.png AssetGenImage get funcAll => const AssetGenImage('assets/icons/func_all.png'); + + /// File path: assets/icons/func_bmdh.png AssetGenImage get funcBmdh => const AssetGenImage('assets/icons/func_bmdh.png'); + + /// File path: assets/icons/func_bsbx.png AssetGenImage get funcBsbx => const AssetGenImage('assets/icons/func_bsbx.png'); + + /// File path: assets/icons/func_dlxx.png AssetGenImage get funcDlxx => const AssetGenImage('assets/icons/func_dlxx.png'); + + /// File path: assets/icons/func_dzsw.png AssetGenImage get funcDzsw => const AssetGenImage('assets/icons/func_dzsw.png'); + + /// File path: assets/icons/func_fkyq.png AssetGenImage get funcFkyq => const AssetGenImage('assets/icons/func_fkyq.png'); + + /// File path: assets/icons/func_fwll.png AssetGenImage get funcFwll => const AssetGenImage('assets/icons/func_fwll.png'); + + /// File path: assets/icons/func_gife.png AssetGenImage get funcGife => const AssetGenImage('assets/icons/func_gife.png'); + + /// File path: assets/icons/func_hdtp.png AssetGenImage get funcHdtp => const AssetGenImage('assets/icons/func_hdtp.png'); + + /// File path: assets/icons/func_jhgl.png AssetGenImage get funcJhgl => const AssetGenImage('assets/icons/func_jhgl.png'); + + /// File path: assets/icons/func_jyzx.png AssetGenImage get funcJyzx => const AssetGenImage('assets/icons/func_jyzx.png'); + + /// File path: assets/icons/func_jzfw.png AssetGenImage get funcJzfw => const AssetGenImage('assets/icons/func_jzfw.png'); + + /// File path: assets/icons/func_kdbg.png AssetGenImage get funcKdbg => const AssetGenImage('assets/icons/func_kdbg.png'); + + /// File path: assets/icons/func_kmm.png AssetGenImage get funcKmm => const AssetGenImage('assets/icons/func_kmm.png'); + + /// File path: assets/icons/func_shjf.png AssetGenImage get funcShjf => const AssetGenImage('assets/icons/func_shjf.png'); + + /// File path: assets/icons/func_sqjs.png AssetGenImage get funcSqjs => const AssetGenImage('assets/icons/func_sqjs.png'); + + /// File path: assets/icons/func_ssyy.png AssetGenImage get funcSsyy => const AssetGenImage('assets/icons/func_ssyy.png'); + + /// File path: assets/icons/func_tsby.png AssetGenImage get funcTsby => const AssetGenImage('assets/icons/func_tsby.png'); + + /// File path: assets/icons/func_wjdc.png AssetGenImage get funcWjdc => const AssetGenImage('assets/icons/func_wjdc.png'); + + /// File path: assets/icons/func_wpch.png AssetGenImage get funcWpch => const AssetGenImage('assets/icons/func_wpch.png'); + + /// File path: assets/icons/func_yjbj.png AssetGenImage get funcYjbj => const AssetGenImage('assets/icons/func_yjbj.png'); + + /// File path: assets/icons/func_ywh.png AssetGenImage get funcYwh => const AssetGenImage('assets/icons/func_ywh.png'); + + /// File path: assets/icons/func_zbqy.png AssetGenImage get funcZbqy => const AssetGenImage('assets/icons/func_zbqy.png'); + + /// File path: assets/icons/func_zfsm.png AssetGenImage get funcZfsm => const AssetGenImage('assets/icons/func_zfsm.png'); + + /// File path: assets/icons/func_zxgl.png AssetGenImage get funcZxgl => const AssetGenImage('assets/icons/func_zxgl.png'); + + /// File path: assets/icons/goods_borrow.png AssetGenImage get goodsBorrow => const AssetGenImage('assets/icons/goods_borrow.png'); + + /// File path: assets/icons/goods_return.png AssetGenImage get goodsReturn => const AssetGenImage('assets/icons/goods_return.png'); + + /// File path: assets/icons/groupbuy_tab_selected.png AssetGenImage get groupbuyTabSelected => const AssetGenImage('assets/icons/groupbuy_tab_selected.png'); + + /// File path: assets/icons/groupbuy_tab_unselected.png AssetGenImage get groupbuyTabUnselected => const AssetGenImage('assets/icons/groupbuy_tab_unselected.png'); + + /// File path: assets/icons/heartbeat.png AssetGenImage get heartbeat => const AssetGenImage('assets/icons/heartbeat.png'); + + /// File path: assets/icons/hot_fire.png AssetGenImage get hotFire => const AssetGenImage('assets/icons/hot_fire.png'); + + /// File path: assets/icons/house.png AssetGenImage get house => const AssetGenImage('assets/icons/house.png'); + + /// File path: assets/icons/house_keeping.png AssetGenImage get houseKeeping => const AssetGenImage('assets/icons/house_keeping.png'); + + /// File path: assets/icons/icon_address_edit.png AssetGenImage get iconAddressEdit => const AssetGenImage('assets/icons/icon_address_edit.png'); + + /// File path: assets/icons/icon_address_isdefault.png AssetGenImage get iconAddressIsdefault => const AssetGenImage('assets/icons/icon_address_isdefault.png'); + + /// File path: assets/icons/icon_address_not.png AssetGenImage get iconAddressNot => const AssetGenImage('assets/icons/icon_address_not.png'); + + /// File path: assets/icons/icon_back.png AssetGenImage get iconBack => const AssetGenImage('assets/icons/icon_back.png'); + + /// File path: assets/icons/icon_change_grid.png AssetGenImage get iconChangeGrid => const AssetGenImage('assets/icons/icon_change_grid.png'); + + /// File path: assets/icons/icon_change_list.png AssetGenImage get iconChangeList => const AssetGenImage('assets/icons/icon_change_list.png'); + + /// File path: assets/icons/icon_comment.png AssetGenImage get iconComment => const AssetGenImage('assets/icons/icon_comment.png'); + + /// File path: assets/icons/icon_community_push.png AssetGenImage get iconCommunityPush => const AssetGenImage('assets/icons/icon_community_push.png'); + + /// File path: assets/icons/icon_favor_choose.png AssetGenImage get iconFavorChoose => const AssetGenImage('assets/icons/icon_favor_choose.png'); + + /// File path: assets/icons/icon_good_car.png AssetGenImage get iconGoodCar => const AssetGenImage('assets/icons/icon_good_car.png'); + + /// File path: assets/icons/icon_good_favor.png AssetGenImage get iconGoodFavor => const AssetGenImage('assets/icons/icon_good_favor.png'); + + /// File path: assets/icons/icon_good_location.png AssetGenImage get iconGoodLocation => const AssetGenImage('assets/icons/icon_good_location.png'); + + /// File path: assets/icons/icon_good_my.png AssetGenImage get iconGoodMy => const AssetGenImage('assets/icons/icon_good_my.png'); + + /// File path: assets/icons/icon_logistics.png AssetGenImage get iconLogistics => const AssetGenImage('assets/icons/icon_logistics.png'); + + /// File path: assets/icons/icon_main_all.png AssetGenImage get iconMainAll => const AssetGenImage('assets/icons/icon_main_all.png'); + + /// File path: assets/icons/icon_main_consult.png AssetGenImage get iconMainConsult => const AssetGenImage('assets/icons/icon_main_consult.png'); + + /// File path: assets/icons/icon_main_find.png AssetGenImage get iconMainFind => const AssetGenImage('assets/icons/icon_main_find.png'); + + /// File path: assets/icons/icon_main_fix.png AssetGenImage get iconMainFix => const AssetGenImage('assets/icons/icon_main_fix.png'); + + /// File path: assets/icons/icon_main_invite.png AssetGenImage get iconMainInvite => const AssetGenImage('assets/icons/icon_main_invite.png'); + + /// File path: assets/icons/icon_main_location.png AssetGenImage get iconMainLocation => const AssetGenImage('assets/icons/icon_main_location.png'); + + /// File path: assets/icons/icon_main_message.png AssetGenImage get iconMainMessage => const AssetGenImage('assets/icons/icon_main_message.png'); + + /// File path: assets/icons/icon_main_open.png AssetGenImage get iconMainOpen => const AssetGenImage('assets/icons/icon_main_open.png'); + + /// File path: assets/icons/icon_main_pay.png AssetGenImage get iconMainPay => const AssetGenImage('assets/icons/icon_main_pay.png'); + + /// File path: assets/icons/icon_main_police.png AssetGenImage get iconMainPolice => const AssetGenImage('assets/icons/icon_main_police.png'); + + /// File path: assets/icons/icon_main_subscribe.png AssetGenImage get iconMainSubscribe => const AssetGenImage('assets/icons/icon_main_subscribe.png'); + + /// File path: assets/icons/icon_market_success.png AssetGenImage get iconMarketSuccess => const AssetGenImage('assets/icons/icon_market_success.png'); + + /// File path: assets/icons/icon_more.png AssetGenImage get iconMore => const AssetGenImage('assets/icons/icon_more.png'); + + /// File path: assets/icons/icon_more_black.png AssetGenImage get iconMoreBlack => const AssetGenImage('assets/icons/icon_more_black.png'); + + /// File path: assets/icons/icon_my_car.png AssetGenImage get iconMyCar => const AssetGenImage('assets/icons/icon_my_car.png'); + + /// File path: assets/icons/icon_my_carSeat.png AssetGenImage get iconMyCarSeat => const AssetGenImage('assets/icons/icon_my_carSeat.png'); + + /// File path: assets/icons/icon_my_edit.png AssetGenImage get iconMyEdit => const AssetGenImage('assets/icons/icon_my_edit.png'); + + /// File path: assets/icons/icon_my_house.png AssetGenImage get iconMyHouse => const AssetGenImage('assets/icons/icon_my_house.png'); + + /// File path: assets/icons/icon_my_location.png AssetGenImage get iconMyLocation => const AssetGenImage('assets/icons/icon_my_location.png'); + + /// File path: assets/icons/icon_my_setting.png AssetGenImage get iconMySetting => const AssetGenImage('assets/icons/icon_my_setting.png'); + + /// File path: assets/icons/icon_my_visitor.png AssetGenImage get iconMyVisitor => const AssetGenImage('assets/icons/icon_my_visitor.png'); + + /// File path: assets/icons/icon_notification.png AssetGenImage get iconNotification => const AssetGenImage('assets/icons/icon_notification.png'); + + /// File path: assets/icons/icon_price.png AssetGenImage get iconPrice => const AssetGenImage('assets/icons/icon_price.png'); + + /// File path: assets/icons/icon_price_bottom.png AssetGenImage get iconPriceBottom => const AssetGenImage('assets/icons/icon_price_bottom.png'); + + /// File path: assets/icons/icon_price_normal.png AssetGenImage get iconPriceNormal => const AssetGenImage('assets/icons/icon_price_normal.png'); + + /// File path: assets/icons/icon_price_top.png AssetGenImage get iconPriceTop => const AssetGenImage('assets/icons/icon_price_top.png'); + + /// File path: assets/icons/icon_property_location.png AssetGenImage get iconPropertyLocation => const AssetGenImage('assets/icons/icon_property_location.png'); + + /// File path: assets/icons/icon_property_message.png AssetGenImage get iconPropertyMessage => const AssetGenImage('assets/icons/icon_property_message.png'); + + /// File path: assets/icons/icon_property_search.png AssetGenImage get iconPropertySearch => const AssetGenImage('assets/icons/icon_property_search.png'); + + /// File path: assets/icons/icon_setting.png AssetGenImage get iconSetting => const AssetGenImage('assets/icons/icon_setting.png'); + + /// File path: assets/icons/icon_sort.png AssetGenImage get iconSort => const AssetGenImage('assets/icons/icon_sort.png'); + + /// File path: assets/icons/icon_thumbsUp.png AssetGenImage get iconThumbsUp => const AssetGenImage('assets/icons/icon_thumbsUp.png'); + + /// File path: assets/icons/icon_toTop.png AssetGenImage get iconToTop => const AssetGenImage('assets/icons/icon_toTop.png'); + + /// File path: assets/icons/icon_topic_first.png AssetGenImage get iconTopicFirst => const AssetGenImage('assets/icons/icon_topic_first.png'); + + /// File path: assets/icons/icon_topic_second.png AssetGenImage get iconTopicSecond => const AssetGenImage('assets/icons/icon_topic_second.png'); + + /// File path: assets/icons/icon_topic_third.png AssetGenImage get iconTopicThird => const AssetGenImage('assets/icons/icon_topic_third.png'); + + /// File path: assets/icons/identify.png AssetGenImage get identify => const AssetGenImage('assets/icons/identify.png'); + + /// File path: assets/icons/img_add.png AssetGenImage get imgAdd => const AssetGenImage('assets/icons/img_add.png'); + + /// File path: assets/icons/intergral.png AssetGenImage get intergral => const AssetGenImage('assets/icons/intergral.png'); + + /// File path: assets/icons/introduce.png AssetGenImage get introduce => const AssetGenImage('assets/icons/introduce.png'); + + /// File path: assets/icons/lease_house.png AssetGenImage get leaseHouse => const AssetGenImage('assets/icons/lease_house.png'); + + /// File path: assets/icons/like.png AssetGenImage get like => const AssetGenImage('assets/icons/like.png'); + + /// File path: assets/icons/location.png AssetGenImage get location => const AssetGenImage('assets/icons/location.png'); + + /// File path: assets/icons/manager_order_cancel.png AssetGenImage get managerOrderCancel => const AssetGenImage('assets/icons/manager_order_cancel.png'); + + /// File path: assets/icons/manager_phone_call.png AssetGenImage get managerPhoneCall => const AssetGenImage('assets/icons/manager_phone_call.png'); + + /// File path: assets/icons/market_tab_selected.png AssetGenImage get marketTabSelected => const AssetGenImage('assets/icons/market_tab_selected.png'); + + /// File path: assets/icons/market_tab_unselected.png AssetGenImage get marketTabUnselected => const AssetGenImage('assets/icons/market_tab_unselected.png'); + + /// File path: assets/icons/nearby_pet.png AssetGenImage get nearbyPet => const AssetGenImage('assets/icons/nearby_pet.png'); + + /// File path: assets/icons/nearby_service.png AssetGenImage get nearbyService => const AssetGenImage('assets/icons/nearby_service.png'); + + /// File path: assets/icons/oxygen.png AssetGenImage get oxygen => const AssetGenImage('assets/icons/oxygen.png'); + + /// File path: assets/icons/pass.png AssetGenImage get pass => const AssetGenImage('assets/icons/pass.png'); + + /// File path: assets/icons/pay.png AssetGenImage get pay => const AssetGenImage('assets/icons/pay.png'); + + /// File path: assets/icons/phone.png AssetGenImage get phone => const AssetGenImage('assets/icons/phone.png'); + + /// File path: assets/icons/phone_circle.png AssetGenImage get phoneCircle => const AssetGenImage('assets/icons/phone_circle.png'); + + /// File path: assets/icons/projection_screen.png AssetGenImage get projectionScreen => const AssetGenImage('assets/icons/projection_screen.png'); + + /// File path: assets/icons/property.png AssetGenImage get property => const AssetGenImage('assets/icons/property.png'); + + /// File path: assets/icons/proposal.png AssetGenImage get proposal => const AssetGenImage('assets/icons/proposal.png'); + + /// File path: assets/icons/provide_aged.png AssetGenImage get provideAged => const AssetGenImage('assets/icons/provide_aged.png'); + + /// File path: assets/icons/record.png AssetGenImage get record => const AssetGenImage('assets/icons/record.png'); + + /// File path: assets/icons/reject.png AssetGenImage get reject => const AssetGenImage('assets/icons/reject.png'); + + /// File path: assets/icons/report.png AssetGenImage get report => const AssetGenImage('assets/icons/report.png'); + + /// File path: assets/icons/reward.png AssetGenImage get reward => const AssetGenImage('assets/icons/reward.png'); + + /// File path: assets/icons/second_hand.png AssetGenImage get secondHand => const AssetGenImage('assets/icons/second_hand.png'); + + /// File path: assets/icons/second_hand_market.png AssetGenImage get secondHandMarket => const AssetGenImage('assets/icons/second_hand_market.png'); + + /// File path: assets/icons/service.png AssetGenImage get service => const AssetGenImage('assets/icons/service.png'); + + /// File path: assets/icons/share_park.png AssetGenImage get sharePark => const AssetGenImage('assets/icons/share_park.png'); + + /// File path: assets/icons/shield_content.png AssetGenImage get shieldContent => const AssetGenImage('assets/icons/shield_content.png'); + + /// File path: assets/icons/shield_user.png AssetGenImage get shieldUser => const AssetGenImage('assets/icons/shield_user.png'); + + /// File path: assets/icons/shop_car.png AssetGenImage get shopCar => const AssetGenImage('assets/icons/shop_car.png'); + + /// File path: assets/icons/shop_close.png AssetGenImage get shopClose => const AssetGenImage('assets/icons/shop_close.png'); + + /// File path: assets/icons/shop_favorfill.png AssetGenImage get shopFavorfill => const AssetGenImage('assets/icons/shop_favorfill.png'); + + /// File path: assets/icons/shop_laba.png AssetGenImage get shopLaba => const AssetGenImage('assets/icons/shop_laba.png'); + + /// File path: assets/icons/shop_location.png AssetGenImage get shopLocation => const AssetGenImage('assets/icons/shop_location.png'); + + /// File path: assets/icons/shop_notice.png AssetGenImage get shopNotice => const AssetGenImage('assets/icons/shop_notice.png'); + + /// File path: assets/icons/shop_order.png AssetGenImage get shopOrder => const AssetGenImage('assets/icons/shop_order.png'); + + /// File path: assets/icons/shop_search.png AssetGenImage get shopSearch => const AssetGenImage('assets/icons/shop_search.png'); + + /// File path: assets/icons/shop_torb.png AssetGenImage get shopTorb => const AssetGenImage('assets/icons/shop_torb.png'); + + /// File path: assets/icons/shopping_mall.png AssetGenImage get shoppingMall => const AssetGenImage('assets/icons/shopping_mall.png'); + + /// File path: assets/icons/sos.png AssetGenImage get sos => const AssetGenImage('assets/icons/sos.png'); + + /// File path: assets/icons/system_notice.png AssetGenImage get systemNotice => const AssetGenImage('assets/icons/system_notice.png'); + + /// File path: assets/icons/tabbar_home.png AssetGenImage get tabbarHome => const AssetGenImage('assets/icons/tabbar_home.png'); + + /// File path: assets/icons/tabbar_home_no.png AssetGenImage get tabbarHomeNo => const AssetGenImage('assets/icons/tabbar_home_no.png'); + + /// File path: assets/icons/tabbar_house.png AssetGenImage get tabbarHouse => const AssetGenImage('assets/icons/tabbar_house.png'); + + /// File path: assets/icons/tabbar_house_no.png AssetGenImage get tabbarHouseNo => const AssetGenImage('assets/icons/tabbar_house_no.png'); + + /// File path: assets/icons/tabbar_market.png AssetGenImage get tabbarMarket => const AssetGenImage('assets/icons/tabbar_market.png'); + + /// File path: assets/icons/tabbar_market_no.png AssetGenImage get tabbarMarketNo => const AssetGenImage('assets/icons/tabbar_market_no.png'); + + /// File path: assets/icons/tabbar_message.png AssetGenImage get tabbarMessage => const AssetGenImage('assets/icons/tabbar_message.png'); + + /// File path: assets/icons/tabbar_message_no.png AssetGenImage get tabbarMessageNo => const AssetGenImage('assets/icons/tabbar_message_no.png'); + + /// File path: assets/icons/tabbar_user.png AssetGenImage get tabbarUser => const AssetGenImage('assets/icons/tabbar_user.png'); + + /// File path: assets/icons/tabbar_user_no.png AssetGenImage get tabbarUserNo => const AssetGenImage('assets/icons/tabbar_user_no.png'); + + /// File path: assets/icons/tag.png AssetGenImage get tag => const AssetGenImage('assets/icons/tag.png'); + + /// File path: assets/icons/test_kingcion.png AssetGenImage get testKingcion => const AssetGenImage('assets/icons/test_kingcion.png'); + + /// File path: assets/icons/tool_bmdh.png AssetGenImage get toolBmdh => const AssetGenImage('assets/icons/tool_bmdh.png'); + + /// File path: assets/icons/tool_bmts.png AssetGenImage get toolBmts => const AssetGenImage('assets/icons/tool_bmts.png'); + + /// File path: assets/icons/tool_bsbx.png AssetGenImage get toolBsbx => const AssetGenImage('assets/icons/tool_bsbx.png'); + + /// File path: assets/icons/tool_czxs.png AssetGenImage get toolCzxs => const AssetGenImage('assets/icons/tool_czxs.png'); + + /// File path: assets/icons/tool_facility.png AssetGenImage get toolFacility => const AssetGenImage('assets/icons/tool_facility.png'); + + /// File path: assets/icons/tool_fkyq.png AssetGenImage get toolFkyq => const AssetGenImage('assets/icons/tool_fkyq.png'); + + /// File path: assets/icons/tool_fsxb.png AssetGenImage get toolFsxb => const AssetGenImage('assets/icons/tool_fsxb.png'); + + /// File path: assets/icons/tool_hdtp.png AssetGenImage get toolHdtp => const AssetGenImage('assets/icons/tool_hdtp.png'); + + /// File path: assets/icons/tool_jhgl.png AssetGenImage get toolJhgl => const AssetGenImage('assets/icons/tool_jhgl.png'); + + /// File path: assets/icons/tool_jjsh.png AssetGenImage get toolJjsh => const AssetGenImage('assets/icons/tool_jjsh.png'); + + /// File path: assets/icons/tool_jyts.png AssetGenImage get toolJyts => const AssetGenImage('assets/icons/tool_jyts.png'); + + /// File path: assets/icons/tool_kmm.png AssetGenImage get toolKmm => const AssetGenImage('assets/icons/tool_kmm.png'); + + /// File path: assets/icons/tool_mywj.png AssetGenImage get toolMywj => const AssetGenImage('assets/icons/tool_mywj.png'); + + /// File path: assets/icons/tool_qbyy.png AssetGenImage get toolQbyy => const AssetGenImage('assets/icons/tool_qbyy.png'); + + /// File path: assets/icons/tool_shjf.png AssetGenImage get toolShjf => const AssetGenImage('assets/icons/tool_shjf.png'); + + /// File path: assets/icons/tool_smjd.png AssetGenImage get toolSmjd => const AssetGenImage('assets/icons/tool_smjd.png'); + + /// File path: assets/icons/tool_tsby.png AssetGenImage get toolTsby => const AssetGenImage('assets/icons/tool_tsby.png'); + + /// File path: assets/icons/tool_wjdc.png AssetGenImage get toolWjdc => const AssetGenImage('assets/icons/tool_wjdc.png'); + + /// File path: assets/icons/tool_wpcm.png AssetGenImage get toolWpcm => const AssetGenImage('assets/icons/tool_wpcm.png'); + + /// File path: assets/icons/tool_xxfs.png AssetGenImage get toolXxfs => const AssetGenImage('assets/icons/tool_xxfs.png'); + + /// File path: assets/icons/tool_yjbj.png AssetGenImage get toolYjbj => const AssetGenImage('assets/icons/tool_yjbj.png'); + + /// File path: assets/icons/tool_yjkm.png AssetGenImage get toolYjkm => const AssetGenImage('assets/icons/tool_yjkm.png'); + + /// File path: assets/icons/tool_yljs.png AssetGenImage get toolYljs => const AssetGenImage('assets/icons/tool_yljs.png'); + + /// File path: assets/icons/tool_ywh.png AssetGenImage get toolYwh => const AssetGenImage('assets/icons/tool_ywh.png'); + + /// File path: assets/icons/tool_zbbj.png AssetGenImage get toolZbbj => const AssetGenImage('assets/icons/tool_zbbj.png'); + + /// File path: assets/icons/tool_zxgl.png AssetGenImage get toolZxgl => const AssetGenImage('assets/icons/tool_zxgl.png'); + + /// File path: assets/icons/user_icon_dfh.png AssetGenImage get userIconDfh => const AssetGenImage('assets/icons/user_icon_dfh.png'); + + /// File path: assets/icons/user_icon_dfk.png AssetGenImage get userIconDfk => const AssetGenImage('assets/icons/user_icon_dfk.png'); + + /// File path: assets/icons/user_icon_dpj.png AssetGenImage get userIconDpj => const AssetGenImage('assets/icons/user_icon_dpj.png'); + + /// File path: assets/icons/user_icon_dsh.png AssetGenImage get userIconDsh => const AssetGenImage('assets/icons/user_icon_dsh.png'); + + /// File path: assets/icons/user_icon_sh.png AssetGenImage get userIconSh => const AssetGenImage('assets/icons/user_icon_sh.png'); + + /// File path: assets/icons/user_icon_sz.png AssetGenImage get userIconSz => const AssetGenImage('assets/icons/user_icon_sz.png'); + + /// File path: assets/icons/user_icon_vip.png AssetGenImage get userIconVip => const AssetGenImage('assets/icons/user_icon_vip.png'); + + /// File path: assets/icons/user_icon_wdbx.png AssetGenImage get userIconWdbx => const AssetGenImage('assets/icons/user_icon_wdbx.png'); + + /// File path: assets/icons/user_icon_wdc.png AssetGenImage get userIconWdc => const AssetGenImage('assets/icons/user_icon_wdc.png'); + + /// File path: assets/icons/user_icon_wdcw.png AssetGenImage get userIconWdcw => const AssetGenImage('assets/icons/user_icon_wdcw.png'); + + /// File path: assets/icons/user_icon_wddz.png AssetGenImage get userIconWddz => const AssetGenImage('assets/icons/user_icon_wddz.png'); + + /// File path: assets/icons/user_icon_wdfk.png AssetGenImage get userIconWdfk => const AssetGenImage('assets/icons/user_icon_wdfk.png'); + + /// File path: assets/icons/user_icon_wdfw.png AssetGenImage get userIconWdfw => const AssetGenImage('assets/icons/user_icon_wdfw.png'); + + /// File path: assets/icons/user_icon_wdgj.png AssetGenImage get userIconWdgj => const AssetGenImage('assets/icons/user_icon_wdgj.png'); + + /// File path: assets/icons/user_icon_wdjf.png AssetGenImage get userIconWdjf => const AssetGenImage('assets/icons/user_icon_wdjf.png'); + + /// File path: assets/icons/user_icon_wdsqhd.png AssetGenImage get userIconWdsqhd => const AssetGenImage('assets/icons/user_icon_wdsqhd.png'); + + /// File path: assets/icons/vip1.png AssetGenImage get vip1 => const AssetGenImage('assets/icons/vip1.png'); + + /// File path: assets/icons/vip2.png AssetGenImage get vip2 => const AssetGenImage('assets/icons/vip2.png'); + + /// File path: assets/icons/vip3.png AssetGenImage get vip3 => const AssetGenImage('assets/icons/vip3.png'); + + /// File path: assets/icons/vip4.png AssetGenImage get vip4 => const AssetGenImage('assets/icons/vip4.png'); + + /// File path: assets/icons/vip_font.png AssetGenImage get vipFont => const AssetGenImage('assets/icons/vip_font.png'); + + /// File path: assets/icons/watch.png AssetGenImage get watch => const AssetGenImage('assets/icons/watch.png'); + + /// File path: assets/icons/xianshi.png AssetGenImage get xianshi => const AssetGenImage('assets/icons/xianshi.png'); } class $AssetsImagesGen { const $AssetsImagesGen(); + /// File path: assets/images/application.png AssetGenImage get application => const AssetGenImage('assets/images/application.png'); + + /// File path: assets/images/car_header.png AssetGenImage get carHeader => const AssetGenImage('assets/images/car_header.png'); + + /// File path: assets/images/card_blue.png AssetGenImage get cardBlue => const AssetGenImage('assets/images/card_blue.png'); + + /// File path: assets/images/card_pink.png AssetGenImage get cardPink => const AssetGenImage('assets/images/card_pink.png'); + + /// File path: assets/images/card_yellow.png AssetGenImage get cardYellow => const AssetGenImage('assets/images/card_yellow.png'); + + /// File path: assets/images/certification.png AssetGenImage get certification => const AssetGenImage('assets/images/certification.png'); + + /// File path: assets/images/circle_left_bottom.png AssetGenImage get circleLeftBottom => const AssetGenImage('assets/images/circle_left_bottom.png'); + + /// File path: assets/images/circle_right_bottom.png AssetGenImage get circleRightBottom => const AssetGenImage('assets/images/circle_right_bottom.png'); + + /// File path: assets/images/circle_right_top.png AssetGenImage get circleRightTop => const AssetGenImage('assets/images/circle_right_top.png'); + + /// File path: assets/images/circle_text.png AssetGenImage get circleText => const AssetGenImage('assets/images/circle_text.png'); + + /// File path: assets/images/code_logo.png AssetGenImage get codeLogo => const AssetGenImage('assets/images/code_logo.png'); + + /// File path: assets/images/commitment.png AssetGenImage get commitment => const AssetGenImage('assets/images/commitment.png'); + + /// File path: assets/images/community_my_bg.png AssetGenImage get communityMyBg => const AssetGenImage('assets/images/community_my_bg.png'); + + /// File path: assets/images/contact_manager.png AssetGenImage get contactManager => const AssetGenImage('assets/images/contact_manager.png'); + + /// File path: assets/images/drawings.png AssetGenImage get drawings => const AssetGenImage('assets/images/drawings.png'); + + /// File path: assets/images/equipment_empty.png AssetGenImage get equipmentEmpty => const AssetGenImage('assets/images/equipment_empty.png'); + + /// File path: assets/images/good_detail_integral_back.png AssetGenImage get goodDetailIntegralBack => const AssetGenImage('assets/images/good_detail_integral_back.png'); + + /// File path: assets/images/house_attestation.png AssetGenImage get houseAttestation => const AssetGenImage('assets/images/house_attestation.png'); + + /// File path: assets/images/house_empty.png AssetGenImage get houseEmpty => const AssetGenImage('assets/images/house_empty.png'); + + /// File path: assets/images/house_header.png AssetGenImage get houseHeader => const AssetGenImage('assets/images/house_header.png'); + + /// File path: assets/images/license.png AssetGenImage get license => const AssetGenImage('assets/images/license.png'); + + /// File path: assets/images/license_back.png AssetGenImage get licenseBack => const AssetGenImage('assets/images/license_back.png'); + + /// File path: assets/images/lock.png AssetGenImage get lock => const AssetGenImage('assets/images/lock.png'); + + /// File path: assets/images/logo.png AssetGenImage get logo => const AssetGenImage('assets/images/logo.png'); + + /// File path: assets/images/member_bg.png AssetGenImage get memberBg => const AssetGenImage('assets/images/member_bg.png'); + + /// File path: assets/images/mine_bg.png AssetGenImage get mineBg => const AssetGenImage('assets/images/mine_bg.png'); + + /// File path: assets/images/my_bg.png AssetGenImage get myBg => const AssetGenImage('assets/images/my_bg.png'); + + /// File path: assets/images/notice.png AssetGenImage get notice => const AssetGenImage('assets/images/notice.png'); + + /// File path: assets/images/open_door.png AssetGenImage get openDoor => const AssetGenImage('assets/images/open_door.png'); + + /// File path: assets/images/phone_logo.png AssetGenImage get phoneLogo => const AssetGenImage('assets/images/phone_logo.png'); + + /// File path: assets/images/placeholder.webp AssetGenImage get placeholder => const AssetGenImage('assets/images/placeholder.webp'); + + /// File path: assets/images/property_bg.png AssetGenImage get propertyBg => const AssetGenImage('assets/images/property_bg.png'); + + /// File path: assets/images/shop_car_empty.png AssetGenImage get shopCarEmpty => const AssetGenImage('assets/images/shop_car_empty.png'); + + /// File path: assets/images/splash_logo.png AssetGenImage get splashLogo => const AssetGenImage('assets/images/splash_logo.png'); + + /// File path: assets/images/success.png AssetGenImage get success => const AssetGenImage('assets/images/success.png'); + + /// File path: assets/images/white.png AssetGenImage get white => const AssetGenImage('assets/images/white.png'); + + /// File path: assets/images/wxpay.png AssetGenImage get wxpay => const AssetGenImage('assets/images/wxpay.png'); } class $AssetsJsonGen { const $AssetsJsonGen(); + /// File path: assets/json/province.json String get province => 'assets/json/province.json'; } class $AssetsStaticGen { const $AssetsStaticGen(); + /// File path: assets/static/bracelet_header.png AssetGenImage get braceletHeader => const AssetGenImage('assets/static/bracelet_header.png'); + + /// File path: assets/static/car_card_grey.webp AssetGenImage get carCardGrey => const AssetGenImage('assets/static/car_card_grey.webp'); + + /// File path: assets/static/car_card_yellow.webp AssetGenImage get carCardYellow => const AssetGenImage('assets/static/car_card_yellow.webp'); + + /// File path: assets/static/car_park_empty.webp AssetGenImage get carParkEmpty => const AssetGenImage('assets/static/car_park_empty.webp'); + + /// File path: assets/static/family.png AssetGenImage get family => const AssetGenImage('assets/static/family.png'); + + /// File path: assets/static/house_auth_fail.webp AssetGenImage get houseAuthFail => const AssetGenImage('assets/static/house_auth_fail.webp'); + + /// File path: assets/static/house_auth_success.webp AssetGenImage get houseAuthSuccess => const AssetGenImage('assets/static/house_auth_success.webp'); + + /// File path: assets/static/id_card_back.png AssetGenImage get idCardBack => const AssetGenImage('assets/static/id_card_back.png'); + + /// File path: assets/static/id_card_front.png AssetGenImage get idCardFront => const AssetGenImage('assets/static/id_card_front.png'); + + /// File path: assets/static/integral_background.png AssetGenImage get integralBackground => const AssetGenImage('assets/static/integral_background.png'); + + /// File path: assets/static/old_age_back.png AssetGenImage get oldAgeBack => const AssetGenImage('assets/static/old_age_back.png'); + + /// File path: assets/static/parking_grey.webp AssetGenImage get parkingGrey => const AssetGenImage('assets/static/parking_grey.webp'); + + /// File path: assets/static/parking_yellow.webp AssetGenImage get parkingYellow => const AssetGenImage('assets/static/parking_yellow.webp'); + + /// File path: assets/static/review_fail.webp AssetGenImage get reviewFail => const AssetGenImage('assets/static/review_fail.webp'); + + /// File path: assets/static/reviewing.webp AssetGenImage get reviewing => const AssetGenImage('assets/static/reviewing.webp'); + + /// File path: assets/static/rule_explain.png AssetGenImage get ruleExplain => const AssetGenImage('assets/static/rule_explain.png'); + + /// File path: assets/static/sign_in_background.png AssetGenImage get signInBackground => const AssetGenImage('assets/static/sign_in_background.png'); + + /// File path: assets/static/vip_background.png AssetGenImage get vipBackground => const AssetGenImage('assets/static/vip_background.png'); } @@ -613,9 +1251,16 @@ class $AssetsStaticGen { class $AssetsTabGen { const $AssetsTabGen(); + /// File path: assets/tab/bkjh.png AssetGenImage get bkjh => const AssetGenImage('assets/tab/bkjh.png'); + + /// File path: assets/tab/kbhw.png AssetGenImage get kbhw => const AssetGenImage('assets/tab/kbhw.png'); + + /// File path: assets/tab/nanz.png AssetGenImage get nanz => const AssetGenImage('assets/tab/nanz.png'); + + /// File path: assets/tab/nvz.png AssetGenImage get nvz => const AssetGenImage('assets/tab/nvz.png'); } diff --git a/lib/generated_plugin_registrant.dart b/lib/generated_plugin_registrant.dart index 569fce6a..8398580d 100644 --- a/lib/generated_plugin_registrant.dart +++ b/lib/generated_plugin_registrant.dart @@ -7,6 +7,7 @@ import 'package:audio_session/audio_session_web.dart'; import 'package:device_info_plus_web/device_info_plus_web.dart'; +import 'package:flutter_sound_web/flutter_sound_web.dart'; import 'package:image_picker_for_web/image_picker_for_web.dart'; import 'package:just_audio_web/just_audio_web.dart'; import 'package:package_info_plus_web/package_info_plus_web.dart'; @@ -18,6 +19,7 @@ import 'package:flutter_web_plugins/flutter_web_plugins.dart'; void registerPlugins(Registrar registrar) { AudioSessionWeb.registerWith(registrar); DeviceInfoPlusPlugin.registerWith(registrar); + FlutterSoundPlugin.registerWith(registrar); ImagePickerPlugin.registerWith(registrar); JustAudioPlugin.registerWith(registrar); PackageInfoPlugin.registerWith(registrar); diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index 4deff9a7..e9ad7411 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -218,7 +218,7 @@ class _HomePageState extends State mainAxisSize: MainAxisSize.min, children: [ head, - HomeSwiper(), //要做点击事件 + // HomeSwiper(), //要做点击事件 // SizedBox(height: 100.w), Container( padding: EdgeInsets.only(top: 24.w, bottom: 32.w), diff --git a/lib/ui/service/hall/hall_view.dart b/lib/ui/service/hall/hall_view.dart index 87240aa0..addbcb0f 100644 --- a/lib/ui/service/hall/hall_view.dart +++ b/lib/ui/service/hall/hall_view.dart @@ -39,6 +39,7 @@ class _HallViewState extends State { padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w), itemBuilder: (context, index) { return HallCard( + key: ValueKey(models[index].id), model: models[index], refresh: () => _refreshController.callRefresh()); }, diff --git a/lib/ui/service/publish_task_page.dart b/lib/ui/service/publish_task_page.dart index 8b071213..fae61d5c 100644 --- a/lib/ui/service/publish_task_page.dart +++ b/lib/ui/service/publish_task_page.dart @@ -1,19 +1,23 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import 'package:bot_toast/bot_toast.dart'; -import 'package:common_utils/common_utils.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:get/get.dart'; -import 'package:velocity_x/velocity_x.dart'; +import 'dart:io'; import 'package:aku_new_community/base/base_style.dart'; +import 'package:aku_new_community/gen/assets.gen.dart'; import 'package:aku_new_community/ui/service/task_func.dart'; +import 'package:aku_new_community/ui/service/task_remark_page.dart'; import 'package:aku_new_community/utils/headers.dart'; import 'package:aku_new_community/widget/bee_divider.dart'; import 'package:aku_new_community/widget/bee_scaffold.dart'; import 'package:aku_new_community/widget/picker/bee_date_picker.dart'; +import 'package:aku_new_community/widget/picker/bee_pick_image_widget.dart'; import 'package:aku_new_community/widget/picker/bee_picker_box.dart'; +import 'package:aku_new_community/widget/voice_player.dart'; +import 'package:bot_toast/bot_toast.dart'; +import 'package:common_utils/common_utils.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:velocity_x/velocity_x.dart'; class PublishTaskPage extends StatefulWidget { const PublishTaskPage({Key? key}) : super(key: key); @@ -33,14 +37,16 @@ class _PublishTaskPageState extends State { int _rewardType = 0; DateTime? _appointDate = DateTime.now(); TextEditingController _titleController = TextEditingController(); - TextEditingController _contentController = TextEditingController(); TextEditingController _addressController = TextEditingController(); TextEditingController _rewardController = TextEditingController(); + TextEditingController _nameController = TextEditingController(); + TextEditingController _telController = TextEditingController(); + String? _content; + List _photos = []; @override void dispose() { _titleController.dispose(); - _contentController.dispose(); _addressController.dispose(); _rewardController.dispose(); super.dispose(); @@ -50,505 +56,33 @@ class _PublishTaskPageState extends State { Widget build(BuildContext context) { return BeeScaffold( title: '发布任务', - body: SafeArea( - child: ListView( - padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w), - children: [ - Container( - width: double.infinity, - padding: EdgeInsets.only(left: 32.w, right: 32.w, bottom: 32.w), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(16.w), - ), - child: Column( - children: [ - Row( - children: [ - SizedBox( - width: 170.w, - child: '标题' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.45)) - .make(), - ), - Expanded( - child: TextField( - controller: _titleController, - onChanged: (text) => setState(() {}), - autofocus: false, - decoration: InputDecoration( - hintStyle: TextStyle( - fontSize: 28.sp, - color: Colors.black.withOpacity(0.25), - ), - border: InputBorder.none, - hintText: '请输入', - ), - ), - ), - ], - ), - BeeDivider.horizontal(), - 32.w.heightBox, - GestureDetector( - onTap: () async { - _type = 1; - showModalBottomSheet( - context: context, - builder: (context) { - return BeePickerBox( - onPressed: () { - Get.back(); - print(_type); - setState(() {}); - }, - child: CupertinoPicker.builder( - itemExtent: 60.w, - childCount: _types.length, - onSelectedItemChanged: (index) { - _type = index + 1; - }, - itemBuilder: (context, index) { - return Center( - child: _types[index] - .text - .size(32.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.25)) - .make(), - ); - })); - }, - ); - }, - child: Material( - color: Colors.transparent, - child: Row( - children: [ - SizedBox( - width: 170.w, - child: '分类' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.45)) - .make(), - ), - '${_type == 0 ? '请选择分类' : _types[_type - 1]}' - .text - .size(28.sp) - .color(Colors.black - .withOpacity(_type == 0 ? 0.25 : 0.85)) - .make(), - Spacer(), - Icon( - CupertinoIcons.chevron_right, - size: 24.w, - ), - ], - ), - ), - ), - 32.w.heightBox, - BeeDivider.horizontal(), - 32.w.heightBox, - GestureDetector( - onTap: () async { - await Get.bottomSheet(CupertinoActionSheet( - cancelButton: CupertinoActionSheetAction( - onPressed: () { - Get.back(); - }, - child: '取消' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()), - actions: [ - CupertinoActionSheetAction( - onPressed: () { - _sex = 1; - Get.back(); - setState(() {}); - }, - child: '男' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()), - CupertinoActionSheetAction( - onPressed: () { - _sex = 2; - Get.back(); - setState(() {}); - }, - child: '女' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()), - CupertinoActionSheetAction( - onPressed: () { - _sex = 3; - Get.back(); - setState(() {}); - }, - child: '不限' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()) - ], - )); - }, - child: Material( - color: Colors.transparent, - child: Row( - children: [ - SizedBox( - width: 170.w, - child: '性别' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.45)) - .make(), - ), - '${_sex == 0 ? '请选择性别' : _sexStr[_sex - 1]}' - .text - .size(28.sp) - .color(Colors.black - .withOpacity(_sex == 0 ? 0.25 : 0.85)) - .make(), - Spacer(), - Icon( - CupertinoIcons.chevron_right, - size: 24.w, - ), - ], - ), - ), - ), - 32.w.heightBox, - BeeDivider.horizontal(), - 32.w.heightBox, - GestureDetector( - onTap: () async { - await Get.bottomSheet(CupertinoActionSheet( - cancelButton: CupertinoActionSheetAction( - onPressed: () { - Get.back(); - }, - child: '取消' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()), - actions: [ - CupertinoActionSheetAction( - onPressed: () { - _service = 1; - Get.back(); - setState(() {}); - }, - child: '住户' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()), - CupertinoActionSheetAction( - onPressed: () { - _service = 2; - Get.back(); - setState(() {}); - }, - child: '物业' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()), - CupertinoActionSheetAction( - onPressed: () { - _service = 3; - Get.back(); - setState(() {}); - }, - child: '不限' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()) - ], - )); - }, - child: Material( - color: Colors.transparent, - child: Row( - children: [ - SizedBox( - width: 170.w, - child: '服务人员' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.45)) - .make(), - ), - '${_service == 0 ? '请选择服务人员' : _serviceObject[_service - 1]}' - .text - .size(28.sp) - .color(Colors.black - .withOpacity(_service == 0 ? 0.25 : 0.85)) - .make(), - Spacer(), - Icon( - CupertinoIcons.chevron_right, - size: 24.w, - ), - ], - ), - ), - ), - 32.w.heightBox, - BeeDivider.horizontal(), - 32.w.heightBox, - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - '任务内容' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.45)) - .make(), - ], - ), - 32.w.heightBox, - Container( - width: double.infinity, - padding: EdgeInsets.symmetric(horizontal: 24.w), - decoration: BoxDecoration( - color: Colors.black.withOpacity(0.06), - borderRadius: BorderRadius.circular(16.w)), - child: TextField( - controller: _contentController, - autofocus: false, - onChanged: (text) => setState(() {}), - minLines: 5, - maxLength: 200, - maxLines: 20, - decoration: InputDecoration( - border: InputBorder.none, - ), - ), - ), - ], - ), + extendBody: true, + body: Stack( + children: [ + ClipPath( + clipper: _taskBackgroundClip(), + child: Container( + width: double.infinity, + height: 400.w, + color: kPrimaryColor, + )), + SafeArea( + child: ListView( + padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w), + children: [ + _baseInfo(context), + 32.w.heightBox, + _dateAndAddress(), + 24.w.heightBox, + _remarkWidget(), + 24.w.heightBox, + _photoAndVoice(), + 24.w.heightBox, + _rewardWidget(), + ], ), - 32.w.heightBox, - Container( - width: double.infinity, - padding: EdgeInsets.only( - left: 32.w, right: 32.w, bottom: 32.w, top: 32.w), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(16.w), - ), - child: Column( - children: [ - GestureDetector( - onTap: () async { - _appointDate = - await BeeDatePicker.timePicker(DateTime.now()); - }, - child: Material( - color: Colors.transparent, - child: Row( - children: [ - SizedBox( - width: 170.w, - child: '预约时间' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.45)) - .make(), - ), - '${DateUtil.formatDate(_appointDate)}' - .text - .size(28.sp) - .color(Colors.black - .withOpacity(_type == 0 ? 0.25 : 0.85)) - .make(), - Spacer(), - Icon( - CupertinoIcons.chevron_right, - size: 24.w, - ), - ], - ), - ), - ), - 32.w.heightBox, - BeeDivider.horizontal(), - 32.w.heightBox, - Row( - children: [ - SizedBox( - width: 170.w, - child: '预约地址' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.45)) - .make(), - ), - '${S.of(context)!.tempPlotName}' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.85)) - .make(), - '|' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.25)) - .make(), - Expanded( - child: TextField( - autofocus: false, - controller: _addressController, - onChanged: (text) => setState(() {}), - decoration: InputDecoration( - contentPadding: EdgeInsets.zero, - isDense: true, - border: InputBorder.none, - hintText: '请输入', - hintStyle: TextStyle( - fontSize: 28.sp, - color: Colors.black.withOpacity(0.25), - )), - ), - ), - ], - ), - 32.w.heightBox, - BeeDivider.horizontal(), - 32.w.heightBox, - GestureDetector( - onTap: () async { - await Get.bottomSheet(CupertinoActionSheet( - cancelButton: CupertinoActionSheetAction( - onPressed: () { - Get.back(); - }, - child: '取消' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()), - actions: [ - CupertinoActionSheetAction( - onPressed: () { - _rewardType = 1; - Get.back(); - setState(() {}); - }, - child: '赏金' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()), - CupertinoActionSheetAction( - onPressed: () { - _rewardType = 2; - Get.back(); - setState(() {}); - }, - child: '积分' - .text - .size(28.sp) - .isIntrinsic - .color(Colors.black.withOpacity(0.85)) - .make()), - ], - )); - }, - child: Material( - color: Colors.transparent, - child: Row( - children: [ - SizedBox( - width: 170.w, - child: '报酬类型' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.45)) - .make(), - ), - '${_rewardType == 0 ? '请选择报酬类型' : _rewardTypes[_rewardType - 1]}' - .text - .size(28.sp) - .color(Colors.black - .withOpacity(_rewardType == 0 ? 0.25 : 0.85)) - .make(), - Spacer(), - Icon( - CupertinoIcons.chevron_right, - size: 24.w, - ), - ], - ), - ), - ), - 32.w.heightBox, - BeeDivider.horizontal(), - 32.w.heightBox, - Row( - children: [ - SizedBox( - width: 170.w, - child: '${_rewardType == 1 ? '赏金金额' : '积分数量'}' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.45)) - .make(), - ), - Expanded( - child: TextField( - textAlign: TextAlign.end, - onChanged: (text) => setState(() {}), - autofocus: false, - controller: _rewardController, - style: TextStyle(color: Colors.red), - decoration: InputDecoration( - contentPadding: EdgeInsets.zero, - isDense: true, - border: InputBorder.none, - hintText: '请输入', - hintStyle: TextStyle( - fontSize: 28.sp, - color: Colors.black.withOpacity(0.25), - )), - ), - ), - '${_rewardType == 1 ? '元' : ''}' - .text - .size(28.sp) - .color(Colors.black.withOpacity(0.85)) - .make(), - ], - ) - ], - ), - ), - ], - ), + ) + ], ), bottomNavi: Padding( padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w), @@ -570,7 +104,7 @@ class _PublishTaskPageState extends State { taskType: _type, taskSex: _sex, serviceObject: _service, - taskContent: _contentController.text, + taskContent: _content ?? '', taskDate: _appointDate.toString(), taskAddress: _addressController.text, rewardType: _rewardType, @@ -586,6 +120,736 @@ class _PublishTaskPageState extends State { ); } + Container _baseInfo(BuildContext context) { + var type = GestureDetector( + onTap: () async { + _type = 1; + showModalBottomSheet( + context: context, + builder: (context) { + return BeePickerBox( + onPressed: () { + Get.back(); + print(_type); + setState(() {}); + }, + child: CupertinoPicker.builder( + itemExtent: 60.w, + childCount: _types.length, + onSelectedItemChanged: (index) { + _type = index + 1; + }, + itemBuilder: (context, index) { + return Center( + child: _types[index] + .text + .size(32.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.25)) + .make(), + ); + })); + }, + ); + }, + child: Material( + color: Colors.transparent, + child: Row( + children: [ + SizedBox( + width: 170.w, + child: '分类' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + '${_type == 0 ? '请选择分类' : _types[_type - 1]}' + .text + .size(28.sp) + .color(Colors.black.withOpacity(_type == 0 ? 0.25 : 0.85)) + .make(), + Spacer(), + Icon( + CupertinoIcons.chevron_right, + size: 24.w, + ), + ], + ), + ), + ); + var sex = GestureDetector( + onTap: () async { + await Get.bottomSheet(CupertinoActionSheet( + cancelButton: CupertinoActionSheetAction( + onPressed: () { + Get.back(); + }, + child: '取消' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()), + actions: [ + CupertinoActionSheetAction( + onPressed: () { + _sex = 1; + Get.back(); + setState(() {}); + }, + child: '男' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()), + CupertinoActionSheetAction( + onPressed: () { + _sex = 2; + Get.back(); + setState(() {}); + }, + child: '女' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()), + CupertinoActionSheetAction( + onPressed: () { + _sex = 3; + Get.back(); + setState(() {}); + }, + child: '不限' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()) + ], + )); + }, + child: Material( + color: Colors.transparent, + child: Row( + children: [ + SizedBox( + width: 170.w, + child: '性别' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + '${_sex == 0 ? '请选择性别' : _sexStr[_sex - 1]}' + .text + .size(28.sp) + .color(Colors.black.withOpacity(_sex == 0 ? 0.25 : 0.85)) + .make(), + Spacer(), + Icon( + CupertinoIcons.chevron_right, + size: 24.w, + ), + ], + ), + ), + ); + var servicePersonnel = GestureDetector( + onTap: () async { + await Get.bottomSheet(CupertinoActionSheet( + cancelButton: CupertinoActionSheetAction( + onPressed: () { + Get.back(); + }, + child: '取消' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()), + actions: [ + CupertinoActionSheetAction( + onPressed: () { + _service = 1; + Get.back(); + setState(() {}); + }, + child: '住户' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()), + CupertinoActionSheetAction( + onPressed: () { + _service = 2; + Get.back(); + setState(() {}); + }, + child: '物业' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()), + CupertinoActionSheetAction( + onPressed: () { + _service = 3; + Get.back(); + setState(() {}); + }, + child: '不限' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()) + ], + )); + }, + child: Material( + color: Colors.transparent, + child: Row( + children: [ + SizedBox( + width: 170.w, + child: '服务人员' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + '${_service == 0 ? '请选择服务人员' : _serviceObject[_service - 1]}' + .text + .size(28.sp) + .color(Colors.black.withOpacity(_service == 0 ? 0.25 : 0.85)) + .make(), + Spacer(), + Icon( + CupertinoIcons.chevron_right, + size: 24.w, + ), + ], + ), + ), + ); + return Container( + width: double.infinity, + padding: EdgeInsets.only(left: 32.w, right: 32.w, bottom: 32.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16.w), + ), + child: Column( + children: [ + 32.w.heightBox, + type, + 32.w.heightBox, + BeeDivider.horizontal(), + 32.w.heightBox, + sex, + 32.w.heightBox, + BeeDivider.horizontal(), + 32.w.heightBox, + servicePersonnel, + ], + ), + ); + } + + Container _dateAndAddress() { + var date = GestureDetector( + onTap: () async { + _appointDate = await BeeDatePicker.timePicker(DateTime.now()); + }, + child: Material( + color: Colors.transparent, + child: Row( + children: [ + SizedBox( + width: 170.w, + child: '预计时间' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + '${DateUtil.formatDate(_appointDate)}' + .text + .size(28.sp) + .color(Colors.black.withOpacity(_type == 0 ? 0.25 : 0.85)) + .make(), + Spacer(), + Icon( + CupertinoIcons.chevron_right, + size: 24.w, + ), + ], + ), + ), + ); + var contact = Row( + children: [ + SizedBox( + width: 170.w, + child: '联系人' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + Expanded( + child: TextField( + textAlign: TextAlign.start, + onChanged: (text) => setState(() {}), + autofocus: false, + controller: _nameController, + style: TextStyle(color: Colors.red), + decoration: InputDecoration( + contentPadding: EdgeInsets.zero, + isDense: true, + border: InputBorder.none, + hintText: '请输入姓名', + hintStyle: TextStyle( + fontSize: 28.sp, + color: Colors.black.withOpacity(0.25), + )), + ), + ), + ], + ); + var tel = Row( + children: [ + SizedBox( + width: 170.w, + child: '联系电话' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + Expanded( + child: TextField( + textAlign: TextAlign.start, + onChanged: (text) => setState(() {}), + autofocus: false, + controller: _telController, + style: TextStyle(color: Colors.red), + decoration: InputDecoration( + contentPadding: EdgeInsets.zero, + isDense: true, + border: InputBorder.none, + hintText: '请输入电话', + hintStyle: TextStyle( + fontSize: 28.sp, + color: Colors.black.withOpacity(0.25), + )), + ), + ), + ], + ); + return Container( + width: double.infinity, + padding: + EdgeInsets.only(left: 32.w, right: 32.w, bottom: 32.w, top: 32.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16.w), + ), + child: Column( + children: [ + date, + 32.w.heightBox, + BeeDivider.horizontal(), + 32.w.heightBox, + contact, + 32.w.heightBox, + BeeDivider.horizontal(), + 32.w.heightBox, + tel, + 32.w.heightBox, + BeeDivider.horizontal(), + 32.w.heightBox, + GestureDetector( + onTap: () {}, + child: Material( + color: Colors.transparent, + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + children: [ + Container( + margin: EdgeInsets.only(left: 8.w), + width: 32.w, + height: 32.w, + alignment: Alignment.center, + decoration: BoxDecoration( + color: kPrimaryColor, + borderRadius: BorderRadius.circular(20.w)), + child: '取'.text.size(20.w).black.bold.make(), + ), + 8.w.heightBox, + _connect(5), + 8.w.heightBox, + ], + ), + 20.w.widthBox, + SizedBox( + width: 430.w, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + '鲍汁牛肉饭'.text.size(32.sp).black.bold.make(), + 12.w.heightBox, + '江西省萍乡市莲花县良坊镇 19 幢 252 室daidjwoajdiowajdoiwa' + .text + .maxLines(1) + .overflow(TextOverflow.ellipsis) + .size(24.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ], + ), + ), + Spacer(), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + 20.hb, + Icon( + CupertinoIcons.chevron_right, + size: 40.w, + color: Colors.black.withOpacity(0.45), + ) + ], + ) + ], + ), + ), + ), + Row( + children: [ + Padding( + padding: EdgeInsets.only(left: 2.w), + child: Assets.icons.connect.image(width: 40.w, height: 40.w), + ), + 20.wb, + BeeDivider.horizontal().expand(), + ], + ), + GestureDetector( + onTap: () {}, + child: Material( + color: Colors.transparent, + child: Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Column( + children: [ + 8.w.heightBox, + _connect(5), + 8.w.heightBox, + Container( + margin: EdgeInsets.only(left: 8.w), + width: 32.w, + height: 32.w, + alignment: Alignment.center, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(20.w)), + child: '送'.text.size(20.w).white.bold.make(), + ), + ], + ), + 20.w.widthBox, + SizedBox( + width: 430.w, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + '鲍汁牛肉饭' + .text + .size(32.sp) + .black + .lineHeight(1.1) + .bold + .make(), + 12.w.heightBox, + '江西省萍乡市莲花县良坊镇 19 幢 252 室daidjwoajdiowajdoiwa' + .text + .maxLines(1) + .overflow(TextOverflow.ellipsis) + .size(24.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ], + ), + ), + Spacer(), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + 20.hb, + Icon( + CupertinoIcons.chevron_right, + size: 40.w, + color: Colors.black.withOpacity(0.45), + ) + ], + ) + ], + ), + ), + ) + ], + ), + ); + } + + Container _remarkWidget() { + return Container( + width: double.infinity, + padding: + EdgeInsets.only(left: 32.w, right: 32.w, bottom: 32.w, top: 32.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16.w), + ), + child: Column( + children: [ + GestureDetector( + onTap: () async { + _content = await Get.to(() => TaskRemarkPage()); + }, + child: Material( + color: Colors.transparent, + child: Row( + children: [ + SizedBox( + width: 170.w, + child: '任务备注' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + '${_content == null ? '请输入任务备注' : _content}' + .text + .size(28.sp) + .color(Colors.black + .withOpacity(_rewardType == 0 ? 0.25 : 0.85)) + .make(), + Spacer(), + Icon( + CupertinoIcons.chevron_right, + size: 24.w, + ), + ], + ), + ), + ), + ], + ), + ); + } + + Container _rewardWidget() { + var type = GestureDetector( + onTap: () async { + await Get.bottomSheet(CupertinoActionSheet( + cancelButton: CupertinoActionSheetAction( + onPressed: () { + Get.back(); + }, + child: '取消' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()), + actions: [ + CupertinoActionSheetAction( + onPressed: () { + _rewardType = 1; + Get.back(); + setState(() {}); + }, + child: '赏金' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()), + CupertinoActionSheetAction( + onPressed: () { + _rewardType = 2; + Get.back(); + setState(() {}); + }, + child: '积分' + .text + .size(28.sp) + .isIntrinsic + .color(Colors.black.withOpacity(0.85)) + .make()), + ], + )); + }, + child: Material( + color: Colors.transparent, + child: Row( + children: [ + SizedBox( + width: 170.w, + child: '报酬类型' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + '${_rewardType == 0 ? '请选择报酬类型' : _rewardTypes[_rewardType - 1]}' + .text + .size(28.sp) + .color(Colors.black.withOpacity(_rewardType == 0 ? 0.25 : 0.85)) + .make(), + Spacer(), + Icon( + CupertinoIcons.chevron_right, + size: 24.w, + ), + ], + ), + ), + ); + var count = Row( + children: [ + SizedBox( + width: 170.w, + child: '${_rewardType == 1 ? '赏金金额' : '积分数量'}' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + Expanded( + child: TextField( + textAlign: TextAlign.end, + onChanged: (text) => setState(() {}), + autofocus: false, + controller: _rewardController, + style: TextStyle(color: Colors.red), + decoration: InputDecoration( + contentPadding: EdgeInsets.zero, + isDense: true, + border: InputBorder.none, + hintText: '请输入', + hintStyle: TextStyle( + fontSize: 28.sp, + color: Colors.black.withOpacity(0.25), + )), + ), + ), + '${_rewardType == 1 ? '元' : ''}' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.85)) + .make(), + ], + ); + return Container( + width: double.infinity, + padding: + EdgeInsets.only(left: 32.w, right: 32.w, bottom: 32.w, top: 32.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16.w), + ), + child: Column( + children: [ + type, + 32.w.heightBox, + BeeDivider.horizontal(), + 32.w.heightBox, + count, + ], + ), + ); + } + + Container _photoAndVoice() { + return Container( + width: double.infinity, + padding: + EdgeInsets.only(left: 32.w, right: 32.w, bottom: 32.w, top: 32.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16.w), + ), + child: Column( + children: [ + Row( + children: [ + '上传图片' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + Spacer(), + '建议上传图片不超过6张' + .text + .size(24.sp) + .color(Colors.black.withOpacity(0.25)) + .make(), + ], + ), + 24.w.heightBox, + BeePickImageWidget(onChanged: (value) { + _photos = value; + }), + 24.w.heightBox, + BeeDivider.horizontal(), + 24.w.heightBox, + GestureDetector( + onTap: () async { + await Get.bottomSheet(Container()); + }, + child: Material( + color: Colors.transparent, + child: Row( + children: [ + SizedBox( + width: 170.w, + child: '上传语音' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ), + VoicePlayer( + url: '5d143e1b735b0.mp3', + showXmark: true, + onDelete: () {}, + ), + Spacer(), + Icon( + CupertinoIcons.chevron_right, + size: 24.w, + ), + ], + ), + ), + ), + ], + ), + ); + } + bool get canTap { if (_titleController.text.isEmpty) { return false; @@ -602,7 +866,7 @@ class _PublishTaskPageState extends State { if (_appointDate == null) { return false; } - if (_contentController.text.isEmpty) { + if (_content == null) { return false; } if (_addressController.text.isEmpty) { @@ -613,4 +877,38 @@ class _PublishTaskPageState extends State { } return true; } + + _connect(int num) { + return Column( + children: List.generate( + num, + (index) => Container( + width: 4.w, + height: 4.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(2.w), + color: Colors.black.withOpacity(0.25)), + )).sepWidget(separate: 4.w.heightBox), + ); + } +} + +class _taskBackgroundClip extends CustomClipper { + @override + Path getClip(Size size) { + var offset = size.height - 25.0; + var path = Path(); + path.moveTo(0, offset); + path.quadraticBezierTo(size.width / 2, size.height, size.width, offset); + path.lineTo(size.width, 0); + path.lineTo(0, 0); + path.lineTo(0, offset); + path.close(); + return path; + } + + @override + bool shouldReclip(covariant CustomClipper oldClipper) { + return false; + } } diff --git a/lib/ui/service/task_func.dart b/lib/ui/service/task_func.dart index 2e29aa63..7ac6ab51 100644 --- a/lib/ui/service/task_func.dart +++ b/lib/ui/service/task_func.dart @@ -32,7 +32,7 @@ class TaskFunc { static Future cancel({ required int taskId, }) async { - var base = await NetUtil().get(API.manager.task.cancel, params: { + var base = await NetUtil().get(SARSAPI.task.cancel, params: { 'taskId': taskId, }); return base.success; @@ -43,9 +43,11 @@ class TaskFunc { static Future take({ required int taskId, }) async { - var base = await NetUtil().get(API.manager.task.take, params: { - 'taskId': taskId, - }); + var base = await NetUtil().get(SARSAPI.task.receive, + params: { + 'taskId': taskId, + }, + showMessage: true); return base.success; } @@ -54,9 +56,40 @@ class TaskFunc { static Future finish({ required int taskId, }) async { - var base = await NetUtil().get(API.manager.task.finish, params: { + var base = await NetUtil().get(SARSAPI.task.finish, params: { 'taskId': taskId, }); return base.success; } + + /// 确认任务 + static Future confirm({ + required int taskId, + }) async { + var base = await NetUtil().get(SARSAPI.task.confirm, params: { + 'taskId': taskId, + }); + return base.success; + } + + ///开始服务 + static Future start({ + required int taskId, + }) async { + var base = await NetUtil().get(SARSAPI.task.startService, params: { + 'taskId': taskId, + }); + return base.success; + } + + ///任务评价 + static Future evaluate({ + required int taskId, + required int star, + required String evaluation, + }) async { + var base = await NetUtil().get(SARSAPI.task.evaluation, + params: {'taskId': taskId, 'star': star, 'evaluation': evaluation}); + return base.success; + } } diff --git a/lib/ui/service/task_remark_page.dart b/lib/ui/service/task_remark_page.dart new file mode 100644 index 00000000..69718978 --- /dev/null +++ b/lib/ui/service/task_remark_page.dart @@ -0,0 +1,82 @@ +import 'package:aku_new_community/base/base_style.dart'; +import 'package:aku_new_community/widget/bee_scaffold.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:velocity_x/src/extensions/num_ext.dart'; +import 'package:velocity_x/src/extensions/string_ext.dart'; + +class TaskRemarkPage extends StatefulWidget { + const TaskRemarkPage({Key? key}) : super(key: key); + + @override + _TaskRemarkPageState createState() => _TaskRemarkPageState(); +} + +class _TaskRemarkPageState extends State { + TextEditingController _contentController = TextEditingController(); + + @override + void dispose() { + _contentController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return BeeScaffold( + title: '添加备注', + body: ListView( + padding: EdgeInsets.all(32.w), + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + '任务内容' + .text + .size(28.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + ], + ), + 32.w.heightBox, + Container( + width: double.infinity, + padding: EdgeInsets.symmetric(horizontal: 24.w), + decoration: BoxDecoration( + color: Colors.black.withOpacity(0.06), + borderRadius: BorderRadius.circular(16.w)), + child: TextField( + controller: _contentController, + autofocus: false, + onChanged: (text) => setState(() {}), + minLines: 5, + maxLength: 200, + maxLines: 20, + decoration: InputDecoration( + border: InputBorder.none, + ), + ), + ) + ], + ), + bottomNavi: Padding( + padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w), + child: MaterialButton( + elevation: 0, + height: 93.w, + disabledColor: Colors.black.withOpacity(0.06), + disabledTextColor: Colors.black.withOpacity(0.25), + textColor: Colors.black.withOpacity(0.85), + shape: + RoundedRectangleBorder(borderRadius: BorderRadius.circular(65.w)), + color: kPrimaryColor, + onPressed: () async { + Get.back(result: _contentController.text); + }, + child: '完成'.text.size(32.sp).bold.make(), + ), + ), + ); + } +} diff --git a/lib/widget/picker/bee_pick_image_widget.dart b/lib/widget/picker/bee_pick_image_widget.dart new file mode 100644 index 00000000..8e245d56 --- /dev/null +++ b/lib/widget/picker/bee_pick_image_widget.dart @@ -0,0 +1,115 @@ +// Dart imports: +import 'dart:io'; + +import 'package:aku_new_community/extensions/widget_list_ext.dart'; +import 'package:aku_new_community/gen/assets.gen.dart'; +import 'package:aku_new_community/widget/picker/bee_image_picker.dart'; +// Package imports: +import 'package:dotted_border/dotted_border.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:velocity_x/velocity_x.dart'; + +class BeePickImageWidget extends StatefulWidget { + final double? size; + final Function(List files) onChanged; + final String description; + + BeePickImageWidget( + {Key? key, this.size, required this.onChanged, this.description = '上传照片'}) + : super(key: key); + + @override + _BeePickImageWidgetState createState() => _BeePickImageWidgetState(); +} + +class _BeePickImageWidgetState extends State { + List _files = []; + + @override + Widget build(BuildContext context) { + return Row( + children: [ + ..._files.map((e) => showImage(e)).toList(), + GestureDetector( + onTap: () async { + await BeeImagePicker.pick(title: '选择图片').then( + (value) { + if (value != null) { + _files.add( + File(value.path), + ); + } + }, + ); + widget.onChanged(_files); + setState(() {}); + }, + child: DottedBorder( + color: Colors.black.withOpacity(0.25), + borderType: BorderType.RRect, + strokeWidth: 2.w, + dashPattern: [6, 3], + radius: Radius.circular(8.w), + child: Container( + width: widget.size ?? 160.w, + height: widget.size ?? 160.w, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + Assets.icons.camera.path, + width: 60.w, + height: 60.w, + color: Color(0xFF999999), + ), + 4.w.heightBox, + widget.description.text + .color(Colors.black.withOpacity(0.45)) + .size(22.sp) + .make(), + ], + ), + ), + ).material(color: Colors.transparent), + ) + ].sepWidget(separate: 10.w.widthBox), + ); + } + + Widget showImage(File file) { + return Stack(children: [ + Container( + width: widget.size ?? 160.w, + height: widget.size ?? 160.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.w), + color: Colors.black.withOpacity(0.03)), + child: Image.file(file), + ), + Positioned( + top: 8.w, + right: 8.w, + child: Container( + width: 40.w, + height: 40.w, + child: Icon( + CupertinoIcons.xmark, + size: 20.w, + color: Colors.white, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20.w), + color: Color(0xFF000000), + ), + ).onTap(() { + _files.remove(file); + widget.onChanged(_files); + setState(() {}); + }), + ) + ]); + } +} diff --git a/lib/widget/voice_player.dart b/lib/widget/voice_player.dart index a6dd44d3..4fc518a9 100644 --- a/lib/widget/voice_player.dart +++ b/lib/widget/voice_player.dart @@ -3,14 +3,19 @@ import 'dart:math'; import 'package:aku_new_community/constants/sars_api.dart'; import 'package:aku_new_community/extensions/num_ext.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:just_audio/just_audio.dart'; class VoicePlayer extends StatefulWidget { final String url; + final VoidCallback? onDelete; + final bool showXmark; - const VoicePlayer({Key? key, required this.url}) : super(key: key); + const VoicePlayer( + {Key? key, required this.url, this.onDelete, this.showXmark = false}) + : super(key: key); @override _VoicePlayerState createState() => _VoicePlayerState(); @@ -26,12 +31,13 @@ class _VoicePlayerState extends State bool inAnimate = false; final player = AudioPlayer(); Timer? _timer; - int _voiceLength = 0; + Duration? _voiceLength; + int _currentLength = 0; void stopPlay() { inAnimate = false; controller.stop(); - player.stop(); + player.pause(); _timer?.cancel(); _timer = null; if (mounted) { @@ -39,25 +45,45 @@ class _VoicePlayerState extends State } } - void startPlay() { + void startPlay() async { inAnimate = true; controller.forward(); player.play(); _timer = Timer.periodic(Duration(seconds: 1), (timer) async { - _voiceLength--; - if (_voiceLength <= 0) { - _voiceLength = (player.duration?.inSeconds) ?? 0; - _timer?.cancel(); - _timer = null; - controller.stop(); - inAnimate = false; - } - if (mounted) { - setState(() {}); + _currentLength--; + if (_currentLength <= 0) { + resetPlay(); + } else { + if (mounted) { + setState(() {}); + } } }); } + Future initVoice() async { + await player.setUrl(SARSAPI.image(widget.url)); + _voiceLength = await player.load(); + _currentLength = _voiceLength?.inSeconds ?? 0; + await player.setClip(start: Duration(seconds: 0), end: _voiceLength); + if (mounted) { + setState(() {}); + } + } + + Future resetPlay() async { + _timer?.cancel(); + _timer = null; + controller.stop(); + inAnimate = false; + player.stop(); + _currentLength = _voiceLength?.inSeconds ?? 0; + await player.setClip(start: Duration(seconds: 0), end: _voiceLength); + if (mounted) { + setState(() {}); + } + } + @override void initState() { controller = AnimationController( @@ -80,17 +106,16 @@ class _VoicePlayerState extends State controller.forward(); } }); - Future.delayed(Duration(milliseconds: 0), () async { - await player.setUrl(SARSAPI.image(widget.url)); - var length = await player.load(); - _voiceLength = length?.inSeconds ?? 0; - if (mounted) { - setState(() {}); - } - }); + initVoice(); super.initState(); } + @override + void didUpdateWidget(covariant VoicePlayer oldWidget) { + resetPlay(); + super.didUpdateWidget(oldWidget); + } + @override void dispose() { stopPlay(); @@ -113,22 +138,40 @@ class _VoicePlayerState extends State }, child: Material( color: Colors.transparent, - child: Container( - width: width, - // height: height, - padding: EdgeInsets.symmetric(vertical: 14.w, horizontal: 20.w), - decoration: BoxDecoration( - color: Color(0xFFFFE7BA), - borderRadius: BorderRadius.circular(8.w)), - child: Row( - children: [ - CustomPaint( - painter: VoicePlayerPainter(inAnimate ? animation.value : 3), + child: Stack( + fit: StackFit.passthrough, + clipBehavior: Clip.none, + children: [ + Container( + width: width, + // height: height, + padding: EdgeInsets.symmetric(vertical: 14.w, horizontal: 20.w), + decoration: BoxDecoration( + color: Color(0xFFFFE7BA), + borderRadius: BorderRadius.circular(8.w)), + child: Row( + children: [ + CustomPaint( + painter: + VoicePlayerPainter(inAnimate ? animation.value : 3), + ), + 40.wb, + Text('${_currentLength}\"'), + ], ), - 40.wb, - Text('${_voiceLength}\"'), - ], - ), + ), + if (widget.showXmark) + Positioned( + top: -10.w, + right: -10.w, + child: GestureDetector( + onTap: widget.onDelete, + child: Icon( + CupertinoIcons.xmark_circle_fill, + size: 30.w, + ), + )) + ], ), ), ); diff --git a/pubspec.lock b/pubspec.lock index 08b67853..e4dbe354 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -512,6 +512,27 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.6.0" + flutter_sound: + dependency: "direct main" + description: + name: flutter_sound + url: "https://pub.flutter-io.cn" + source: hosted + version: "9.1.3" + flutter_sound_platform_interface: + dependency: transitive + description: + name: flutter_sound_platform_interface + url: "https://pub.flutter-io.cn" + source: hosted + version: "9.1.3" + flutter_sound_web: + dependency: transitive + description: + name: flutter_sound_web + url: "https://pub.flutter-io.cn" + source: hosted + version: "9.1.3" flutter_test: dependency: "direct dev" description: flutter @@ -990,7 +1011,7 @@ packages: name: provider url: "https://pub.flutter-io.cn" source: hosted - version: "5.0.0" + version: "6.0.2" pub_semver: dependency: "direct dev" description: @@ -1042,6 +1063,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" + recase: + dependency: transitive + description: + name: recase + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.0.0" rxdart: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index d86a155c..76bfb278 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: #包信息 package_info: ^2.0.0 #状态管理 - provider: ^5.0.0 + provider: ^6.0.0 #屏幕适配 flutter_screenutil: ^5.0.0+2 #图标集合 @@ -117,6 +117,8 @@ dependencies: palette_generator: ^0.3.2 #音频播放 just_audio: ^0.9.20 + #录音 + flutter_sound: ^9.1.3 dev_dependencies: