135 lines
4.2 KiB
Dart
135 lines
4.2 KiB
Dart
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);
|
||
}
|