ToneSnap_FSX_Flutter/lib/modules/voice/initial/initial_controller.dart
fengshengxiong 422a3f8802 first commit
2024-06-11 11:53:38 +08:00

96 lines
3.1 KiB
Dart

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<InitialController>();
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<VoiceModel?> currentPlayVoiceModel = Rx<VoiceModel?>(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();
}
void onBottomAppBarItemChanged(int index) {
if (index == 1) {
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<void> 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<void> onTapFavourite() async {
if (currentPlayVoiceModel.value != null) {
if (isFavourite.value) {
getIsFavouriteModel()?.delete();
isFavourite.value = false;
} else {
await FavoriteData().addData(currentPlayVoiceModel.value!.copyWith());
isFavourite.value = true;
}
_refreshMe();
}
}
/// 刷新我的页面
void _refreshMe() {
if (Get.isRegistered<MeController>()) {
if (Get.isRegistered<MyVoiceController>()) MyVoiceController.to.getData();
if (Get.isRegistered<FavouriteController>()) FavouriteController.to.getData();
}
}
}
class PageItem {
late final List<String> icons;
late final StatelessWidget widget;
PageItem(this.icons, this.widget);
}