WallPaper_FSX_Flutter/lib/modules/home/home_controller.dart
2024-05-22 09:26:45 +08:00

135 lines
4.2 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:convert';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:now_wallpaper/applovin_max/applovin_manage.dart';
import 'package:now_wallpaper/common/components/view_state_widget.dart';
import 'package:now_wallpaper/generated/assets.dart';
import 'package:now_wallpaper/models/wallpaper_model.dart';
import 'package:now_wallpaper/modules/catalog/catalog_controller.dart';
import 'package:now_wallpaper/modules/catalog/catalog_view.dart';
import 'package:now_wallpaper/modules/discover/discover_controller.dart';
import 'package:now_wallpaper/modules/discover/discover_view.dart';
import 'package:now_wallpaper/modules/favorite/favorite_controller.dart';
import 'package:now_wallpaper/modules/favorite/favorite_view.dart';
import 'package:now_wallpaper/routes/app_pages.dart';
class HomeController extends GetxController with WidgetsBindingObserver {
static HomeController get to => Get.find<HomeController>();
final pages = [
PageItem('Discover', [Assets.imagesDiscoverUnchecked, Assets.imagesDiscoverSelected], const DiscoverView()),
PageItem('Favorite', [Assets.imagesFavoriteUnchecked, Assets.imagesFavoriteSelected], const FavoriteView()),
PageItem('Catalog', [Assets.imagesCatalogUnchecked, Assets.imagesCatalogSelected], const CatalogView()),
];
late PageController pageController;
var currentIndex = 0.obs;
var wallpaperModelList = <WallpaperModel>[];
var viewState = ViewState.loading;
@override
void onInit() {
super.onInit();
WidgetsBinding.instance.addObserver(this);
pageController = PageController(initialPage: currentIndex.value);
}
@override
void onReady() {
super.onReady();
_getAllData();
}
@override
void onClose() {
WidgetsBinding.instance.removeObserver(this);
pageController.dispose();
super.onClose();
}
@override
Future<void> didChangeAppLifecycleState(AppLifecycleState state) async {
switch (state) {
case AppLifecycleState.resumed:
await ApplovinManage().showAdIfReady(ApplovinManage().adUnitId1);
break;
case AppLifecycleState.inactive:
case AppLifecycleState.hidden:
case AppLifecycleState.paused:
case AppLifecycleState.detached:
break;
}
}
/// PageView页面改变回调
void onPageChanged(int index) {
currentIndex.value = index;
}
/// 点击BottomNavigationBar
void onTapNavigationBar(int index) async {
pageController.jumpToPage(index);
await ApplovinManage().showAdIfReady(ApplovinManage().adUnitId1);
}
/// 点击设置
void onTapSettings() {
Get.toNamed(AppPages.settings);
}
// void _showPopMenu(context) {
// showMenu(
// context: context,
// surfaceTintColor: Colors.white,
// position: RelativeRect.fromLTRB(double.infinity, statusToolBarHeight, 0.0, 0.0),
// items: [
// PopupMenuItem<String>(
// value: 'delete',
// onTap: deleteOnTap,
// child: const ListTile(
// leading: Icon(Icons.delete),
// title: Text('Delete All'),
// ),
// ),
// ],
// );
// }
/// 获取所有数据
Future<void> _getAllData() async {
// 读取json文件获取数据
var data = jsonDecode(await rootBundle.loadString(Assets.jsonWallpaper));
if (data != null && data is List) {
wallpaperModelList = data.map((e) => WallpaperModel.fromJson(e)).toList();
viewState = wallpaperModelList.isNotEmpty ? ViewState.normal : ViewState.empty;
}
if (Get.isRegistered<DiscoverController>()) {
DiscoverController.to.getData();
}
if (Get.isRegistered<FavoriteController>()) {
FavoriteController.to.getTodayHottestList();
}
if (Get.isRegistered<CatalogController>()) {
CatalogController.to.getData();
}
}
/// 随机取一个分类
WallpaperModel? getRandomCls() {
if (wallpaperModelList.isNotEmpty) {
Random random = Random();
int i = random.nextInt(wallpaperModelList.length);
return wallpaperModelList[i];
}
return null;
}
}
class PageItem {
late final String label;
late final List<String> icons;
late final StatelessWidget widget;
PageItem(this.label, this.icons, this.widget);
}