You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

266 lines
8.9 KiB

/*
* ====================================================
* package : pages.tabBar
* author : Created by nansi.
* time : 2019/5/6 1:56 PM
* remark :
* ====================================================
*/
import 'package:flutter/material.dart';
import 'package:recook/constants/config.dart';
import 'package:recook/constants/styles.dart';
import 'package:recook/manager/user_manager.dart';
import 'package:recook/pages/business/business_page.dart';
import 'package:recook/pages/home/home_page.dart';
import 'package:recook/pages/shop/widget/normal_shop_page.dart';
import 'package:recook/pages/shopping_cart/shopping_cart_page.dart';
import 'package:recook/pages/user/user_page.dart';
import 'package:recook/third_party/bugly_helper.dart';
import 'package:recook/utils/app_router.dart';
import 'package:recook/utils/print_util.dart';
import 'package:recook/utils/user_level_tool.dart';
import 'package:recook/utils/versionInfo/version_tool.dart';
import 'package:recook/widgets/cache_tab_bar_view.dart';
import 'package:recook/widgets/tabbarWidget/ace_bottom_navigation_bar.dart';
class TabBarWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _TabBarWidgetState();
}
}
class _TabBarWidgetState extends State<TabBarWidget>
with TickerProviderStateMixin {
TabController _tabController;
BottomBarController _bottomBarController;
BuildContext _context;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((callback) {
// _showUpDateAlert();
// _getVersionInfo();
VersionTool.checkVersionInfo(_context);
});
_tabController = TabController(
length: !AppConfig.getShowCommission() ? 4 : 5, vsync: this);
_bottomBarController = BottomBarController();
UserManager.instance.login.addListener(_loginListener);
UserManager.instance.selectTabbar.addListener(_selectTabbar);
// UserManager.instance.refreshUserRole.addListener(_refreshUserRoleTabBar);
BuglyHelper.setUserInfo();
}
_loginListener() {
print("context ---- $_context, ${UserManager.instance.haveLogin}");
if (_context != null && UserManager.instance.haveLogin == false) {
AppRouter.pushAndRemoveUntil(_context, RouteName.LOGIN);
}
}
_selectTabbar() {
_tabController.index = UserManager.instance.selectTabbarIndex;
}
@override
Widget build(BuildContext context) {
if (_context == null) {
_context = context;
}
return Scaffold(
body: CacheTabBarView(
physics: NeverScrollableScrollPhysics(),
needAnimation: false,
controller: _tabController,
children:
// AppConfig.getShowCommission()
!AppConfig.getShowCommission()
? <Widget>[
HomePage(),
BusinessPage(),
ShoppingCartPage(),
UserPage()
]
: <Widget>[
HomePage(),
BusinessPage(),
NormalShopPage(),
ShoppingCartPage(),
UserPage()
],
),
bottomNavigationBar: _changeBottomBar(context));
}
_changeBottomBar(BuildContext context) {
return BottomBar(
barController: _bottomBarController,
tabChangeListener: (index) {
if (!AppConfig.getShowCommission()) {
// if(AppConfig.getShowCommission()){
// if (index == 2) {
// UserManager.instance.refreshShopPage.value = !UserManager.instance.refreshShopPage.value;
// }
if (index == 3) {
UserManager.instance.refreshUserPage.value =
!UserManager.instance.refreshUserPage.value;
}
} else {
if (index == 2) {
UserManager.instance.refreshShopPage.value =
!UserManager.instance.refreshShopPage.value;
}
if (index == 4) {
UserManager.instance.refreshUserPage.value =
!UserManager.instance.refreshUserPage.value;
}
}
_tabController.index = index;
},
onCenterItemClick: (index) {
// AppRouter.model(context, RouteName.BUSINESS_DISTRICT_PUBLISH_PAGE);
},
);
}
@override
void dispose() {
DPrint.printf("- - - - - - dispose");
_tabController.dispose();
_bottomBarController.dispose();
UserManager.instance.login?.removeListener(_loginListener);
UserManager.instance.selectTabbar.removeListener(_selectTabbar);
super.dispose();
}
// @override
// bool get wantKeepAlive => true;
}
typedef TabChangeListener = Function(int index);
class BottomBar extends StatefulWidget {
final BottomBarController barController;
final TabChangeListener tabChangeListener;
final TabChangeListener onCenterItemClick;
const BottomBar({
Key key,
this.barController,
this.tabChangeListener,
this.onCenterItemClick,
}) : assert(barController != null, "controller 不能为空");
@override
_BottomBarState createState() => _BottomBarState();
}
class _BottomBarState extends State<BottomBar> {
Color selectedColor = AppColor.themeColor;
Color unSelectedColor = Colors.black;
@override
void initState() {
super.initState();
widget.barController.type.addListener(() {
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return ACEBottomNavigationBar(
barController: widget.barController,
type: widget.barController.type.value,
textUnSelectedColor: unSelectedColor,
textSelectedColor: selectedColor,
iconSelectedColor: selectedColor,
iconUnSelectedColor: unSelectedColor,
protrudingColor: selectedColor,
// items: AppConfig.getShowCommission()
items: !AppConfig.getShowCommission()
? [
NavigationItemBean(
textStr: '特卖',
image: AssetImage("assets/tabbar_sale_normal.png"),
imageSelected: AssetImage("assets/tabbar_sale_selected.png"),
),
NavigationItemBean(
textStr: '发现',
image: AssetImage("assets/tabbar_find_normal.png"),
imageSelected: AssetImage("assets/tabbar_find_selected.png"),
),
NavigationItemBean(
textStr: '购物车',
image: AssetImage("assets/tabbar_cart_normal.png"),
imageSelected: AssetImage("assets/tabbar_cart_selected.png"),
// protrudingIcon: Icons.add
),
NavigationItemBean(
textStr: '我的',
image: AssetImage("assets/tabbar_mine_normal_new.png"),
imageSelected:
AssetImage("assets/tabbar_mine_selected_new.png"),
)
]
: [
NavigationItemBean(
textStr: '特卖',
image: AssetImage("assets/tabbar_sale_normal.png"),
imageSelected: AssetImage("assets/tabbar_sale_selected.png"),
),
NavigationItemBean(
textStr: '发现',
image: AssetImage("assets/tabbar_find_normal.png"),
imageSelected: AssetImage("assets/tabbar_find_selected.png"),
),
NavigationItemBean(
textStr: '店铺',
image: AssetImage("assets/tabbar_shop_normal.png"),
imageSelected: AssetImage("assets/tabbar_shop_selected.png"),
),
NavigationItemBean(
textStr: '购物车',
image: AssetImage("assets/tabbar_cart_normal.png"),
imageSelected: AssetImage("assets/tabbar_cart_selected.png"),
// protrudingIcon: Icons.add
),
NavigationItemBean(
textStr: '我的',
image: AssetImage("assets/tabbar_mine_normal_new.png"),
imageSelected:
AssetImage("assets/tabbar_mine_selected_new.png"),
)
],
onTabChangedListener: (index) {
print(" $index");
if (widget.tabChangeListener != null) {
// if ((index == 4 || index == 5) && !UserManager.instance.haveLogin) {
// AppRouter.pushAndRemoveUntil(context, RouteName.LOGIN);
// return;
// }
if (index == 3) {
UserManager.instance.refreshShoppingCart.value = true;
}
widget.tabChangeListener(index);
}
},
onProtrudingItemClickListener: (int index) {
widget.onCenterItemClick(index);
},
);
}
}
class BottomBarController {
ValueNotifier<ACEBottomNavigationBarType> type =
ValueNotifier(ACEBottomNavigationBarType.normal);
ValueNotifier<int> selectIndex = ValueNotifier(0);
bool selectIndexChange = false;
void dispose() {
type?.dispose();
}
}