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.

366 lines
12 KiB

/*
* ====================================================
* package : pages.tabBar
* author : Created by nansi.
* time : 2019/5/6 1:56 PM
* remark :
* ====================================================
*/
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:oktoast/oktoast.dart';
import 'package:recook/constants/config.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/constants/styles.dart';
import 'package:recook/manager/user_manager.dart';
import 'package:recook/pages/business/release_material_page.dart';
import 'package:recook/pages/home/home_page.dart';
import 'package:recook/pages/home/widget/aku_college_page.dart';
import 'package:recook/pages/home/widget/goods_hot_list_page.dart';
import 'package:recook/pages/live/functions/live_function.dart';
import 'package:recook/pages/live/pages/discovery_page.dart';
import 'package:recook/pages/live/video/add_video_page.dart';
import 'package:recook/pages/live/widget/live_fab_location.dart';
import 'package:recook/pages/shopping_cart/shopping_cart_page.dart';
import 'package:recook/pages/tabBar/rui_code_listener.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/custom_route.dart';
import 'package:recook/utils/print_util.dart';
import 'package:recook/utils/versionInfo/version_tool.dart';
import 'package:recook/widgets/cache_tab_bar_view.dart';
import 'package:recook/widgets/custom_image_button.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: 5, vsync: this);
_bottomBarController = BottomBarController();
_tabController.addListener(_tabListener);
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;
}
_tabListener() {
setState(() {});
}
_showBottomModalSheet() {
BuildContext fatherContext = context;
showModalBottomSheet(
context: context,
builder: (context) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius:
BorderRadius.vertical(top: Radius.circular(rSize(15))),
),
child: Builder(builder: (context) {
verticalButton(
String title,
String path, {
VoidCallback onTap,
}) {
return CustomImageButton(
onPressed: onTap,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(height: rSize(20)),
Image.asset(
path,
height: rSize(44),
width: rSize(44),
),
SizedBox(height: rSize(10)),
Text(
title,
style: TextStyle(
fontSize: rSP(14),
color: Color(0xFF666666),
),
),
SizedBox(height: rSize(20)),
],
),
);
}
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
verticalButton(
'直播',
R.ASSETS_LIVE_ADD_STREAM_PNG,
onTap: () {
checkStartLive();
},
),
verticalButton(
'视频',
R.ASSETS_LIVE_ADD_VIDEO_PNG,
onTap: () => CRoute.pushReplace(context, AddVideoPage()),
),
verticalButton(
'图文',
R.ASSETS_LIVE_ADD_IMAGE_PNG,
onTap: () =>
CRoute.pushReplace(context, ReleaseMaterialPage()),
),
],
),
CustomImageButton(
height: rSize(66),
onPressed: () => Navigator.pop(context),
child: Text('取消',
style: TextStyle(
color: Color(0xFF333333),
fontSize: rSP(14),
)),
),
],
);
}),
);
},
);
}
@override
Widget build(BuildContext context) {
if (_context == null) {
_context = context;
}
return Scaffold(
floatingActionButton: _tabController.index == 2
? Container(
padding: EdgeInsets.all(rSize(4)),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(24),
),
child: CustomImageButton(
padding: EdgeInsets.zero,
onPressed: () {
if (!UserManager.instance.haveLogin) {
showToast('未登陆,请先登陆');
CRoute.push(context, UserPage());
} else {
_showBottomModalSheet();
}
},
child: Container(
height: rSize(40),
width: rSize(40),
child: Image.asset(R.ASSETS_LIVE_RECOOK_FAB_PNG),
),
),
)
: null,
floatingActionButtonLocation: FabLocation.recook,
body: CacheTabBarView(
physics: NeverScrollableScrollPhysics(),
needAnimation: false,
controller: _tabController,
children: <Widget>[
HomePage(
tabController: _tabController,
),
//GoodsHotListPage(),
AkuCollegePage(),//------akkuxuyaun
DiscoveryPage(),
// BusinessPage(),
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 == 1) {
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?.removeListener(_tabListener);
_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: [
NavigationItemBean(
textStr: '特推',
image: AssetImage("assets/tabbar_sale_normal.png"),
imageSelected: AssetImage("assets/tabbar_sale_selected.png"),
),
NavigationItemBean(
textStr: '排行榜',
image: AssetImage("assets/tabbar_shop_normal.png"),
imageSelected: AssetImage("assets/tabbar_shop_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"),
)
],
onTabChangedListener: (index) {
RUICodeListener(context).clipboardListener();
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();
}
}