import 'package:flutter/material.dart'; 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/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/routes/app_routes.dart'; class InitialController extends GetxController { static InitialController 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()), ]; var currentIndex = 0.obs; Rx currentPlayVoiceModel = Rx(null); var playerController = PlayerController.to; /// 是否加入喜欢列表 var isFavourite = false.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); } } void onTapPlayBar() { Get.toNamed(AppRoutes.playSound, arguments: currentPlayVoiceModel.value); } Future togglePlayback() async { playerController.isPlaying.value ? await playerController.pausePlay() : await playerController.startPlay(); } VoiceModel? getIsFavouriteModel() { final list = FavoriteData().getList(); return list.firstWhereOrNull((e) => e.path == currentPlayVoiceModel.value?.path); } Future onTapFavourite() async { if (isFavourite.value) { getIsFavouriteModel()?.delete(); isFavourite.value = false; } else { if (currentPlayVoiceModel.value != null) { await FavoriteData().addData(currentPlayVoiceModel.value!.copyWith()); isFavourite.value = true; } } _refreshMe(); } /// 刷新我的页面 void _refreshMe() { if (Get.isRegistered()) MyVoiceController.to.getData(); if (Get.isRegistered()) FavouriteController.to.getData(); } } class PageItem { late final List icons; late final StatelessWidget widget; PageItem(this.icons, this.widget); }