diff --git a/assets/change_voice/audio/boy.mp3 b/assets/audio/boy.mp3 similarity index 100% rename from assets/change_voice/audio/boy.mp3 rename to assets/audio/boy.mp3 diff --git a/assets/change_voice/audio/child.mp3 b/assets/audio/child.mp3 similarity index 100% rename from assets/change_voice/audio/child.mp3 rename to assets/audio/child.mp3 diff --git a/assets/change_voice/audio/elder.mp3 b/assets/audio/elder.mp3 similarity index 100% rename from assets/change_voice/audio/elder.mp3 rename to assets/audio/elder.mp3 diff --git a/assets/change_voice/audio/girl.mp3 b/assets/audio/girl.mp3 similarity index 100% rename from assets/change_voice/audio/girl.mp3 rename to assets/audio/girl.mp3 diff --git a/assets/change_voice/audio/man.mp3 b/assets/audio/man.mp3 similarity index 100% rename from assets/change_voice/audio/man.mp3 rename to assets/audio/man.mp3 diff --git a/assets/change_voice/audio/monsters.mp3 b/assets/audio/monsters.mp3 similarity index 100% rename from assets/change_voice/audio/monsters.mp3 rename to assets/audio/monsters.mp3 diff --git a/assets/change_voice/audio/robot.wav b/assets/audio/robot.wav similarity index 100% rename from assets/change_voice/audio/robot.wav rename to assets/audio/robot.wav diff --git a/assets/change_voice/audio/sexy.mp3 b/assets/audio/sexy.mp3 similarity index 100% rename from assets/change_voice/audio/sexy.mp3 rename to assets/audio/sexy.mp3 diff --git a/assets/change_voice/audio/woman.mp3 b/assets/audio/woman.mp3 similarity index 100% rename from assets/change_voice/audio/woman.mp3 rename to assets/audio/woman.mp3 diff --git a/assets/change_voice/audio/rapper.jpeg b/assets/change_voice/audio/rapper.jpeg deleted file mode 100755 index 63a0e84..0000000 Binary files a/assets/change_voice/audio/rapper.jpeg and /dev/null differ diff --git a/assets/change_voice/audio/rapper.mp3 b/assets/change_voice/audio/rapper.mp3 deleted file mode 100644 index c3c1e6c..0000000 Binary files a/assets/change_voice/audio/rapper.mp3 and /dev/null differ diff --git a/assets/change_voice/images/2.0x/about.png b/assets/images/change_voice/2.0x/about.png similarity index 100% rename from assets/change_voice/images/2.0x/about.png rename to assets/images/change_voice/2.0x/about.png diff --git a/assets/change_voice/images/2.0x/arrow_down_back.png b/assets/images/change_voice/2.0x/arrow_down_back.png similarity index 100% rename from assets/change_voice/images/2.0x/arrow_down_back.png rename to assets/images/change_voice/2.0x/arrow_down_back.png diff --git a/assets/change_voice/images/2.0x/bnb1_selected.png b/assets/images/change_voice/2.0x/bnb1_selected.png similarity index 100% rename from assets/change_voice/images/2.0x/bnb1_selected.png rename to assets/images/change_voice/2.0x/bnb1_selected.png diff --git a/assets/change_voice/images/2.0x/bnb1_unselected.png b/assets/images/change_voice/2.0x/bnb1_unselected.png similarity index 100% rename from assets/change_voice/images/2.0x/bnb1_unselected.png rename to assets/images/change_voice/2.0x/bnb1_unselected.png diff --git a/assets/change_voice/images/2.0x/bnb2_selected.png b/assets/images/change_voice/2.0x/bnb2_selected.png similarity index 100% rename from assets/change_voice/images/2.0x/bnb2_selected.png rename to assets/images/change_voice/2.0x/bnb2_selected.png diff --git a/assets/change_voice/images/2.0x/bnb2_unselected.png b/assets/images/change_voice/2.0x/bnb2_unselected.png similarity index 100% rename from assets/change_voice/images/2.0x/bnb2_unselected.png rename to assets/images/change_voice/2.0x/bnb2_unselected.png diff --git a/assets/change_voice/images/2.0x/bnb3_selected.png b/assets/images/change_voice/2.0x/bnb3_selected.png similarity index 100% rename from assets/change_voice/images/2.0x/bnb3_selected.png rename to assets/images/change_voice/2.0x/bnb3_selected.png diff --git a/assets/change_voice/images/2.0x/bnb3_unselected.png b/assets/images/change_voice/2.0x/bnb3_unselected.png similarity index 100% rename from assets/change_voice/images/2.0x/bnb3_unselected.png rename to assets/images/change_voice/2.0x/bnb3_unselected.png diff --git a/assets/change_voice/images/2.0x/bnb4_selected.png b/assets/images/change_voice/2.0x/bnb4_selected.png similarity index 100% rename from assets/change_voice/images/2.0x/bnb4_selected.png rename to assets/images/change_voice/2.0x/bnb4_selected.png diff --git a/assets/change_voice/images/2.0x/bnb4_unselected.png b/assets/images/change_voice/2.0x/bnb4_unselected.png similarity index 100% rename from assets/change_voice/images/2.0x/bnb4_unselected.png rename to assets/images/change_voice/2.0x/bnb4_unselected.png diff --git a/assets/change_voice/images/2.0x/change_voice_bg.png b/assets/images/change_voice/2.0x/change_voice_bg.png similarity index 100% rename from assets/change_voice/images/2.0x/change_voice_bg.png rename to assets/images/change_voice/2.0x/change_voice_bg.png diff --git a/assets/change_voice/images/2.0x/change_voice_item_frame.png b/assets/images/change_voice/2.0x/change_voice_item_frame.png similarity index 100% rename from assets/change_voice/images/2.0x/change_voice_item_frame.png rename to assets/images/change_voice/2.0x/change_voice_item_frame.png diff --git a/assets/change_voice/images/2.0x/change_voice_item_selected.png b/assets/images/change_voice/2.0x/change_voice_item_selected.png similarity index 100% rename from assets/change_voice/images/2.0x/change_voice_item_selected.png rename to assets/images/change_voice/2.0x/change_voice_item_selected.png diff --git a/assets/change_voice/images/2.0x/favorite.png b/assets/images/change_voice/2.0x/favorite.png similarity index 100% rename from assets/change_voice/images/2.0x/favorite.png rename to assets/images/change_voice/2.0x/favorite.png diff --git a/assets/change_voice/images/2.0x/home_bg.png b/assets/images/change_voice/2.0x/home_bg.png similarity index 100% rename from assets/change_voice/images/2.0x/home_bg.png rename to assets/images/change_voice/2.0x/home_bg.png diff --git a/assets/change_voice/images/2.0x/home_bnb_bg.png b/assets/images/change_voice/2.0x/home_bnb_bg.png similarity index 100% rename from assets/change_voice/images/2.0x/home_bnb_bg.png rename to assets/images/change_voice/2.0x/home_bnb_bg.png diff --git a/assets/change_voice/images/2.0x/icon_chevron_right.png b/assets/images/change_voice/2.0x/icon_chevron_right.png similarity index 100% rename from assets/change_voice/images/2.0x/icon_chevron_right.png rename to assets/images/change_voice/2.0x/icon_chevron_right.png diff --git a/assets/change_voice/images/2.0x/more.png b/assets/images/change_voice/2.0x/more.png similarity index 100% rename from assets/change_voice/images/2.0x/more.png rename to assets/images/change_voice/2.0x/more.png diff --git a/assets/change_voice/images/2.0x/not_favorite.png b/assets/images/change_voice/2.0x/not_favorite.png similarity index 100% rename from assets/change_voice/images/2.0x/not_favorite.png rename to assets/images/change_voice/2.0x/not_favorite.png diff --git a/assets/change_voice/images/2.0x/not_played.png b/assets/images/change_voice/2.0x/not_played.png similarity index 100% rename from assets/change_voice/images/2.0x/not_played.png rename to assets/images/change_voice/2.0x/not_played.png diff --git a/assets/change_voice/images/2.0x/not_played1.png b/assets/images/change_voice/2.0x/not_played1.png similarity index 100% rename from assets/change_voice/images/2.0x/not_played1.png rename to assets/images/change_voice/2.0x/not_played1.png diff --git a/assets/change_voice/images/2.0x/play_sound_bg.png b/assets/images/change_voice/2.0x/play_sound_bg.png similarity index 100% rename from assets/change_voice/images/2.0x/play_sound_bg.png rename to assets/images/change_voice/2.0x/play_sound_bg.png diff --git a/assets/change_voice/images/2.0x/playing.png b/assets/images/change_voice/2.0x/playing.png similarity index 100% rename from assets/change_voice/images/2.0x/playing.png rename to assets/images/change_voice/2.0x/playing.png diff --git a/assets/change_voice/images/2.0x/playing1.png b/assets/images/change_voice/2.0x/playing1.png similarity index 100% rename from assets/change_voice/images/2.0x/playing1.png rename to assets/images/change_voice/2.0x/playing1.png diff --git a/assets/change_voice/images/2.0x/privacy.png b/assets/images/change_voice/2.0x/privacy.png similarity index 100% rename from assets/change_voice/images/2.0x/privacy.png rename to assets/images/change_voice/2.0x/privacy.png diff --git a/assets/change_voice/images/2.0x/settings_bg.png b/assets/images/change_voice/2.0x/settings_bg.png similarity index 100% rename from assets/change_voice/images/2.0x/settings_bg.png rename to assets/images/change_voice/2.0x/settings_bg.png diff --git a/assets/change_voice/images/2.0x/subtract.png b/assets/images/change_voice/2.0x/subtract.png similarity index 100% rename from assets/change_voice/images/2.0x/subtract.png rename to assets/images/change_voice/2.0x/subtract.png diff --git a/assets/change_voice/images/2.0x/the_monster.png b/assets/images/change_voice/2.0x/the_monster.png similarity index 100% rename from assets/change_voice/images/2.0x/the_monster.png rename to assets/images/change_voice/2.0x/the_monster.png diff --git a/assets/change_voice/images/2.0x/the_monster1.png b/assets/images/change_voice/2.0x/the_monster1.png similarity index 100% rename from assets/change_voice/images/2.0x/the_monster1.png rename to assets/images/change_voice/2.0x/the_monster1.png diff --git a/assets/change_voice/images/2.0x/the_monster2.png b/assets/images/change_voice/2.0x/the_monster2.png similarity index 100% rename from assets/change_voice/images/2.0x/the_monster2.png rename to assets/images/change_voice/2.0x/the_monster2.png diff --git a/assets/change_voice/images/2.0x/upload_method_bg.png b/assets/images/change_voice/2.0x/upload_method_bg.png similarity index 100% rename from assets/change_voice/images/2.0x/upload_method_bg.png rename to assets/images/change_voice/2.0x/upload_method_bg.png diff --git a/assets/change_voice/images/2.0x/upload_pick.png b/assets/images/change_voice/2.0x/upload_pick.png similarity index 100% rename from assets/change_voice/images/2.0x/upload_pick.png rename to assets/images/change_voice/2.0x/upload_pick.png diff --git a/assets/change_voice/images/2.0x/upload_record_sound.png b/assets/images/change_voice/2.0x/upload_record_sound.png similarity index 100% rename from assets/change_voice/images/2.0x/upload_record_sound.png rename to assets/images/change_voice/2.0x/upload_record_sound.png diff --git a/assets/change_voice/images/2.0x/user_agreement.png b/assets/images/change_voice/2.0x/user_agreement.png similarity index 100% rename from assets/change_voice/images/2.0x/user_agreement.png rename to assets/images/change_voice/2.0x/user_agreement.png diff --git a/assets/change_voice/images/2.0x/voice_change.png b/assets/images/change_voice/2.0x/voice_change.png similarity index 100% rename from assets/change_voice/images/2.0x/voice_change.png rename to assets/images/change_voice/2.0x/voice_change.png diff --git a/assets/change_voice/images/2.0x/voice_default.png b/assets/images/change_voice/2.0x/voice_default.png similarity index 100% rename from assets/change_voice/images/2.0x/voice_default.png rename to assets/images/change_voice/2.0x/voice_default.png diff --git a/assets/change_voice/images/3.0x/about.png b/assets/images/change_voice/3.0x/about.png similarity index 100% rename from assets/change_voice/images/3.0x/about.png rename to assets/images/change_voice/3.0x/about.png diff --git a/assets/change_voice/images/3.0x/arrow_down_back.png b/assets/images/change_voice/3.0x/arrow_down_back.png similarity index 100% rename from assets/change_voice/images/3.0x/arrow_down_back.png rename to assets/images/change_voice/3.0x/arrow_down_back.png diff --git a/assets/change_voice/images/3.0x/bnb1_selected.png b/assets/images/change_voice/3.0x/bnb1_selected.png similarity index 100% rename from assets/change_voice/images/3.0x/bnb1_selected.png rename to assets/images/change_voice/3.0x/bnb1_selected.png diff --git a/assets/change_voice/images/3.0x/bnb1_unselected.png b/assets/images/change_voice/3.0x/bnb1_unselected.png similarity index 100% rename from assets/change_voice/images/3.0x/bnb1_unselected.png rename to assets/images/change_voice/3.0x/bnb1_unselected.png diff --git a/assets/change_voice/images/3.0x/bnb2_selected.png b/assets/images/change_voice/3.0x/bnb2_selected.png similarity index 100% rename from assets/change_voice/images/3.0x/bnb2_selected.png rename to assets/images/change_voice/3.0x/bnb2_selected.png diff --git a/assets/change_voice/images/3.0x/bnb2_unselected.png b/assets/images/change_voice/3.0x/bnb2_unselected.png similarity index 100% rename from assets/change_voice/images/3.0x/bnb2_unselected.png rename to assets/images/change_voice/3.0x/bnb2_unselected.png diff --git a/assets/change_voice/images/3.0x/bnb3_selected.png b/assets/images/change_voice/3.0x/bnb3_selected.png similarity index 100% rename from assets/change_voice/images/3.0x/bnb3_selected.png rename to assets/images/change_voice/3.0x/bnb3_selected.png diff --git a/assets/change_voice/images/3.0x/bnb3_unselected.png b/assets/images/change_voice/3.0x/bnb3_unselected.png similarity index 100% rename from assets/change_voice/images/3.0x/bnb3_unselected.png rename to assets/images/change_voice/3.0x/bnb3_unselected.png diff --git a/assets/change_voice/images/3.0x/bnb4_selected.png b/assets/images/change_voice/3.0x/bnb4_selected.png similarity index 100% rename from assets/change_voice/images/3.0x/bnb4_selected.png rename to assets/images/change_voice/3.0x/bnb4_selected.png diff --git a/assets/change_voice/images/3.0x/bnb4_unselected.png b/assets/images/change_voice/3.0x/bnb4_unselected.png similarity index 100% rename from assets/change_voice/images/3.0x/bnb4_unselected.png rename to assets/images/change_voice/3.0x/bnb4_unselected.png diff --git a/assets/change_voice/images/3.0x/change_voice_bg.png b/assets/images/change_voice/3.0x/change_voice_bg.png similarity index 100% rename from assets/change_voice/images/3.0x/change_voice_bg.png rename to assets/images/change_voice/3.0x/change_voice_bg.png diff --git a/assets/change_voice/images/3.0x/change_voice_item_frame.png b/assets/images/change_voice/3.0x/change_voice_item_frame.png similarity index 100% rename from assets/change_voice/images/3.0x/change_voice_item_frame.png rename to assets/images/change_voice/3.0x/change_voice_item_frame.png diff --git a/assets/change_voice/images/3.0x/change_voice_item_selected.png b/assets/images/change_voice/3.0x/change_voice_item_selected.png similarity index 100% rename from assets/change_voice/images/3.0x/change_voice_item_selected.png rename to assets/images/change_voice/3.0x/change_voice_item_selected.png diff --git a/assets/change_voice/images/3.0x/favorite.png b/assets/images/change_voice/3.0x/favorite.png similarity index 100% rename from assets/change_voice/images/3.0x/favorite.png rename to assets/images/change_voice/3.0x/favorite.png diff --git a/assets/change_voice/images/3.0x/home_bg.png b/assets/images/change_voice/3.0x/home_bg.png similarity index 100% rename from assets/change_voice/images/3.0x/home_bg.png rename to assets/images/change_voice/3.0x/home_bg.png diff --git a/assets/change_voice/images/3.0x/home_bnb_bg.png b/assets/images/change_voice/3.0x/home_bnb_bg.png similarity index 100% rename from assets/change_voice/images/3.0x/home_bnb_bg.png rename to assets/images/change_voice/3.0x/home_bnb_bg.png diff --git a/assets/change_voice/images/3.0x/icon_chevron_right.png b/assets/images/change_voice/3.0x/icon_chevron_right.png similarity index 100% rename from assets/change_voice/images/3.0x/icon_chevron_right.png rename to assets/images/change_voice/3.0x/icon_chevron_right.png diff --git a/assets/change_voice/images/3.0x/more.png b/assets/images/change_voice/3.0x/more.png similarity index 100% rename from assets/change_voice/images/3.0x/more.png rename to assets/images/change_voice/3.0x/more.png diff --git a/assets/change_voice/images/3.0x/not_favorite.png b/assets/images/change_voice/3.0x/not_favorite.png similarity index 100% rename from assets/change_voice/images/3.0x/not_favorite.png rename to assets/images/change_voice/3.0x/not_favorite.png diff --git a/assets/change_voice/images/3.0x/not_played.png b/assets/images/change_voice/3.0x/not_played.png similarity index 100% rename from assets/change_voice/images/3.0x/not_played.png rename to assets/images/change_voice/3.0x/not_played.png diff --git a/assets/change_voice/images/3.0x/not_played1.png b/assets/images/change_voice/3.0x/not_played1.png similarity index 100% rename from assets/change_voice/images/3.0x/not_played1.png rename to assets/images/change_voice/3.0x/not_played1.png diff --git a/assets/change_voice/images/3.0x/play_sound_bg.png b/assets/images/change_voice/3.0x/play_sound_bg.png similarity index 100% rename from assets/change_voice/images/3.0x/play_sound_bg.png rename to assets/images/change_voice/3.0x/play_sound_bg.png diff --git a/assets/change_voice/images/3.0x/playing.png b/assets/images/change_voice/3.0x/playing.png similarity index 100% rename from assets/change_voice/images/3.0x/playing.png rename to assets/images/change_voice/3.0x/playing.png diff --git a/assets/change_voice/images/3.0x/playing1.png b/assets/images/change_voice/3.0x/playing1.png similarity index 100% rename from assets/change_voice/images/3.0x/playing1.png rename to assets/images/change_voice/3.0x/playing1.png diff --git a/assets/change_voice/images/3.0x/privacy.png b/assets/images/change_voice/3.0x/privacy.png similarity index 100% rename from assets/change_voice/images/3.0x/privacy.png rename to assets/images/change_voice/3.0x/privacy.png diff --git a/assets/change_voice/images/3.0x/settings_bg.png b/assets/images/change_voice/3.0x/settings_bg.png similarity index 100% rename from assets/change_voice/images/3.0x/settings_bg.png rename to assets/images/change_voice/3.0x/settings_bg.png diff --git a/assets/change_voice/images/3.0x/subtract.png b/assets/images/change_voice/3.0x/subtract.png similarity index 100% rename from assets/change_voice/images/3.0x/subtract.png rename to assets/images/change_voice/3.0x/subtract.png diff --git a/assets/change_voice/images/3.0x/the_monster.png b/assets/images/change_voice/3.0x/the_monster.png similarity index 100% rename from assets/change_voice/images/3.0x/the_monster.png rename to assets/images/change_voice/3.0x/the_monster.png diff --git a/assets/change_voice/images/3.0x/the_monster1.png b/assets/images/change_voice/3.0x/the_monster1.png similarity index 100% rename from assets/change_voice/images/3.0x/the_monster1.png rename to assets/images/change_voice/3.0x/the_monster1.png diff --git a/assets/change_voice/images/3.0x/the_monster2.png b/assets/images/change_voice/3.0x/the_monster2.png similarity index 100% rename from assets/change_voice/images/3.0x/the_monster2.png rename to assets/images/change_voice/3.0x/the_monster2.png diff --git a/assets/change_voice/images/3.0x/upload_method_bg.png b/assets/images/change_voice/3.0x/upload_method_bg.png similarity index 100% rename from assets/change_voice/images/3.0x/upload_method_bg.png rename to assets/images/change_voice/3.0x/upload_method_bg.png diff --git a/assets/change_voice/images/3.0x/upload_pick.png b/assets/images/change_voice/3.0x/upload_pick.png similarity index 100% rename from assets/change_voice/images/3.0x/upload_pick.png rename to assets/images/change_voice/3.0x/upload_pick.png diff --git a/assets/change_voice/images/3.0x/upload_record_sound.png b/assets/images/change_voice/3.0x/upload_record_sound.png similarity index 100% rename from assets/change_voice/images/3.0x/upload_record_sound.png rename to assets/images/change_voice/3.0x/upload_record_sound.png diff --git a/assets/change_voice/images/3.0x/user_agreement.png b/assets/images/change_voice/3.0x/user_agreement.png similarity index 100% rename from assets/change_voice/images/3.0x/user_agreement.png rename to assets/images/change_voice/3.0x/user_agreement.png diff --git a/assets/change_voice/images/3.0x/voice_change.png b/assets/images/change_voice/3.0x/voice_change.png similarity index 100% rename from assets/change_voice/images/3.0x/voice_change.png rename to assets/images/change_voice/3.0x/voice_change.png diff --git a/assets/change_voice/images/3.0x/voice_default.png b/assets/images/change_voice/3.0x/voice_default.png similarity index 100% rename from assets/change_voice/images/3.0x/voice_default.png rename to assets/images/change_voice/3.0x/voice_default.png diff --git a/assets/change_voice/images/about.png b/assets/images/change_voice/about.png similarity index 100% rename from assets/change_voice/images/about.png rename to assets/images/change_voice/about.png diff --git a/assets/change_voice/images/arrow_down_back.png b/assets/images/change_voice/arrow_down_back.png similarity index 100% rename from assets/change_voice/images/arrow_down_back.png rename to assets/images/change_voice/arrow_down_back.png diff --git a/assets/change_voice/images/bnb1_selected.png b/assets/images/change_voice/bnb1_selected.png similarity index 100% rename from assets/change_voice/images/bnb1_selected.png rename to assets/images/change_voice/bnb1_selected.png diff --git a/assets/change_voice/images/bnb1_unselected.png b/assets/images/change_voice/bnb1_unselected.png similarity index 100% rename from assets/change_voice/images/bnb1_unselected.png rename to assets/images/change_voice/bnb1_unselected.png diff --git a/assets/change_voice/images/bnb2_selected.png b/assets/images/change_voice/bnb2_selected.png similarity index 100% rename from assets/change_voice/images/bnb2_selected.png rename to assets/images/change_voice/bnb2_selected.png diff --git a/assets/change_voice/images/bnb2_unselected.png b/assets/images/change_voice/bnb2_unselected.png similarity index 100% rename from assets/change_voice/images/bnb2_unselected.png rename to assets/images/change_voice/bnb2_unselected.png diff --git a/assets/change_voice/images/bnb3_selected.png b/assets/images/change_voice/bnb3_selected.png similarity index 100% rename from assets/change_voice/images/bnb3_selected.png rename to assets/images/change_voice/bnb3_selected.png diff --git a/assets/change_voice/images/bnb3_unselected.png b/assets/images/change_voice/bnb3_unselected.png similarity index 100% rename from assets/change_voice/images/bnb3_unselected.png rename to assets/images/change_voice/bnb3_unselected.png diff --git a/assets/change_voice/images/bnb4_selected.png b/assets/images/change_voice/bnb4_selected.png similarity index 100% rename from assets/change_voice/images/bnb4_selected.png rename to assets/images/change_voice/bnb4_selected.png diff --git a/assets/change_voice/images/bnb4_unselected.png b/assets/images/change_voice/bnb4_unselected.png similarity index 100% rename from assets/change_voice/images/bnb4_unselected.png rename to assets/images/change_voice/bnb4_unselected.png diff --git a/assets/change_voice/images/voice_change.png b/assets/images/change_voice/change_voice.png similarity index 100% rename from assets/change_voice/images/voice_change.png rename to assets/images/change_voice/change_voice.png diff --git a/assets/change_voice/images/change_voice_bg.png b/assets/images/change_voice/change_voice_bg.png similarity index 100% rename from assets/change_voice/images/change_voice_bg.png rename to assets/images/change_voice/change_voice_bg.png diff --git a/assets/change_voice/images/change_voice_item_frame.png b/assets/images/change_voice/change_voice_item_frame.png similarity index 100% rename from assets/change_voice/images/change_voice_item_frame.png rename to assets/images/change_voice/change_voice_item_frame.png diff --git a/assets/change_voice/images/change_voice_item_selected.png b/assets/images/change_voice/change_voice_item_selected.png similarity index 100% rename from assets/change_voice/images/change_voice_item_selected.png rename to assets/images/change_voice/change_voice_item_selected.png diff --git a/assets/images/change_voice/cover/DIY.jpeg b/assets/images/change_voice/cover/DIY.jpeg new file mode 100755 index 0000000..b3fecd9 Binary files /dev/null and b/assets/images/change_voice/cover/DIY.jpeg differ diff --git a/assets/images/change_voice/cover/Fast.jpeg b/assets/images/change_voice/cover/Fast.jpeg new file mode 100755 index 0000000..09526dd Binary files /dev/null and b/assets/images/change_voice/cover/Fast.jpeg differ diff --git a/assets/images/change_voice/cover/Flash.jpeg b/assets/images/change_voice/cover/Flash.jpeg new file mode 100755 index 0000000..18dca3a Binary files /dev/null and b/assets/images/change_voice/cover/Flash.jpeg differ diff --git a/assets/images/change_voice/cover/Original.jpeg b/assets/images/change_voice/cover/Original.jpeg new file mode 100755 index 0000000..fb53c2a Binary files /dev/null and b/assets/images/change_voice/cover/Original.jpeg differ diff --git a/assets/images/change_voice/cover/Slow.jpeg b/assets/images/change_voice/cover/Slow.jpeg new file mode 100755 index 0000000..4c01fae Binary files /dev/null and b/assets/images/change_voice/cover/Slow.jpeg differ diff --git a/assets/change_voice/audio/boy.jpeg b/assets/images/change_voice/cover/boy.jpeg similarity index 100% rename from assets/change_voice/audio/boy.jpeg rename to assets/images/change_voice/cover/boy.jpeg diff --git a/assets/change_voice/audio/child.png b/assets/images/change_voice/cover/child.png similarity index 100% rename from assets/change_voice/audio/child.png rename to assets/images/change_voice/cover/child.png diff --git a/assets/change_voice/audio/elder.png b/assets/images/change_voice/cover/elder.png similarity index 100% rename from assets/change_voice/audio/elder.png rename to assets/images/change_voice/cover/elder.png diff --git a/assets/change_voice/audio/girl.jpeg b/assets/images/change_voice/cover/girl.jpeg similarity index 100% rename from assets/change_voice/audio/girl.jpeg rename to assets/images/change_voice/cover/girl.jpeg diff --git a/assets/change_voice/audio/man.png b/assets/images/change_voice/cover/man.png similarity index 100% rename from assets/change_voice/audio/man.png rename to assets/images/change_voice/cover/man.png diff --git a/assets/change_voice/audio/monsters.png b/assets/images/change_voice/cover/monsters.png similarity index 100% rename from assets/change_voice/audio/monsters.png rename to assets/images/change_voice/cover/monsters.png diff --git a/assets/change_voice/audio/robot.jpeg b/assets/images/change_voice/cover/robot.jpeg similarity index 100% rename from assets/change_voice/audio/robot.jpeg rename to assets/images/change_voice/cover/robot.jpeg diff --git a/assets/change_voice/audio/sexy.jpeg b/assets/images/change_voice/cover/sexy.jpeg similarity index 100% rename from assets/change_voice/audio/sexy.jpeg rename to assets/images/change_voice/cover/sexy.jpeg diff --git a/assets/change_voice/audio/woman.png b/assets/images/change_voice/cover/woman.png similarity index 100% rename from assets/change_voice/audio/woman.png rename to assets/images/change_voice/cover/woman.png diff --git a/assets/change_voice/images/favorite.png b/assets/images/change_voice/favorite.png similarity index 100% rename from assets/change_voice/images/favorite.png rename to assets/images/change_voice/favorite.png diff --git a/assets/change_voice/images/home_bg.png b/assets/images/change_voice/home_bg.png similarity index 100% rename from assets/change_voice/images/home_bg.png rename to assets/images/change_voice/home_bg.png diff --git a/assets/change_voice/images/home_bnb_bg.png b/assets/images/change_voice/home_bnb_bg.png similarity index 100% rename from assets/change_voice/images/home_bnb_bg.png rename to assets/images/change_voice/home_bnb_bg.png diff --git a/assets/change_voice/images/icon_chevron_right.png b/assets/images/change_voice/icon_chevron_right.png similarity index 100% rename from assets/change_voice/images/icon_chevron_right.png rename to assets/images/change_voice/icon_chevron_right.png diff --git a/assets/change_voice/images/img_error.png b/assets/images/change_voice/img_error.png similarity index 100% rename from assets/change_voice/images/img_error.png rename to assets/images/change_voice/img_error.png diff --git a/assets/change_voice/images/img_placeholder.png b/assets/images/change_voice/img_placeholder.png similarity index 100% rename from assets/change_voice/images/img_placeholder.png rename to assets/images/change_voice/img_placeholder.png diff --git a/assets/change_voice/images/more.png b/assets/images/change_voice/more.png similarity index 100% rename from assets/change_voice/images/more.png rename to assets/images/change_voice/more.png diff --git a/assets/change_voice/images/not_favorite.png b/assets/images/change_voice/not_favorite.png similarity index 100% rename from assets/change_voice/images/not_favorite.png rename to assets/images/change_voice/not_favorite.png diff --git a/assets/change_voice/images/not_played.png b/assets/images/change_voice/not_played.png similarity index 100% rename from assets/change_voice/images/not_played.png rename to assets/images/change_voice/not_played.png diff --git a/assets/change_voice/images/not_played1.png b/assets/images/change_voice/not_played1.png similarity index 100% rename from assets/change_voice/images/not_played1.png rename to assets/images/change_voice/not_played1.png diff --git a/assets/change_voice/images/play_sound_bg.png b/assets/images/change_voice/play_sound_bg.png similarity index 100% rename from assets/change_voice/images/play_sound_bg.png rename to assets/images/change_voice/play_sound_bg.png diff --git a/assets/change_voice/images/playing.png b/assets/images/change_voice/playing.png similarity index 100% rename from assets/change_voice/images/playing.png rename to assets/images/change_voice/playing.png diff --git a/assets/change_voice/images/playing1.png b/assets/images/change_voice/playing1.png similarity index 100% rename from assets/change_voice/images/playing1.png rename to assets/images/change_voice/playing1.png diff --git a/assets/change_voice/images/privacy.png b/assets/images/change_voice/privacy.png similarity index 100% rename from assets/change_voice/images/privacy.png rename to assets/images/change_voice/privacy.png diff --git a/assets/change_voice/images/settings_bg.png b/assets/images/change_voice/settings_bg.png similarity index 100% rename from assets/change_voice/images/settings_bg.png rename to assets/images/change_voice/settings_bg.png diff --git a/assets/change_voice/images/subtract.png b/assets/images/change_voice/subtract.png similarity index 100% rename from assets/change_voice/images/subtract.png rename to assets/images/change_voice/subtract.png diff --git a/assets/change_voice/images/the_monster.png b/assets/images/change_voice/the_monster.png similarity index 100% rename from assets/change_voice/images/the_monster.png rename to assets/images/change_voice/the_monster.png diff --git a/assets/change_voice/images/the_monster1.png b/assets/images/change_voice/the_monster1.png similarity index 100% rename from assets/change_voice/images/the_monster1.png rename to assets/images/change_voice/the_monster1.png diff --git a/assets/change_voice/images/the_monster2.png b/assets/images/change_voice/the_monster2.png similarity index 100% rename from assets/change_voice/images/the_monster2.png rename to assets/images/change_voice/the_monster2.png diff --git a/assets/change_voice/images/upload_method_bg.png b/assets/images/change_voice/upload_method_bg.png similarity index 100% rename from assets/change_voice/images/upload_method_bg.png rename to assets/images/change_voice/upload_method_bg.png diff --git a/assets/change_voice/images/upload_pick.png b/assets/images/change_voice/upload_pick.png similarity index 100% rename from assets/change_voice/images/upload_pick.png rename to assets/images/change_voice/upload_pick.png diff --git a/assets/change_voice/images/upload_record_sound.png b/assets/images/change_voice/upload_record_sound.png similarity index 100% rename from assets/change_voice/images/upload_record_sound.png rename to assets/images/change_voice/upload_record_sound.png diff --git a/assets/change_voice/images/user_agreement.png b/assets/images/change_voice/user_agreement.png similarity index 100% rename from assets/change_voice/images/user_agreement.png rename to assets/images/change_voice/user_agreement.png diff --git a/assets/change_voice/images/voice_default.png b/assets/images/change_voice/voice_default.png similarity index 100% rename from assets/change_voice/images/voice_default.png rename to assets/images/change_voice/voice_default.png diff --git a/assets/images/musicoo/bnb1_selected.png b/assets/images/musicoo/bnb1_selected.png new file mode 100755 index 0000000..81c05cd Binary files /dev/null and b/assets/images/musicoo/bnb1_selected.png differ diff --git a/assets/images/musicoo/bnb1_unselected.png b/assets/images/musicoo/bnb1_unselected.png new file mode 100755 index 0000000..2b60980 Binary files /dev/null and b/assets/images/musicoo/bnb1_unselected.png differ diff --git a/assets/images/musicoo/bnb2_selected.png b/assets/images/musicoo/bnb2_selected.png new file mode 100755 index 0000000..63d255c Binary files /dev/null and b/assets/images/musicoo/bnb2_selected.png differ diff --git a/assets/images/musicoo/bnb2_unselected.png b/assets/images/musicoo/bnb2_unselected.png new file mode 100755 index 0000000..b4c3a81 Binary files /dev/null and b/assets/images/musicoo/bnb2_unselected.png differ diff --git a/assets/images/musicoo/bnb3_selected.png b/assets/images/musicoo/bnb3_selected.png new file mode 100755 index 0000000..a3a04ec Binary files /dev/null and b/assets/images/musicoo/bnb3_selected.png differ diff --git a/assets/images/musicoo/bnb3_unselected.png b/assets/images/musicoo/bnb3_unselected.png new file mode 100755 index 0000000..a676cf0 Binary files /dev/null and b/assets/images/musicoo/bnb3_unselected.png differ diff --git a/ios/Podfile b/ios/Podfile index 11dbbce..582b84f 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -56,6 +56,9 @@ post_install do |installer| ## dart: PermissionGroup.mediaLibrary 'PERMISSION_MEDIA_LIBRARY=1', + + ## dart: PermissionGroup.appTrackingTransparency + 'PERMISSION_APP_TRACKING_TRANSPARENCY=1', ] end diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 35e7292..2b4524a 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -32,6 +32,8 @@ We need access to the photo library to pick audio files. NSAppleMusicUsageDescription We need to access the device media library to select audio files. + NSUserTrackingUsageDescription + We need your permission to access the advertising identifier to provide better ad services. UIApplicationSupportsIndirectInputEvents UILaunchStoryboardName diff --git a/lib/components/private/my_voice_item.dart b/lib/components/private/my_voice_item.dart index bf75769..9daa011 100644 --- a/lib/components/private/my_voice_item.dart +++ b/lib/components/private/my_voice_item.dart @@ -33,7 +33,7 @@ class MyVoiceItem extends StatelessWidget { children: [ ClipOval( child: Image.asset( - ObjUtil.isNotEmptyStr(item.cover) ? item.cover! : Assets.imagesVoiceDefault, + ObjUtil.isNotEmptyStr(item.cover) ? item.cover! : Assets.changeVoiceVoiceDefault, width: 52.w, height: 52.w, fit: BoxFit.cover, @@ -80,7 +80,7 @@ class MyVoiceItem extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(6).w, child: Image.asset( - Assets.imagesMore, + Assets.changeVoiceMore, width: 32.w, height: 32.w, ), diff --git a/lib/data/app_config.dart b/lib/data/app_config.dart new file mode 100644 index 0000000..00c92b1 --- /dev/null +++ b/lib/data/app_config.dart @@ -0,0 +1,11 @@ +// Author: fengshengxiong +// Date: 2024/6/13 +// Description: 全局配置 + +import 'package:tone_snap/data/enum/app_side_enum.dart'; + +class AppConfig { + /// 当前App展示的一面 + static const AppSideEnum appSideEnum = AppSideEnum.sideA; +} + diff --git a/lib/data/enum/app_side_enum.dart b/lib/data/enum/app_side_enum.dart new file mode 100644 index 0000000..5c0441d --- /dev/null +++ b/lib/data/enum/app_side_enum.dart @@ -0,0 +1,24 @@ +// Author: fengshengxiong +// Date: 2024/6/13 +// Description: App类型(A/B)面 + +enum AppSideEnum { + sideA(type: 0), + sideB(type: 1); + + const AppSideEnum({ + required this.type, + }); + + final int type; +} + +extension AppSideEnumExtension on AppSideEnum { + static AppSideEnum getEnum(int? type) { + if (type == AppSideEnum.sideA.type) { + return AppSideEnum.sideA; + } else { + return AppSideEnum.sideB; + } + } +} \ No newline at end of file diff --git a/lib/data/models/voice_model.dart b/lib/data/models/voice_model.dart index 0fd57c5..5773d49 100644 --- a/lib/data/models/voice_model.dart +++ b/lib/data/models/voice_model.dart @@ -8,10 +8,6 @@ import 'package:hive/hive.dart'; part 'voice_model.g.dart'; -VoiceModel voiceModelFromJson(String str) => VoiceModel.fromJson(json.decode(str)); - -String voiceModelToJson(VoiceModel data) => json.encode(data.toJson()); - @HiveType(typeId: 0) class VoiceModel extends HiveObject { @HiveField(0) @@ -29,6 +25,10 @@ class VoiceModel extends HiveObject { this.cover, }); + VoiceModel voiceModelFromJson(String str) => VoiceModel.fromJson(json.decode(str)); + + String voiceModelToJson(VoiceModel data) => json.encode(data.toJson()); + VoiceModel copyWith({ String? name, String? path, diff --git a/lib/generated/assets.dart b/lib/generated/assets.dart index f235a1e..d5668da 100644 --- a/lib/generated/assets.dart +++ b/lib/generated/assets.dart @@ -2,64 +2,73 @@ class Assets { Assets._(); - static const String audioBoy = 'assets/change_voice/audio/boy.mp3'; - static const String audioChild = 'assets/change_voice/audio/child.mp3'; - static const String audioElder = 'assets/change_voice/audio/elder.mp3'; - static const String audioGirl = 'assets/change_voice/audio/girl.mp3'; - static const String audioMan = 'assets/change_voice/audio/man.mp3'; - static const String audioMonsters = 'assets/change_voice/audio/monsters.mp3'; - static const String audioRapper = 'assets/change_voice/audio/rapper.mp3'; - static const String audioRobot = 'assets/change_voice/audio/robot.wav'; - static const String audioSexy = 'assets/change_voice/audio/sexy.mp3'; - static const String audioWoman = 'assets/change_voice/audio/woman.mp3'; - static const String changeVoiceAudioBoy = 'assets/change_voice/audio/boy.jpeg'; - static const String changeVoiceAudioChild = 'assets/change_voice/audio/child.png'; - static const String changeVoiceAudioElder = 'assets/change_voice/audio/elder.png'; - static const String changeVoiceAudioGirl = 'assets/change_voice/audio/girl.jpeg'; - static const String changeVoiceAudioMan = 'assets/change_voice/audio/man.png'; - static const String changeVoiceAudioMonsters = 'assets/change_voice/audio/monsters.png'; - static const String changeVoiceAudioRapper = 'assets/change_voice/audio/rapper.jpeg'; - static const String changeVoiceAudioRobot = 'assets/change_voice/audio/robot.jpeg'; - static const String changeVoiceAudioSexy = 'assets/change_voice/audio/sexy.jpeg'; - static const String changeVoiceAudioWoman = 'assets/change_voice/audio/woman.png'; + static const String audioBoy = 'assets/audio/boy.mp3'; + static const String audioChild = 'assets/audio/child.mp3'; + static const String audioElder = 'assets/audio/elder.mp3'; + static const String audioGirl = 'assets/audio/girl.mp3'; + static const String audioMan = 'assets/audio/man.mp3'; + static const String audioMonsters = 'assets/audio/monsters.mp3'; + static const String audioRobot = 'assets/audio/robot.wav'; + static const String audioSexy = 'assets/audio/sexy.mp3'; + static const String audioWoman = 'assets/audio/woman.mp3'; + static const String changeVoiceAbout = 'assets/images/change_voice/about.png'; + static const String changeVoiceArrowDownBack = 'assets/images/change_voice/arrow_down_back.png'; + static const String changeVoiceBnb1Selected = 'assets/images/change_voice/bnb1_selected.png'; + static const String changeVoiceBnb1Unselected = 'assets/images/change_voice/bnb1_unselected.png'; + static const String changeVoiceBnb2Selected = 'assets/images/change_voice/bnb2_selected.png'; + static const String changeVoiceBnb2Unselected = 'assets/images/change_voice/bnb2_unselected.png'; + static const String changeVoiceBnb3Selected = 'assets/images/change_voice/bnb3_selected.png'; + static const String changeVoiceBnb3Unselected = 'assets/images/change_voice/bnb3_unselected.png'; + static const String changeVoiceBnb4Selected = 'assets/images/change_voice/bnb4_selected.png'; + static const String changeVoiceBnb4Unselected = 'assets/images/change_voice/bnb4_unselected.png'; + static const String changeVoiceChangeVoice = 'assets/images/change_voice/change_voice.png'; + static const String changeVoiceChangeVoiceBg = 'assets/images/change_voice/change_voice_bg.png'; + static const String changeVoiceChangeVoiceItemFrame = 'assets/images/change_voice/change_voice_item_frame.png'; + static const String changeVoiceChangeVoiceItemSelected = 'assets/images/change_voice/change_voice_item_selected.png'; + static const String changeVoiceFavorite = 'assets/images/change_voice/favorite.png'; + static const String changeVoiceHomeBg = 'assets/images/change_voice/home_bg.png'; + static const String changeVoiceHomeBnbBg = 'assets/images/change_voice/home_bnb_bg.png'; + static const String changeVoiceIconChevronRight = 'assets/images/change_voice/icon_chevron_right.png'; + static const String changeVoiceImgError = 'assets/images/change_voice/img_error.png'; + static const String changeVoiceImgPlaceholder = 'assets/images/change_voice/img_placeholder.png'; + static const String changeVoiceMore = 'assets/images/change_voice/more.png'; + static const String changeVoiceNotFavorite = 'assets/images/change_voice/not_favorite.png'; + static const String changeVoiceNotPlayed = 'assets/images/change_voice/not_played.png'; + static const String changeVoiceNotPlayed1 = 'assets/images/change_voice/not_played1.png'; + static const String changeVoicePlaySoundBg = 'assets/images/change_voice/play_sound_bg.png'; + static const String changeVoicePlaying = 'assets/images/change_voice/playing.png'; + static const String changeVoicePlaying1 = 'assets/images/change_voice/playing1.png'; + static const String changeVoicePrivacy = 'assets/images/change_voice/privacy.png'; + static const String changeVoiceSettingsBg = 'assets/images/change_voice/settings_bg.png'; + static const String changeVoiceSubtract = 'assets/images/change_voice/subtract.png'; + static const String changeVoiceTheMonster = 'assets/images/change_voice/the_monster.png'; + static const String changeVoiceTheMonster1 = 'assets/images/change_voice/the_monster1.png'; + static const String changeVoiceTheMonster2 = 'assets/images/change_voice/the_monster2.png'; + static const String changeVoiceUploadMethodBg = 'assets/images/change_voice/upload_method_bg.png'; + static const String changeVoiceUploadPick = 'assets/images/change_voice/upload_pick.png'; + static const String changeVoiceUploadRecordSound = 'assets/images/change_voice/upload_record_sound.png'; + static const String changeVoiceUserAgreement = 'assets/images/change_voice/user_agreement.png'; + static const String changeVoiceVoiceDefault = 'assets/images/change_voice/voice_default.png'; + static const String coverBoy = 'assets/images/change_voice/cover/boy.jpeg'; + static const String coverChild = 'assets/images/change_voice/cover/child.png'; + static const String coverDIY = 'assets/images/change_voice/cover/DIY.jpeg'; + static const String coverElder = 'assets/images/change_voice/cover/elder.png'; + static const String coverFast = 'assets/images/change_voice/cover/Fast.jpeg'; + static const String coverFlash = 'assets/images/change_voice/cover/Flash.jpeg'; + static const String coverGirl = 'assets/images/change_voice/cover/girl.jpeg'; + static const String coverMan = 'assets/images/change_voice/cover/man.png'; + static const String coverMonsters = 'assets/images/change_voice/cover/monsters.png'; + static const String coverOriginal = 'assets/images/change_voice/cover/Original.jpeg'; + static const String coverRobot = 'assets/images/change_voice/cover/robot.jpeg'; + static const String coverSexy = 'assets/images/change_voice/cover/sexy.jpeg'; + static const String coverSlow = 'assets/images/change_voice/cover/Slow.jpeg'; + static const String coverWoman = 'assets/images/change_voice/cover/woman.png'; static const String iconAppIcon = 'assets/icon/app_icon.jpeg'; - static const String imagesAbout = 'assets/change_voice/images/about.png'; - static const String imagesArrowDownBack = 'assets/change_voice/images/arrow_down_back.png'; - static const String imagesBnb1Selected = 'assets/change_voice/images/bnb1_selected.png'; - static const String imagesBnb1Unselected = 'assets/change_voice/images/bnb1_unselected.png'; - static const String imagesBnb2Selected = 'assets/change_voice/images/bnb2_selected.png'; - static const String imagesBnb2Unselected = 'assets/change_voice/images/bnb2_unselected.png'; - static const String imagesBnb3Selected = 'assets/change_voice/images/bnb3_selected.png'; - static const String imagesBnb3Unselected = 'assets/change_voice/images/bnb3_unselected.png'; - static const String imagesBnb4Selected = 'assets/change_voice/images/bnb4_selected.png'; - static const String imagesBnb4Unselected = 'assets/change_voice/images/bnb4_unselected.png'; - static const String imagesChangeVoiceBg = 'assets/change_voice/images/change_voice_bg.png'; - static const String imagesChangeVoiceItemFrame = 'assets/change_voice/images/change_voice_item_frame.png'; - static const String imagesChangeVoiceItemSelected = 'assets/change_voice/images/change_voice_item_selected.png'; - static const String imagesFavorite = 'assets/change_voice/images/favorite.png'; - static const String imagesHomeBg = 'assets/change_voice/images/home_bg.png'; - static const String imagesHomeBnbBg = 'assets/change_voice/images/home_bnb_bg.png'; - static const String imagesIconChevronRight = 'assets/change_voice/images/icon_chevron_right.png'; - static const String imagesImgError = 'assets/change_voice/images/img_error.png'; - static const String imagesImgPlaceholder = 'assets/change_voice/images/img_placeholder.png'; - static const String imagesMore = 'assets/change_voice/images/more.png'; - static const String imagesNotFavorite = 'assets/change_voice/images/not_favorite.png'; - static const String imagesNotPlayed = 'assets/change_voice/images/not_played.png'; - static const String imagesNotPlayed1 = 'assets/change_voice/images/not_played1.png'; - static const String imagesPlaySoundBg = 'assets/change_voice/images/play_sound_bg.png'; - static const String imagesPlaying = 'assets/change_voice/images/playing.png'; - static const String imagesPlaying1 = 'assets/change_voice/images/playing1.png'; - static const String imagesPrivacy = 'assets/change_voice/images/privacy.png'; - static const String imagesSettingsBg = 'assets/change_voice/images/settings_bg.png'; - static const String imagesSubtract = 'assets/change_voice/images/subtract.png'; - static const String imagesTheMonster = 'assets/change_voice/images/the_monster.png'; - static const String imagesTheMonster1 = 'assets/change_voice/images/the_monster1.png'; - static const String imagesTheMonster2 = 'assets/change_voice/images/the_monster2.png'; - static const String imagesUploadMethodBg = 'assets/change_voice/images/upload_method_bg.png'; - static const String imagesUploadPick = 'assets/change_voice/images/upload_pick.png'; - static const String imagesUploadRecordSound = 'assets/change_voice/images/upload_record_sound.png'; - static const String imagesUserAgreement = 'assets/change_voice/images/user_agreement.png'; - static const String imagesVoiceChange = 'assets/change_voice/images/voice_change.png'; - static const String imagesVoiceDefault = 'assets/change_voice/images/voice_default.png'; + static const String musicooBnb1Selected = 'assets/images/musicoo/bnb1_selected.png'; + static const String musicooBnb1Unselected = 'assets/images/musicoo/bnb1_unselected.png'; + static const String musicooBnb2Selected = 'assets/images/musicoo/bnb2_selected.png'; + static const String musicooBnb2Unselected = 'assets/images/musicoo/bnb2_unselected.png'; + static const String musicooBnb3Selected = 'assets/images/musicoo/bnb3_selected.png'; + static const String musicooBnb3Unselected = 'assets/images/musicoo/bnb3_unselected.png'; } diff --git a/lib/main.dart b/lib/main.dart index 4450d82..3299393 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,7 +5,10 @@ import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:permission_handler/permission_handler.dart'; import 'package:tone_snap/components/base_easyloading.dart'; +import 'package:tone_snap/data/app_config.dart'; +import 'package:tone_snap/data/enum/app_side_enum.dart'; import 'package:tone_snap/data/storage/hive_storage.dart'; import 'package:tone_snap/res/themes/app_themes.dart'; import 'package:tone_snap/res/values/strings.dart'; @@ -13,10 +16,16 @@ import 'package:tone_snap/routes/app_pages.dart'; import 'package:tone_snap/routes/app_routes.dart'; import 'package:tone_snap/utils/file_util.dart'; import 'package:tone_snap/utils/local_path_util.dart'; +import 'package:tone_snap/utils/permission_util.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); + if (Platform.isIOS) { + // 请求 App Tracking Transparency 权限 + await PermissionUtil.checkPermission([Permission.appTrackingTransparency], showDialog: false); + } + // 初始化Hive await initHive(); @@ -55,11 +64,11 @@ class MyApp extends StatelessWidget { return GetMaterialApp( title: appName, debugShowCheckedModeBanner: false, - theme: appTheme, - darkTheme: appTheme, - themeMode: ThemeMode.light, + theme: AppConfig.appSideEnum == AppSideEnum.sideB ? musicooAppTheme : changeVoiceAppTheme, + darkTheme: AppConfig.appSideEnum == AppSideEnum.sideB ? musicooAppTheme : changeVoiceAppTheme, + themeMode: ThemeMode.dark, + initialRoute: AppConfig.appSideEnum == AppSideEnum.sideB ? AppRoutes.initial : AppRoutes.changeVoiceInitial, getPages: AppPages.routes, - initialRoute: AppRoutes.initial, builder: (context, widget) { BaseEasyLoading.initGlobalConfig(); widget = easyLoading(context, widget); diff --git a/lib/modules/voice/home/home_binding.dart b/lib/modules/musicoo/home/home_binding.dart similarity index 69% rename from lib/modules/voice/home/home_binding.dart rename to lib/modules/musicoo/home/home_binding.dart index dd3bed3..0905989 100644 --- a/lib/modules/voice/home/home_binding.dart +++ b/lib/modules/musicoo/home/home_binding.dart @@ -1,5 +1,6 @@ import 'package:get/get.dart'; -import 'package:tone_snap/modules/voice/home/home_controller.dart'; + +import 'home_controller.dart'; class HomeBinding extends Bindings { @override diff --git a/lib/modules/musicoo/home/home_controller.dart b/lib/modules/musicoo/home/home_controller.dart new file mode 100644 index 0000000..9f5a6fc --- /dev/null +++ b/lib/modules/musicoo/home/home_controller.dart @@ -0,0 +1,5 @@ +import 'package:get/get.dart'; + +class HomeController extends GetxController { + +} diff --git a/lib/modules/musicoo/home/home_view.dart b/lib/modules/musicoo/home/home_view.dart new file mode 100644 index 0000000..9043e7d --- /dev/null +++ b/lib/modules/musicoo/home/home_view.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import 'home_controller.dart'; + +class HomeView extends GetView { + const HomeView({super.key}); + + @override + Widget build(BuildContext context) { + final controller = Get.find(); + + return Container(); + } +} diff --git a/lib/modules/voice/initial/initial_binding.dart b/lib/modules/musicoo/initial/initial_binding.dart similarity index 67% rename from lib/modules/voice/initial/initial_binding.dart rename to lib/modules/musicoo/initial/initial_binding.dart index b32ef02..0f64e36 100644 --- a/lib/modules/voice/initial/initial_binding.dart +++ b/lib/modules/musicoo/initial/initial_binding.dart @@ -1,5 +1,5 @@ import 'package:get/get.dart'; -import 'package:tone_snap/modules/voice/initial/initial_controller.dart'; +import 'package:tone_snap/modules/musicoo/initial/initial_controller.dart'; class InitialBinding extends Bindings { @override diff --git a/lib/modules/musicoo/initial/initial_controller.dart b/lib/modules/musicoo/initial/initial_controller.dart new file mode 100644 index 0000000..b6551af --- /dev/null +++ b/lib/modules/musicoo/initial/initial_controller.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:tone_snap/generated/assets.dart'; +import 'package:tone_snap/modules/musicoo/home/home_view.dart'; +import 'package:tone_snap/modules/musicoo/me/me_view.dart'; +import 'package:tone_snap/modules/musicoo/search_music/search_music_view.dart'; + +class InitialController extends GetxController { + static InitialController get to => Get.find(); + late PageController pageController; + final pages = [ + PageItem([Assets.musicooBnb1Unselected, Assets.musicooBnb1Selected], const HomeView()), + PageItem([Assets.musicooBnb2Unselected, Assets.musicooBnb2Selected], const SearchMusicView()), + PageItem([Assets.musicooBnb3Unselected, Assets.musicooBnb3Selected], const MeView()), + ]; + var currentIndex = 0.obs; + + @override + void onInit() { + super.onInit(); + pageController = PageController(initialPage: currentIndex.value); + } + + @override + void onClose() { + pageController.dispose(); + super.onClose(); + } + + Future onBottomAppBarItemChanged(int index) async { + // if (index == 1) { + // await PlayerController.to.stopPlay(); + // Get.toNamed(AppRoutes.uploadMethod); + // } else { + // if (index == 2) _refreshMe(); + // currentIndex.value = index; + // pageController.jumpToPage(index); + // } + currentIndex.value = index; + pageController.jumpToPage(index); + } +} + +class PageItem { + late final List icons; + late final StatelessWidget widget; + + PageItem(this.icons, this.widget); +} + diff --git a/lib/modules/musicoo/initial/initial_view.dart b/lib/modules/musicoo/initial/initial_view.dart new file mode 100644 index 0000000..b62503e --- /dev/null +++ b/lib/modules/musicoo/initial/initial_view.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:tone_snap/components/keep_alive_wrapper.dart'; +import 'package:tone_snap/modules/musicoo/initial/initial_controller.dart'; + +class InitialView extends GetView { + const InitialView({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + children: [ + Expanded( + child: PageView( + physics: const NeverScrollableScrollPhysics(), + controller: controller.pageController, + children: controller.pages.map((e) => KeepAliveWrapper(child: e.widget)).toList(), + ), + ), + ], + ), + bottomNavigationBar: _buildBottomAppBar(), + ); + } + + BottomAppBar _buildBottomAppBar() { + return BottomAppBar( + height: kBottomNavigationBarHeight, + padding: EdgeInsets.zero, + color: Colors.transparent, + child: SizedBox( + height: double.infinity, + child: Row( + children: controller.pages.asMap().entries.map((e) { + return Expanded( + child: GestureDetector( + onTap: () => controller.onBottomAppBarItemChanged(e.key), + child: Obx(() { + return Image.asset( + e.value.icons[controller.currentIndex.value == e.key ? 1 : 0], + width: controller.currentIndex.value == e.key ? 36.w : 28.w, + height: controller.currentIndex.value == e.key ? 36.w : 28.w, + ); + }), + ), + ); + }).toList(), + ), + ), + ); + } +} diff --git a/lib/modules/voice/me/me_binding.dart b/lib/modules/musicoo/me/me_binding.dart similarity index 69% rename from lib/modules/voice/me/me_binding.dart rename to lib/modules/musicoo/me/me_binding.dart index 37bd0ec..f0135d6 100644 --- a/lib/modules/voice/me/me_binding.dart +++ b/lib/modules/musicoo/me/me_binding.dart @@ -1,5 +1,6 @@ import 'package:get/get.dart'; -import 'package:tone_snap/modules/voice/me/me_controller.dart'; + +import 'me_controller.dart'; class MeBinding extends Bindings { @override diff --git a/lib/modules/musicoo/me/me_controller.dart b/lib/modules/musicoo/me/me_controller.dart new file mode 100644 index 0000000..8666234 --- /dev/null +++ b/lib/modules/musicoo/me/me_controller.dart @@ -0,0 +1,5 @@ +import 'package:get/get.dart'; + +class MeController extends GetxController { + +} diff --git a/lib/modules/musicoo/me/me_view.dart b/lib/modules/musicoo/me/me_view.dart new file mode 100644 index 0000000..e037294 --- /dev/null +++ b/lib/modules/musicoo/me/me_view.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import 'me_controller.dart'; + +class MeView extends GetView { + const MeView({super.key}); + + @override + Widget build(BuildContext context) { + final controller = Get.find(); + + return Container(); + } +} diff --git a/lib/modules/musicoo/search_music/search_music_binding.dart b/lib/modules/musicoo/search_music/search_music_binding.dart new file mode 100644 index 0000000..bf3c06c --- /dev/null +++ b/lib/modules/musicoo/search_music/search_music_binding.dart @@ -0,0 +1,10 @@ +import 'package:get/get.dart'; + +import 'search_music_controller.dart'; + +class SearchMusicBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => SearchMusicController()); + } +} diff --git a/lib/modules/musicoo/search_music/search_music_controller.dart b/lib/modules/musicoo/search_music/search_music_controller.dart new file mode 100644 index 0000000..e6e4993 --- /dev/null +++ b/lib/modules/musicoo/search_music/search_music_controller.dart @@ -0,0 +1,5 @@ +import 'package:get/get.dart'; + +class SearchMusicController extends GetxController { + +} diff --git a/lib/modules/musicoo/search_music/search_music_view.dart b/lib/modules/musicoo/search_music/search_music_view.dart new file mode 100644 index 0000000..07cf49e --- /dev/null +++ b/lib/modules/musicoo/search_music/search_music_view.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import 'search_music_controller.dart'; + +class SearchMusicView extends GetView { + const SearchMusicView({super.key}); + + @override + Widget build(BuildContext context) { + final controller = Get.find(); + + return Container(); + } +} diff --git a/lib/modules/voice/change_voice/change_voice_controller.dart b/lib/modules/voice/change_voice/change_voice_controller.dart index 6ee2e8e..fc2701c 100644 --- a/lib/modules/voice/change_voice/change_voice_controller.dart +++ b/lib/modules/voice/change_voice/change_voice_controller.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:ffmpeg_kit_flutter_audio/ffmpeg_kit.dart'; import 'package:ffmpeg_kit_flutter_audio/ffmpeg_session.dart'; import 'package:ffmpeg_kit_flutter_audio/return_code.dart'; @@ -9,28 +7,36 @@ import 'package:tone_snap/controllers/player_controller.dart'; import 'package:tone_snap/data/models/voice_model.dart'; import 'package:tone_snap/data/storage/my_voice_data.dart'; import 'package:tone_snap/generated/assets.dart'; -import 'package:tone_snap/modules/voice/initial/initial_controller.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart'; import 'package:tone_snap/routes/app_routes.dart'; import 'package:tone_snap/utils/date_util.dart'; import 'package:tone_snap/utils/file_util.dart'; import 'package:tone_snap/utils/local_path_util.dart'; import 'package:tone_snap/utils/log_print.dart'; -import 'package:tone_snap/utils/num_util.dart'; import 'package:tone_snap/utils/obj_util.dart'; class ChangeVoiceController extends GetxController { var timberList = [ - Timber('Child', Assets.changeVoiceAudioChild, 1.3, 1.1), - Timber('Boy', Assets.changeVoiceAudioBoy, 1.2, 1.1), - Timber('Man', Assets.changeVoiceAudioMan, 0.9, 1.1), - Timber('Elder', Assets.changeVoiceAudioElder, 0.8, 1.1), - // Timber('Rapper', Assets.changeVoiceAudioRapper, 1.0, 1.0), - Timber('Robot', Assets.changeVoiceAudioRobot, 1.0, 1.5), - Timber('Girl', Assets.changeVoiceAudioGirl, 1.5, 1.1), - Timber('Sexy', Assets.changeVoiceAudioSexy, 0.85, 1.1), - Timber('Woman', Assets.changeVoiceAudioWoman, 1.1, 1.1), - Timber('Monsters', Assets.changeVoiceAudioMonsters, 0.7, 1.1), + // Timber('Child', Assets.coverChild, 1.3, 1.1), + // Timber('Boy', Assets.coverBoy, 1.2, 1.1), + // Timber('Man', Assets.coverMan, 0.9, 1.1), + // Timber('Elder', Assets.coverElder, 0.75, 1.333), + // Timber('Robot', Assets.coverRobot, 1.0, 1.5), + // Timber('Girl', Assets.coverGirl, 1.5, 0.6667), + // Timber('Sexy', Assets.coverSexy, 1.25, 0.8), + // Timber('Woman', Assets.coverWoman, 1.25, 0.8), + // Timber('Monsters', Assets.coverMonsters, 0.7, 1.1), + + Timber('Original', Assets.coverOriginal, 1.0, 1.0, check: true), + Timber('Fast', Assets.coverFast, 1.0, 1.5), + Timber('Slow', Assets.coverSlow, 1.0, 0.5), + Timber('Flash', Assets.coverFlash, 1.0, 2.0), + Timber('Baby', Assets.coverChild, 1.3, 0.76), + Timber('Robot', Assets.coverRobot, 1.0, 1.25), + Timber('Monsters', Assets.coverMonsters, 0.60, 1.1), + Timber('DIY', Assets.coverDIY, 1.0, 1.0), ].obs; + var currentIndex = 0.obs; final playerController = PlayerController.to; var toneValue = 1.0.obs; var soundSpeedValue = 1.0.obs; @@ -40,25 +46,28 @@ class ChangeVoiceController extends GetxController { void onInit() { super.onInit(); filePath = Get.arguments; - playerController.setFilePath(filePath); + // playerController.setFilePath(filePath); } @override void onClose() async { - if (Platform.isAndroid) await playerController.setPitch(1.0); - await playerController.setSpeed(1.0); - playerController.stopPlay(); + // if (Platform.isAndroid) await playerController.setPitch(1.0); + // await playerController.setSpeed(1.0); + // playerController.stopPlay(); super.onClose(); } void onTapItem(Timber item, int index) { for (var e in timberList) { - e == item ? item.check = !item.check : e.check = false; + // e == item ? item.check = !item.check : e.check = false; + e.check = false; } + item.check = true; + currentIndex.value = index; toneValue.value = item.check ? item.tone : 1.0; soundSpeedValue.value = item.check ? item.soundSpeed : 1.0; - if (Platform.isAndroid) playerController.setPitch(toneValue.value); - playerController.setSpeed(soundSpeedValue.value); + // if (Platform.isAndroid) playerController.setPitch(toneValue.value); + // playerController.setSpeed(soundSpeedValue.value); timberList.refresh(); } @@ -71,22 +80,22 @@ class ChangeVoiceController extends GetxController { } } - void onChanged(double value, int i) { - var item = timberList.firstWhereOrNull((e) => e.check); - if (i == 0) { + void onChanged(double value, int type) { + // var item = timberList.firstWhereOrNull((e) => e.check); + if (type == 0) { toneValue.value = value; - if (Platform.isAndroid) playerController.setPitch(toneValue.value); - if (item?.tone.toString() != NumUtil.formatNum(value)) { - item?.check = false; - timberList.refresh(); - } + // if (Platform.isAndroid) playerController.setPitch(toneValue.value); + // if (item?.tone.toString() != NumUtil.formatNum(value)) { + // item?.check = false; + // timberList.refresh(); + // } } else { soundSpeedValue.value = value; - playerController.setSpeed(soundSpeedValue.value); - if (item?.soundSpeed.toString() != NumUtil.formatNum(value)) { - item?.check = false; - timberList.refresh(); - } + // playerController.setSpeed(soundSpeedValue.value); + // if (item?.soundSpeed.toString() != NumUtil.formatNum(value)) { + // item?.check = false; + // timberList.refresh(); + // } } } @@ -107,16 +116,16 @@ class ChangeVoiceController extends GetxController { String fileName = '${DateUtil.getNowTimeStr().replaceAll(' ', '_')}_output.mp3'; String outputPath = '${outputDir.path}/$fileName'; - var timber = timberList.firstWhereOrNull((e) => e.check); var filter = ""; - if (timber != null) { - int index = timberList.indexOf(timber); - // Rapper - // filter = ",aecho=0.8:0.88:60:0.4,areverb=50:50:100:100:0.5:0.5"; - if (index == 4) filter = ",afftdn=nf=-30"; - } + // var timber = timberList.firstWhereOrNull((e) => e.check); + // if (timber != null) { + // int index = timberList.indexOf(timber); + // if (index == 5) filter = ",afftdn=nf=-30"; + // } - // 获取采样率 + if (currentIndex.value == 5) filter = ",afftdn=nf=-30,aecho=0.8:0.88:60:0.4"; + + // 获取原始采样率 String sampleRate = await _getSampleRate() ?? '24000'; // 构建 FFmpeg 命令 @@ -134,8 +143,8 @@ class ChangeVoiceController extends GetxController { BaseEasyLoading.toast('Save successful'); // 回到首页-我的页面 - Get.until((route) => route.settings.name == AppRoutes.initial); - InitialController.to.onBottomAppBarItemChanged(2); + Get.until((route) => route.settings.name == AppRoutes.changeVoiceInitial); + VoiceInitialController.to.onBottomAppBarItemChanged(2); } catch (e) { BaseEasyLoading.toast('Save failed'); } diff --git a/lib/modules/voice/change_voice/change_voice_view.dart b/lib/modules/voice/change_voice/change_voice_view.dart index 049565f..2241a4b 100644 --- a/lib/modules/voice/change_voice/change_voice_view.dart +++ b/lib/modules/voice/change_voice/change_voice_view.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -21,7 +19,7 @@ class ChangeVoiceView extends StatelessWidget { return Stack( children: [ Image.asset( - Assets.imagesChangeVoiceBg, + Assets.changeVoiceChangeVoiceBg, width: 1.sw, height: 1.sh, fit: BoxFit.fill, @@ -39,7 +37,7 @@ class ChangeVoiceView extends StatelessWidget { SizedBox(height: 20.h), _buildSlider(context, 1), SizedBox(height: 20.h), - _buildPlayer(), + // _buildPlayer(), _buildSave(), ], ), @@ -101,7 +99,7 @@ class ChangeVoiceView extends StatelessWidget { maintainAnimation: true, maintainSize: true, child: Image.asset( - Assets.imagesChangeVoiceItemFrame, + Assets.changeVoiceChangeVoiceItemFrame, width: 78.w, height: 78.w, fit: BoxFit.fill, @@ -122,7 +120,7 @@ class ChangeVoiceView extends StatelessWidget { right: 0.w, bottom: 0.h, child: Image.asset( - Assets.imagesChangeVoiceItemSelected, + Assets.changeVoiceChangeVoiceItemSelected, width: 23.w, height: 23.w, fit: BoxFit.fill, @@ -147,73 +145,55 @@ class ChangeVoiceView extends StatelessWidget { ); } - Widget _buildSlider(BuildContext context, int i) { + Widget _buildSlider(BuildContext context, int type) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 24).w, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - Text( - i == 0 ? 'Tone' : 'Sound speed', - style: TextStyle( - color: Colors.white, - fontSize: 20.sp, - fontWeight: FontWeight.w700, - ), - ), - Expanded( - child: Visibility( - visible: i == 0 && Platform.isIOS, - child: Text( - ' (Only take effect after saving)', - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - color: Colors.white, - fontSize: 12.sp, - ), - ), - ), - ), - ], + Text( + type == 0 ? 'Tone' : 'Sound speed', + style: TextStyle( + color: Colors.white, + fontSize: 20.sp, + fontWeight: FontWeight.w700, + ), ), SizedBox(height: 16.h), Row( children: [ Expanded( - child: SliderTheme( - data: SliderTheme.of(context).copyWith( - activeTrackColor: const Color(0x33000000), - inactiveTrackColor: const Color(0x33000000), - trackShape: RoundRectSliderTrackShape( - trackHeight: 20.h, - trackRadius: 12.r, + child: Obx(() { + return SliderTheme( + data: SliderTheme.of(context).copyWith( + activeTrackColor: const Color(0x33000000), + inactiveTrackColor: const Color(0x33000000), + trackShape: RoundRectSliderTrackShape( + trackHeight: 20.h, + trackRadius: 12.r, + ), + thumbShape: RoundRectSliderThumbShape( + thumbWidth: 32.w, + thumbHeight: 44.h, + thumbRadius: 12.r, + thumbColor: controller.currentIndex.value == controller.timberList.length - 1 ? Colors.black : const Color(0x33000000), + ), ), - thumbColor: Colors.black, - thumbShape: RoundRectSliderThumbShape( - thumbWidth: 32.w, - thumbHeight: 44.h, - thumbRadius: 12.r, - ), - ), - child: Obx(() { - return Slider( + child: Slider( min: 0.5, max: 2, - value: i == 0 ? controller.toneValue.value : controller.soundSpeedValue.value, - onChanged: (value) => controller.onChanged(value, i), - ); - }), - ), + value: type == 0 ? controller.toneValue.value : controller.soundSpeedValue.value, + onChanged: controller.currentIndex.value == controller.timberList.length - 1 ? (value) => controller.onChanged(value, type) : null, + ), + ); + }), ), SizedBox(width: 20.w), Obx(() { return SizedBox( width: 40.w, child: Text( - i == 0 ? NumUtil.formatNum(controller.toneValue.value) : NumUtil.formatNum(controller.soundSpeedValue.value), + type == 0 ? NumUtil.formatNum(controller.toneValue.value) : NumUtil.formatNum(controller.soundSpeedValue.value), style: TextStyle( color: const Color(0x73000000), fontSize: 16.sp, @@ -243,7 +223,7 @@ class ChangeVoiceView extends StatelessWidget { child: Center( child: Obx(() { return Image.asset( - controller.playerController.isPlaying.value ? Assets.imagesPlaying1 : Assets.imagesNotPlayed1, + controller.playerController.isPlaying.value ? Assets.changeVoicePlaying1 : Assets.changeVoiceNotPlayed1, width: 29.w, height: 29.w, ); diff --git a/lib/modules/voice/favourite/favourite_controller.dart b/lib/modules/voice/favourite/favourite_controller.dart index 3747906..dfdcac9 100644 --- a/lib/modules/voice/favourite/favourite_controller.dart +++ b/lib/modules/voice/favourite/favourite_controller.dart @@ -6,7 +6,7 @@ import 'package:tone_snap/components/dialog/rename_dialog.dart'; import 'package:tone_snap/components/view_state_widget.dart'; import 'package:tone_snap/data/models/voice_model.dart'; import 'package:tone_snap/data/storage/favorite_data.dart'; -import 'package:tone_snap/modules/voice/initial/initial_controller.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart'; import 'package:tone_snap/routes/app_routes.dart'; class FavouriteController extends GetxController { @@ -32,7 +32,7 @@ class FavouriteController extends GetxController { } void onTapItem(VoiceModel item) { - InitialController.to.currentPlayVoiceModel.value = item; + VoiceInitialController.to.currentPlayVoiceModel.value = item; Get.toNamed(AppRoutes.playSound, arguments: item); } @@ -47,8 +47,8 @@ class FavouriteController extends GetxController { voiceList.refresh(); // 若 item 和当前正播放的 item 是同个对象,则需要同步修改 - if (item.path == InitialController.to.currentPlayVoiceModel.value?.path) { - InitialController.to.currentPlayVoiceModel.update((e) => e?.name = value); + if (item.path == VoiceInitialController.to.currentPlayVoiceModel.value?.path) { + VoiceInitialController.to.currentPlayVoiceModel.update((e) => e?.name = value); } }, ), @@ -67,8 +67,8 @@ class FavouriteController extends GetxController { BaseEasyLoading.toast('Removed'); // 若 item 和当前正播放的 item 是同个对象,则需要同步修改 - if (item.path == InitialController.to.currentPlayVoiceModel.value?.path) { - InitialController.to.isFavourite.value = false; + if (item.path == VoiceInitialController.to.currentPlayVoiceModel.value?.path) { + VoiceInitialController.to.isFavourite.value = false; } _refreshList(); }, diff --git a/lib/modules/voice/my_voice/my_voice_controller.dart b/lib/modules/voice/my_voice/my_voice_controller.dart index 8a7811c..6509186 100644 --- a/lib/modules/voice/my_voice/my_voice_controller.dart +++ b/lib/modules/voice/my_voice/my_voice_controller.dart @@ -6,7 +6,7 @@ import 'package:tone_snap/components/dialog/rename_dialog.dart'; import 'package:tone_snap/components/view_state_widget.dart'; import 'package:tone_snap/data/models/voice_model.dart'; import 'package:tone_snap/data/storage/my_voice_data.dart'; -import 'package:tone_snap/modules/voice/initial/initial_controller.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart'; import 'package:tone_snap/routes/app_routes.dart'; class MyVoiceController extends GetxController { @@ -32,7 +32,7 @@ class MyVoiceController extends GetxController { } void onTapItem(VoiceModel item) { - InitialController.to.currentPlayVoiceModel.value = item; + VoiceInitialController.to.currentPlayVoiceModel.value = item; Get.toNamed(AppRoutes.playSound, arguments: item); } @@ -47,8 +47,8 @@ class MyVoiceController extends GetxController { voiceList.refresh(); // 若 item 和当前正播放的 item 是同个对象,则需要同步改名 - if (identical(item, InitialController.to.currentPlayVoiceModel.value)) { - InitialController.to.currentPlayVoiceModel.update((e) => e?.name = value); + if (identical(item, VoiceInitialController.to.currentPlayVoiceModel.value)) { + VoiceInitialController.to.currentPlayVoiceModel.update((e) => e?.name = value); } }, ), diff --git a/lib/modules/voice/play_sound/play_sound_controller.dart b/lib/modules/voice/play_sound/play_sound_controller.dart index def9b71..49853a6 100644 --- a/lib/modules/voice/play_sound/play_sound_controller.dart +++ b/lib/modules/voice/play_sound/play_sound_controller.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:get/get.dart'; import 'package:tone_snap/controllers/player_controller.dart'; import 'package:tone_snap/data/models/voice_model.dart'; -import 'package:tone_snap/modules/voice/initial/initial_controller.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart'; import 'package:tone_snap/routes/app_routes.dart'; class PlaySoundController extends GetxController { @@ -17,12 +17,15 @@ class PlaySoundController extends GetxController { } @override - void onReady() async { + void onReady() { super.onReady(); - InitialController.to.isFavourite.value = InitialController.to.getIsFavouriteModel() != null; + VoiceInitialController.to.isFavourite.value = VoiceInitialController.to.getIsFavouriteModel() != null; if (playerController.filePath != voiceModel.path || playerController.isCompleted.value) { - await playerController.setFilePath(voiceModel.path); - await playerController.startPlay(); + Future.delayed(const Duration(milliseconds: 200), () async { + // 初始化操作 + await playerController.setFilePath(voiceModel.path); + await playerController.startPlay(); + }); } } diff --git a/lib/modules/voice/play_sound/play_sound_view.dart b/lib/modules/voice/play_sound/play_sound_view.dart index d94d63e..7f6fcbb 100644 --- a/lib/modules/voice/play_sound/play_sound_view.dart +++ b/lib/modules/voice/play_sound/play_sound_view.dart @@ -4,8 +4,8 @@ import 'package:get/get.dart'; import 'package:tone_snap/components/my_marquee_text.dart'; import 'package:tone_snap/components/navigation_bar/base_appbar.dart'; import 'package:tone_snap/generated/assets.dart'; -import 'package:tone_snap/modules/voice/initial/initial_controller.dart'; import 'package:tone_snap/modules/voice/play_sound/play_sound_controller.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart'; import 'package:tone_snap/utils/obj_util.dart'; class PlaySoundView extends StatelessWidget { @@ -19,7 +19,7 @@ class PlaySoundView extends StatelessWidget { alignment: Alignment.center, children: [ Image.asset( - Assets.imagesPlaySoundBg, + Assets.changeVoicePlaySoundBg, width: 1.sw, height: 1.sh, fit: BoxFit.fill, @@ -56,7 +56,7 @@ class PlaySoundView extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(10).w, child: Image.asset( - Assets.imagesArrowDownBack, + Assets.changeVoiceArrowDownBack, width: 24.w, height: 24.w, ), @@ -76,7 +76,7 @@ class PlaySoundView extends StatelessWidget { child: FittedBox( fit: BoxFit.none, child: Image.asset( - Assets.imagesVoiceDefault, + Assets.changeVoiceVoiceDefault, width: 200.w, height: 200.w, fit: BoxFit.contain, @@ -174,7 +174,7 @@ class PlaySoundView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ GestureDetector( - onTap: InitialController.to.onTapFavourite, + onTap: VoiceInitialController.to.onTapFavourite, child: ClipOval( child: Container( width: 52.w, @@ -182,7 +182,7 @@ class PlaySoundView extends StatelessWidget { color: Colors.black, child: Obx(() { return Image.asset( - InitialController.to.isFavourite.value ? Assets.imagesFavorite : Assets.imagesNotFavorite, + VoiceInitialController.to.isFavourite.value ? Assets.changeVoiceFavorite : Assets.changeVoiceNotFavorite, width: 28.w, height: 28.w, ); @@ -200,7 +200,7 @@ class PlaySoundView extends StatelessWidget { color: Colors.black, child: Obx(() { return Image.asset( - controller.playerController.isPlaying.value ? Assets.imagesPlaying1 : Assets.imagesNotPlayed1, + controller.playerController.isPlaying.value ? Assets.changeVoicePlaying1 : Assets.changeVoiceNotPlayed1, width: 38.w, height: 38.w, ); @@ -217,7 +217,7 @@ class PlaySoundView extends StatelessWidget { height: 52.w, color: Colors.black, child: Image.asset( - Assets.imagesVoiceChange, + Assets.changeVoiceChangeVoice, width: 28.w, height: 28.w, ), diff --git a/lib/modules/voice/settings/settings_binding.dart b/lib/modules/voice/settings/settings_binding.dart deleted file mode 100644 index 3dcae3b..0000000 --- a/lib/modules/voice/settings/settings_binding.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:get/get.dart'; -import 'package:tone_snap/modules/voice/settings/settings_controller.dart'; - -class SettingsBinding extends Bindings { - @override - void dependencies() { - Get.lazyPut(() => SettingsController()); - } -} diff --git a/lib/modules/voice/upload_method/upload_mothod_controller.dart b/lib/modules/voice/upload_method/upload_mothod_controller.dart index b99b080..278869e 100644 --- a/lib/modules/voice/upload_method/upload_mothod_controller.dart +++ b/lib/modules/voice/upload_method/upload_mothod_controller.dart @@ -1,11 +1,11 @@ import 'dart:io'; -import 'package:device_info_plus/device_info_plus.dart'; import 'package:file_picker/file_picker.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:tone_snap/components/base_easyloading.dart'; import 'package:tone_snap/routes/app_routes.dart'; +import 'package:tone_snap/utils/device_info_util.dart'; import 'package:tone_snap/utils/permission_util.dart'; class UploadMethodController extends GetxController { @@ -17,9 +17,8 @@ class UploadMethodController extends GetxController { void openFilePicker() async { Permission permission; if (Platform.isAndroid) { - DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); - AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo; - if (androidInfo.version.sdkInt >= 33) { + int sdkInt = await DeviceInfoUtil.getAndroidSDKInt(); + if (sdkInt >= 33) { permission = Permission.audio; } else { permission = Permission.storage; diff --git a/lib/modules/voice/upload_method/upload_mothod_view.dart b/lib/modules/voice/upload_method/upload_mothod_view.dart index 9102121..abb2966 100644 --- a/lib/modules/voice/upload_method/upload_mothod_view.dart +++ b/lib/modules/voice/upload_method/upload_mothod_view.dart @@ -21,7 +21,7 @@ class UploadMethodView extends StatelessWidget { return Stack( children: [ Image.asset( - Assets.imagesUploadMethodBg, + Assets.changeVoiceUploadMethodBg, width: 1.sw, height: 1.sh, fit: BoxFit.fill, @@ -37,7 +37,7 @@ class UploadMethodView extends StatelessWidget { GestureDetector( onTap: controller.goRecordSound, child: Image.asset( - Assets.imagesUploadRecordSound, + Assets.changeVoiceUploadRecordSound, width: 122.w, height: 122.w, ), @@ -51,7 +51,7 @@ class UploadMethodView extends StatelessWidget { GestureDetector( onTap: controller.openFilePicker, child: Image.asset( - Assets.imagesUploadPick, + Assets.changeVoiceUploadPick, width: 122.w, height: 122.w, ), diff --git a/lib/modules/voice/voice_home/voice_home_binding.dart b/lib/modules/voice/voice_home/voice_home_binding.dart new file mode 100644 index 0000000..1b55b4d --- /dev/null +++ b/lib/modules/voice/voice_home/voice_home_binding.dart @@ -0,0 +1,9 @@ +import 'package:get/get.dart'; +import 'package:tone_snap/modules/voice/voice_home/voice_home_controller.dart'; + +class VoiceHomeBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => VoiceHomeController()); + } +} diff --git a/lib/modules/voice/home/home_controller.dart b/lib/modules/voice/voice_home/voice_home_controller.dart similarity index 57% rename from lib/modules/voice/home/home_controller.dart rename to lib/modules/voice/voice_home/voice_home_controller.dart index 73c48b8..679ca30 100644 --- a/lib/modules/voice/home/home_controller.dart +++ b/lib/modules/voice/voice_home/voice_home_controller.dart @@ -3,27 +3,26 @@ import 'package:tone_snap/components/base_easyloading.dart'; import 'package:tone_snap/controllers/player_controller.dart'; import 'package:tone_snap/data/models/voice_model.dart'; import 'package:tone_snap/generated/assets.dart'; -import 'package:tone_snap/modules/voice/initial/initial_controller.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart'; import 'package:tone_snap/routes/app_routes.dart'; -class HomeController extends GetxController { - static HomeController get to => Get.find(); +class VoiceHomeController extends GetxController { + static VoiceHomeController get to => Get.find(); var playerController = PlayerController.to; var voiceList = [ - VoiceModel(name: 'Child', path: Assets.audioChild, cover: Assets.changeVoiceAudioChild), - VoiceModel(name: 'Boy', path: Assets.audioBoy, cover: Assets.changeVoiceAudioBoy), - VoiceModel(name: 'Man', path: Assets.audioMan, cover: Assets.changeVoiceAudioMan), - VoiceModel(name: 'Elder', path: Assets.audioElder, cover: Assets.changeVoiceAudioElder), - // VoiceModel(name: 'Rapper', path: Assets.audioRapper, cover: Assets.changeVoiceAudioRapper), - VoiceModel(name: 'Robot', path: Assets.audioRobot, cover: Assets.changeVoiceAudioRobot), - VoiceModel(name: 'Girl', path: Assets.audioGirl, cover: Assets.changeVoiceAudioGirl), - VoiceModel(name: 'Sexy', path: Assets.audioSexy, cover: Assets.changeVoiceAudioSexy), - VoiceModel(name: 'Woman', path: Assets.audioWoman, cover: Assets.changeVoiceAudioWoman), - VoiceModel(name: 'Monsters', path: Assets.audioMonsters, cover: Assets.changeVoiceAudioMonsters), + VoiceModel(name: 'Baby', path: Assets.audioChild, cover: Assets.coverChild), + VoiceModel(name: 'Boy', path: Assets.audioBoy, cover: Assets.coverBoy), + VoiceModel(name: 'Man', path: Assets.audioMan, cover: Assets.coverMan), + VoiceModel(name: 'Elder', path: Assets.audioElder, cover: Assets.coverElder), + VoiceModel(name: 'Robot', path: Assets.audioRobot, cover: Assets.coverRobot), + VoiceModel(name: 'Girl', path: Assets.audioGirl, cover: Assets.coverGirl), + VoiceModel(name: 'Sexy', path: Assets.audioSexy, cover: Assets.coverSexy), + VoiceModel(name: 'Woman', path: Assets.audioWoman, cover: Assets.coverWoman), + VoiceModel(name: 'Monsters', path: Assets.audioMonsters, cover: Assets.coverMonsters), ]; void onTapItem(VoiceModel item) { - InitialController.to.currentPlayVoiceModel.value = item; + VoiceInitialController.to.currentPlayVoiceModel.value = item; Get.toNamed(AppRoutes.playSound, arguments: item); } @@ -31,18 +30,18 @@ class HomeController extends GetxController { if (isPlayItem(item)) { await playerController.pausePlay(); } else { - if (!identical(item, InitialController.to.currentPlayVoiceModel.value)) { + if (!identical(item, VoiceInitialController.to.currentPlayVoiceModel.value)) { BaseEasyLoading.loading(); await playerController.setFilePath(item.path); BaseEasyLoading.dismiss(); - InitialController.to.currentPlayVoiceModel.value = item; - InitialController.to.isFavourite.value = InitialController.to.getIsFavouriteModel() != null; + VoiceInitialController.to.currentPlayVoiceModel.value = item; + VoiceInitialController.to.isFavourite.value = VoiceInitialController.to.getIsFavouriteModel() != null; } await playerController.startPlay(); } } bool isPlayItem(VoiceModel item) { - return playerController.isPlaying.value && identical(InitialController.to.currentPlayVoiceModel.value, item); + return playerController.isPlaying.value && identical(VoiceInitialController.to.currentPlayVoiceModel.value, item); } } \ No newline at end of file diff --git a/lib/modules/voice/home/home_view.dart b/lib/modules/voice/voice_home/voice_home_view.dart similarity index 90% rename from lib/modules/voice/home/home_view.dart rename to lib/modules/voice/voice_home/voice_home_view.dart index c907683..016bc6b 100644 --- a/lib/modules/voice/home/home_view.dart +++ b/lib/modules/voice/voice_home/voice_home_view.dart @@ -6,19 +6,19 @@ import 'package:tone_snap/components/my_marquee_text.dart'; import 'package:tone_snap/components/private/head_label.dart'; import 'package:tone_snap/data/models/voice_model.dart'; import 'package:tone_snap/generated/assets.dart'; -import 'package:tone_snap/modules/voice/home/home_controller.dart'; +import 'package:tone_snap/modules/voice/voice_home/voice_home_controller.dart'; import 'package:tone_snap/utils/obj_util.dart'; -class HomeView extends GetView { - const HomeView({super.key}); +class VoiceHomeView extends GetView { + const VoiceHomeView({super.key}); @override Widget build(BuildContext context) { - Get.find(); + Get.find(); return Column( children: [ HeadLabel( - assets: Assets.imagesTheMonster, + assets: Assets.changeVoiceTheMonster, width: 208.w, height: 43.h, ), @@ -60,7 +60,7 @@ class HomeView extends GetView { maintainAnimation: true, maintainSize: true, child: Image.asset( - Assets.imagesSubtract, + Assets.changeVoiceSubtract, width: 100.w, height: 100.w, fit: BoxFit.fill, @@ -99,7 +99,7 @@ class HomeView extends GetView { return GestureDetector( onTap: () => controller.onTapPlayBarPlay(item), child: Image.asset( - controller.isPlayItem(item) ? Assets.imagesPlaying : Assets.imagesNotPlayed, + controller.isPlayItem(item) ? Assets.changeVoicePlaying : Assets.changeVoiceNotPlayed, width: 30.w, height: 30.w, ), diff --git a/lib/modules/voice/voice_initial/voice_initial_binding.dart b/lib/modules/voice/voice_initial/voice_initial_binding.dart new file mode 100644 index 0000000..2dd6827 --- /dev/null +++ b/lib/modules/voice/voice_initial/voice_initial_binding.dart @@ -0,0 +1,9 @@ +import 'package:get/get.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart'; + +class VoiceInitialBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => VoiceInitialController()); + } +} diff --git a/lib/modules/voice/initial/initial_controller.dart b/lib/modules/voice/voice_initial/voice_initial_controller.dart similarity index 76% rename from lib/modules/voice/initial/initial_controller.dart rename to lib/modules/voice/voice_initial/voice_initial_controller.dart index ffb62ea..7d7fa07 100644 --- a/lib/modules/voice/initial/initial_controller.dart +++ b/lib/modules/voice/voice_initial/voice_initial_controller.dart @@ -5,21 +5,20 @@ import 'package:tone_snap/data/models/voice_model.dart'; import 'package:tone_snap/data/storage/favorite_data.dart'; import 'package:tone_snap/generated/assets.dart'; import 'package:tone_snap/modules/voice/favourite/favourite_controller.dart'; -import 'package:tone_snap/modules/voice/home/home_view.dart'; -import 'package:tone_snap/modules/voice/me/me_controller.dart'; -import 'package:tone_snap/modules/voice/me/me_view.dart'; import 'package:tone_snap/modules/voice/my_voice/my_voice_controller.dart'; -import 'package:tone_snap/modules/voice/settings/settings_view.dart'; +import 'package:tone_snap/modules/voice/voice_home/voice_home_view.dart'; +import 'package:tone_snap/modules/voice/voice_me/voice_me_view.dart'; +import 'package:tone_snap/modules/voice/voice_settings/voice_settings_view.dart'; import 'package:tone_snap/routes/app_routes.dart'; -class InitialController extends GetxController { - static InitialController get to => Get.find(); +class VoiceInitialController extends GetxController { + static VoiceInitialController get to => Get.find(); late PageController pageController; final pages = [ - PageItem([Assets.imagesBnb1Selected, Assets.imagesBnb1Unselected], const HomeView()), - PageItem([Assets.imagesBnb2Selected, Assets.imagesBnb2Unselected], Container()), - PageItem([Assets.imagesBnb3Selected, Assets.imagesBnb3Unselected], const MeView()), - PageItem([Assets.imagesBnb4Selected, Assets.imagesBnb4Unselected], const SettingsView()), + PageItem([Assets.changeVoiceBnb1Selected, Assets.changeVoiceBnb1Unselected], const VoiceHomeView()), + PageItem([Assets.changeVoiceBnb2Selected, Assets.changeVoiceBnb2Unselected], Container()), + PageItem([Assets.changeVoiceBnb3Selected, Assets.changeVoiceBnb3Unselected], const VoiceMeView()), + PageItem([Assets.changeVoiceBnb4Selected, Assets.changeVoiceBnb4Unselected], const VoiceSettingsView()), ]; var currentIndex = 0.obs; Rx currentPlayVoiceModel = Rx(null); diff --git a/lib/modules/voice/initial/initial_view.dart b/lib/modules/voice/voice_initial/voice_initial_view.dart similarity index 90% rename from lib/modules/voice/initial/initial_view.dart rename to lib/modules/voice/voice_initial/voice_initial_view.dart index 1d9bf91..9f5a959 100644 --- a/lib/modules/voice/initial/initial_view.dart +++ b/lib/modules/voice/voice_initial/voice_initial_view.dart @@ -4,12 +4,12 @@ import 'package:get/get.dart'; import 'package:tone_snap/components/keep_alive_wrapper.dart'; import 'package:tone_snap/components/my_marquee_text.dart'; import 'package:tone_snap/generated/assets.dart'; -import 'package:tone_snap/modules/voice/initial/initial_controller.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart'; -class InitialView extends StatelessWidget { - InitialView({super.key}); +class VoiceInitialView extends StatelessWidget { + VoiceInitialView({super.key}); - final controller = Get.find(); + final controller = Get.find(); @override Widget build(BuildContext context) { @@ -22,7 +22,7 @@ class InitialView extends StatelessWidget { Stack( children: [ Image.asset( - Assets.imagesHomeBg, + Assets.changeVoiceHomeBg, width: 1.sw, height: 1.sh, fit: BoxFit.fill, @@ -30,7 +30,7 @@ class InitialView extends StatelessWidget { Positioned( bottom: 0, child: Image.asset( - Assets.imagesHomeBnbBg, + Assets.changeVoiceHomeBnbBg, width: 1.sw, height: 222.h, fit: BoxFit.fill, @@ -40,13 +40,13 @@ class InitialView extends StatelessWidget { ), Container(), Image.asset( - Assets.imagesUploadMethodBg, + Assets.changeVoiceUploadMethodBg, width: 1.sw, height: 1.sh, fit: BoxFit.fill, ), Image.asset( - Assets.imagesSettingsBg, + Assets.changeVoiceSettingsBg, width: 1.sw, height: 1.sh, fit: BoxFit.fill, @@ -126,7 +126,7 @@ class InitialView extends StatelessWidget { return GestureDetector( onTap: controller.onTapFavourite, child: Image.asset( - controller.isFavourite.value ? Assets.imagesFavorite : Assets.imagesNotFavorite, + controller.isFavourite.value ? Assets.changeVoiceFavorite : Assets.changeVoiceNotFavorite, width: 28.w, height: 28.w, ), @@ -136,7 +136,7 @@ class InitialView extends StatelessWidget { GestureDetector( onTap: controller.togglePlayback, child: Image.asset( - controller.playerController.isPlaying.value ? Assets.imagesPlaying1 : Assets.imagesNotPlayed1, + controller.playerController.isPlaying.value ? Assets.changeVoicePlaying1 : Assets.changeVoiceNotPlayed1, width: 38.w, height: 38.w, ), diff --git a/lib/modules/voice/voice_me/voice_me_binding.dart b/lib/modules/voice/voice_me/voice_me_binding.dart new file mode 100644 index 0000000..89dab6f --- /dev/null +++ b/lib/modules/voice/voice_me/voice_me_binding.dart @@ -0,0 +1,9 @@ +import 'package:get/get.dart'; +import 'package:tone_snap/modules/voice/voice_me/voice_me_controller.dart'; + +class VoiceMeBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => VoiceMeController()); + } +} diff --git a/lib/modules/voice/me/me_controller.dart b/lib/modules/voice/voice_me/voice_me_controller.dart similarity index 87% rename from lib/modules/voice/me/me_controller.dart rename to lib/modules/voice/voice_me/voice_me_controller.dart index 15328e2..2767b07 100644 --- a/lib/modules/voice/me/me_controller.dart +++ b/lib/modules/voice/voice_me/voice_me_controller.dart @@ -3,7 +3,7 @@ import 'package:get/get.dart'; import 'package:tone_snap/modules/voice/favourite/favourite_view.dart'; import 'package:tone_snap/modules/voice/my_voice/my_voice_view.dart'; -class MeController extends GetxController with GetTickerProviderStateMixin { +class VoiceMeController extends GetxController with GetTickerProviderStateMixin { late TabController tabController; final labels = ['My Voice', 'Favourite']; final pages = [const MyVoiceView(), const FavouriteView()]; diff --git a/lib/modules/voice/me/me_view.dart b/lib/modules/voice/voice_me/voice_me_view.dart similarity index 87% rename from lib/modules/voice/me/me_view.dart rename to lib/modules/voice/voice_me/voice_me_view.dart index 84bc53a..78296e4 100644 --- a/lib/modules/voice/me/me_view.dart +++ b/lib/modules/voice/voice_me/voice_me_view.dart @@ -5,19 +5,19 @@ import 'package:tone_snap/components/keep_alive_wrapper.dart'; import 'package:tone_snap/components/my_custom_indicator.dart'; import 'package:tone_snap/components/private/head_label.dart'; import 'package:tone_snap/generated/assets.dart'; -import 'package:tone_snap/modules/voice/me/me_controller.dart'; +import 'package:tone_snap/modules/voice/voice_me/voice_me_controller.dart'; -class MeView extends GetView { - const MeView({super.key}); +class VoiceMeView extends GetView { + const VoiceMeView({super.key}); @override Widget build(BuildContext context) { - Get.find(); + Get.find(); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ HeadLabel( - assets: Assets.imagesTheMonster1, + assets: Assets.changeVoiceTheMonster1, width: 135.w, height: 51.h, ), diff --git a/lib/modules/voice/voice_settings/voice_settings_binding.dart b/lib/modules/voice/voice_settings/voice_settings_binding.dart new file mode 100644 index 0000000..3b4a4de --- /dev/null +++ b/lib/modules/voice/voice_settings/voice_settings_binding.dart @@ -0,0 +1,9 @@ +import 'package:get/get.dart'; +import 'package:tone_snap/modules/voice/voice_settings/voice_settings_controller.dart'; + +class VoiceSettingsBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => VoiceSettingsController()); + } +} diff --git a/lib/modules/voice/settings/settings_controller.dart b/lib/modules/voice/voice_settings/voice_settings_controller.dart similarity index 80% rename from lib/modules/voice/settings/settings_controller.dart rename to lib/modules/voice/voice_settings/voice_settings_controller.dart index d42c227..998ffee 100644 --- a/lib/modules/voice/settings/settings_controller.dart +++ b/lib/modules/voice/voice_settings/voice_settings_controller.dart @@ -2,9 +2,9 @@ import 'package:get/get.dart'; import 'package:tone_snap/generated/assets.dart'; import 'package:tone_snap/routes/app_routes.dart'; -class SettingsController extends GetxController { +class VoiceSettingsController extends GetxController { final options = ['About', 'Privacy Policy', 'User Agreement']; - final optionIcons = [Assets.imagesAbout, Assets.imagesPrivacy, Assets.imagesUserAgreement]; + final optionIcons = [Assets.changeVoiceAbout, Assets.changeVoicePrivacy, Assets.changeVoiceUserAgreement]; void onTapItem(int index) async { if (index == 0) { diff --git a/lib/modules/voice/settings/settings_view.dart b/lib/modules/voice/voice_settings/voice_settings_view.dart similarity index 82% rename from lib/modules/voice/settings/settings_view.dart rename to lib/modules/voice/voice_settings/voice_settings_view.dart index d36830a..c3189cf 100644 --- a/lib/modules/voice/settings/settings_view.dart +++ b/lib/modules/voice/voice_settings/voice_settings_view.dart @@ -3,20 +3,19 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:tone_snap/components/private/head_label.dart'; import 'package:tone_snap/generated/assets.dart'; -import 'package:tone_snap/modules/voice/settings/settings_controller.dart'; -import 'package:tone_snap/res/themes/app_sizes.dart'; +import 'package:tone_snap/modules/voice/voice_settings/voice_settings_controller.dart'; -class SettingsView extends GetView{ - const SettingsView({super.key}); +class VoiceSettingsView extends GetView{ + const VoiceSettingsView({super.key}); @override Widget build(BuildContext context) { - Get.find(); + Get.find(); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ HeadLabel( - assets: Assets.imagesTheMonster2, + assets: Assets.changeVoiceTheMonster2, width: 155.w, height: 51.h, ), @@ -60,7 +59,7 @@ class SettingsView extends GetView{ ), ), ), - Image.asset(Assets.imagesIconChevronRight), + Image.asset(Assets.changeVoiceIconChevronRight), ], ), ), diff --git a/lib/res/themes/app_colors.dart b/lib/res/themes/app_colors.dart index 776ada4..6857842 100644 --- a/lib/res/themes/app_colors.dart +++ b/lib/res/themes/app_colors.dart @@ -5,4 +5,7 @@ import 'package:flutter/material.dart'; /// 种子颜色 -const seedColor = Color(0xFF000000); \ No newline at end of file +const changeVoiceSeedColor = Color(0xFF000000); + +/// 种子颜色 +const musicooSeedColor = Color(0xFF80F988); \ No newline at end of file diff --git a/lib/res/themes/app_themes.dart b/lib/res/themes/app_themes.dart index 1c613a8..b304a02 100644 --- a/lib/res/themes/app_themes.dart +++ b/lib/res/themes/app_themes.dart @@ -6,14 +6,24 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:tone_snap/res/themes/app_colors.dart'; -/// 主题 -ThemeData appTheme = ThemeData.dark(useMaterial3: true).copyWith( - colorScheme: ColorScheme.fromSeed(seedColor: seedColor, primary: seedColor), - appBarTheme: const AppBarTheme(color: seedColor), - scaffoldBackgroundColor: seedColor, +ThemeData changeVoiceAppTheme = ThemeData.dark(useMaterial3: true).copyWith( + colorScheme: ColorScheme.fromSeed(seedColor: changeVoiceSeedColor), + appBarTheme: const AppBarTheme(color: changeVoiceSeedColor), + scaffoldBackgroundColor: changeVoiceSeedColor, scrollbarTheme: ScrollbarThemeData( thumbVisibility: WidgetStateProperty.all(false), thumbColor: WidgetStateProperty.all(Colors.white), radius: Radius.circular(8.r), ), -); \ No newline at end of file +); + +ThemeData musicooAppTheme = ThemeData.dark(useMaterial3: true).copyWith( + colorScheme: ColorScheme.fromSeed(seedColor: musicooSeedColor), + appBarTheme: const AppBarTheme(color: Color(0xFF151718)), + scaffoldBackgroundColor: const Color(0xFF151718), + scrollbarTheme: ScrollbarThemeData( + thumbVisibility: WidgetStateProperty.all(false), + thumbColor: WidgetStateProperty.all(Colors.white), + radius: Radius.circular(8.r), + ), +); diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index 0354eb7..3840a99 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -4,23 +4,26 @@ import 'package:flutter/animation.dart'; import 'package:get/get.dart'; +import 'package:tone_snap/modules/musicoo/home/home_binding.dart'; +import 'package:tone_snap/modules/musicoo/initial/initial_binding.dart'; +import 'package:tone_snap/modules/musicoo/initial/initial_view.dart'; +import 'package:tone_snap/modules/musicoo/me/me_binding.dart'; +import 'package:tone_snap/modules/musicoo/search_music/search_music_binding.dart'; import 'package:tone_snap/modules/voice/about/about_binding.dart'; import 'package:tone_snap/modules/voice/about/about_view.dart'; import 'package:tone_snap/modules/voice/change_voice/change_voice_binding.dart'; import 'package:tone_snap/modules/voice/change_voice/change_voice_view.dart'; -import 'package:tone_snap/modules/voice/favourite/favourite_binding.dart'; -import 'package:tone_snap/modules/voice/home/home_binding.dart'; -import 'package:tone_snap/modules/voice/initial/initial_binding.dart'; -import 'package:tone_snap/modules/voice/initial/initial_view.dart'; -import 'package:tone_snap/modules/voice/me/me_binding.dart'; -import 'package:tone_snap/modules/voice/my_voice/my_voice_binding.dart'; import 'package:tone_snap/modules/voice/play_sound/play_sound_binding.dart'; import 'package:tone_snap/modules/voice/play_sound/play_sound_view.dart'; import 'package:tone_snap/modules/voice/record_sound/record_sound_binding.dart'; import 'package:tone_snap/modules/voice/record_sound/record_sound_view.dart'; -import 'package:tone_snap/modules/voice/settings/settings_binding.dart'; import 'package:tone_snap/modules/voice/upload_method/upload_mothod_binding.dart'; import 'package:tone_snap/modules/voice/upload_method/upload_mothod_view.dart'; +import 'package:tone_snap/modules/voice/voice_home/voice_home_binding.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_binding.dart'; +import 'package:tone_snap/modules/voice/voice_initial/voice_initial_view.dart'; +import 'package:tone_snap/modules/voice/voice_me/voice_me_binding.dart'; +import 'package:tone_snap/modules/voice/voice_settings/voice_settings_binding.dart'; import 'package:tone_snap/modules/web_page/web_page_binding.dart'; import 'package:tone_snap/modules/web_page/web_page_view.dart'; import 'package:tone_snap/routes/app_routes.dart'; @@ -29,15 +32,16 @@ class AppPages { AppPages._(); static final routes = [ + /// change_voice GetPage( - name: AppRoutes.initial, - page: () => InitialView(), - bindings: [InitialBinding(), HomeBinding(), MeBinding(), SettingsBinding()], + name: AppRoutes.changeVoiceInitial, + page: () => VoiceInitialView(), + bindings: [VoiceInitialBinding(), VoiceHomeBinding(), VoiceMeBinding(), VoiceSettingsBinding()], ), GetPage( name: AppRoutes.uploadMethod, page: () => UploadMethodView(), - binding: UploadMethodBinding() + binding: UploadMethodBinding(), ), GetPage( name: AppRoutes.recordSound, @@ -53,6 +57,7 @@ class AppPages { name: AppRoutes.playSound, page: () => PlaySoundView(), binding: PlaySoundBinding(), + transitionDuration: const Duration(milliseconds: 200), transition: Transition.downToUp, curve: Curves.easeIn, ), @@ -71,5 +76,12 @@ class AppPages { page: () => WebPageView(), binding: WebPageBinding(), ), + + /// musicoo + GetPage( + name: AppRoutes.initial, + page: () => const InitialView(), + bindings: [InitialBinding(), HomeBinding(), SearchMusicBinding(), MeBinding()], + ), ]; } diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index 80be0fa..292e230 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -5,9 +5,8 @@ class AppRoutes { AppRoutes._(); - // static const splash = '/'; - static const initial = '/'; - // static const initial = '/initial'; + /// change_voice + static const changeVoiceInitial = '/voiceInitial'; static const uploadMethod = '/upload_method'; static const recordSound = '/record_sound'; static const changeVoice = '/change_voice'; @@ -15,4 +14,8 @@ class AppRoutes { static const about = '/about'; static const privacy = '/privacy'; static const terms = '/terms'; + + /// musicoo + // static const splash = '/'; + static const initial = '/initial'; } diff --git a/lib/utils/device_info_util.dart b/lib/utils/device_info_util.dart index d8c3698..ae922cf 100644 --- a/lib/utils/device_info_util.dart +++ b/lib/utils/device_info_util.dart @@ -6,16 +6,16 @@ import 'package:device_info_plus/device_info_plus.dart'; class DeviceInfoUtil { /// 获取当前Android设备的系统版本 - static Future getAndroidSystemVersion() async { + static Future getAndroidSDKInt() async { DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); - AndroidDeviceInfo androidDeviceInfo = await deviceInfoPlugin.androidInfo; - return androidDeviceInfo.version.sdkInt; + AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo; + return androidInfo.version.sdkInt; } - /// 获取当前iOS设备的系统版本 - static Future getIOSSystemVersion() async { - DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); - IosDeviceInfo iosDeviceInfo = await deviceInfoPlugin.iosInfo; - return iosDeviceInfo.systemVersion; - } + // /// 获取当前iOS设备的系统版本 + // static Future getIOSSystemVersion() async { + // DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); + // IosDeviceInfo iosDeviceInfo = await deviceInfoPlugin.iosInfo; + // return iosDeviceInfo.systemVersion; + // } } diff --git a/lib/utils/permission_util.dart b/lib/utils/permission_util.dart index 6a67c6f..4ca653c 100644 --- a/lib/utils/permission_util.dart +++ b/lib/utils/permission_util.dart @@ -11,7 +11,7 @@ import 'package:tone_snap/components/dialog/remind_dialog.dart'; class PermissionUtil { /// 检测是否有权限 /// [permissionList] 权限申请列表 - static Future checkPermission(List permissionList) async { + static Future checkPermission(List permissionList, {bool showDialog = true}) async { // 一个新待申请权限列表 List newPermissionList = []; // 遍历当前权限申请列表 @@ -29,7 +29,7 @@ class PermissionUtil { switch (permissionStatus) { // 拒绝状态 case PermissionStatus.denied: - _showFailedDialog(newPermissionList); + if (showDialog) _showFailedDialog(newPermissionList); return false; // 允许状态 case PermissionStatus.granted: @@ -39,7 +39,7 @@ class PermissionUtil { case PermissionStatus.provisional: case PermissionStatus.restricted: case PermissionStatus.permanentlyDenied: - _showFailedDialog(newPermissionList, isPermanentlyDenied: true); + if (showDialog) _showFailedDialog(newPermissionList, isPermanentlyDenied: true); break; } } else { diff --git a/pubspec.yaml b/pubspec.yaml index 9f80cbe..c2bff96 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.2+5 +version: 1.0.2+8 environment: sdk: '>=3.4.1 <4.0.0' @@ -120,12 +120,16 @@ flutter: # To add assets to your application, add an assets section, like this: assets: + - assets/audio/ - assets/icon/ - - assets/change_voice/ - - assets/change_voice/images/ - - assets/change_voice/images/2.0x/ - - assets/change_voice/images/3.0x/ - - assets/change_voice/audio/ + - assets/images/ + - assets/images/change_voice/ + - assets/images/change_voice/2.0x/ + - assets/images/change_voice/3.0x/ + - assets/images/change_voice/cover/ + - assets/images/musicoo/ + - assets/images/musicoo/2.0x/ + - assets/images/musicoo/3.0x/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware