95 lines
3.1 KiB
Dart
95 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();
|
|
}
|
|
|
|
Future<void> 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<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 (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>()) 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);
|
|
}
|