news_getx/lib/modules/application/application_controller.dart

116 lines
2.7 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:news_getx/theme/app_colors.dart';
import 'package:news_getx/utils/iconfont.dart';
class ApplicationController extends GetxController {
/// 响应式成员变量
// 当前 tab 页码
final _page = 0.obs;
set page(value) => _page.value = value;
get page => _page.value;
/// 成员变量
///
// tab 页标题
late final List<String> tabTitles;
// 页控制器
late final PageController pageController;
// 底部导航项目
late final List<BottomNavigationBarItem> bottomTabs;
/// 事件
// tab栏动画
void handleNavBarTap(int page) {
pageController.animateToPage(
page,
duration: const Duration(seconds: 1),
curve: Curves.ease,
);
}
// tab栏页码切换
void handlePageChange(int newPage) {
page = newPage;
}
/// scheme 内部打开 TODO uriLink 通过地址打开程序指定页面
bool isInitialUriIsHandled = false;
StreamSubscription? uriSub;
/// 生命周期
@override
void onInit() {
super.onInit();
// 准备静态数据 作为tab
tabTitles = ['Welcome', 'Cagegory', 'Bookmarks', 'Account'];
bottomTabs = <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(
Iconfont.home,
color: AppColors.tabBarElement,
),
activeIcon: Icon(
Iconfont.home,
color: AppColors.secondaryElementText,
),
label: "main",
backgroundColor: AppColors.primaryBackground,
),
BottomNavigationBarItem(
icon: Icon(
Iconfont.grid,
color: AppColors.tabBarElement,
),
activeIcon: Icon(
Iconfont.grid,
color: AppColors.secondaryElementText,
),
label: 'category',
backgroundColor: AppColors.primaryBackground,
),
BottomNavigationBarItem(
icon: Icon(
Iconfont.tag,
color: AppColors.tabBarElement,
),
activeIcon: Icon(
Iconfont.tag,
color: AppColors.secondaryElementText,
),
label: 'tag',
backgroundColor: AppColors.primaryBackground,
),
BottomNavigationBarItem(
icon: Icon(
Iconfont.me,
color: AppColors.tabBarElement,
),
activeIcon: Icon(
Iconfont.me,
color: AppColors.secondaryElementText,
),
label: 'my',
backgroundColor: AppColors.primaryBackground,
),
];
pageController = PageController(initialPage: page);
}
@override
void dispose() {
uriSub?.cancel();
pageController.dispose();
super.dispose();
}
}