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.
aku_new_community/lib/pages/tab_navigator.dart

215 lines
6.5 KiB

3 years ago
import 'package:flutter/material.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
3 years ago
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/pages/sign/login/other_login_page.dart';
3 years ago
import 'package:aku_new_community/provider/app_provider.dart';
import 'package:aku_new_community/ui/community/community_views/community_page.dart';
import 'package:aku_new_community/ui/market/market_page.dart';
import 'package:aku_new_community/utils/websocket/web_socket_util.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'home/home_page.dart';
import 'opening_code_page/opening_code_page.dart';
import 'personal/personal_page.dart';
class TabNavigator extends StatefulWidget {
3 years ago
final int? index;
3 years ago
const TabNavigator({
3 years ago
Key? key,
this.index,
}) : super(key: key);
@override
_TabNavigatorState createState() => _TabNavigatorState();
}
class _TabNavigatorState extends State<TabNavigator>
with SingleTickerProviderStateMixin {
4 years ago
TabController? _tabController;
int _currentIndex = 0;
4 years ago
DateTime? _lastPressed;
//页面列表
List<Widget> _pages = <Widget>[];
@override
void initState() {
super.initState();
final appProvider = Provider.of<AppProvider>(Get.context!);
Future.delayed(Duration(milliseconds: 0), () async {
3 years ago
await appProvider.getMyAddress(); //设置默认地址
});
_pages = [
HomePage(),
MarketPage(),
// PropertyPage(),
OpeningCodePage(),
CommunityPage(),
PersonalIndex()
];
3 years ago
_tabController = TabController(
length: _pages.length, vsync: this, initialIndex: widget.index ?? 0);
}
Widget _buildBottomBar(
String title,
String unselected,
String selected,
int index,
) {
return Expanded(
child: GestureDetector(
onTap: () {
if (UserTool.userProvider.isLogin == false) {
//暂时隐去一键登录页
Get.offAll(() => OtherLoginPage());
} else {
_tabController!.animateTo(index, curve: Curves.easeInOutCubic);
_currentIndex = index;
setState(() {});
}
},
child: Material(
color: Colors.transparent,
child: Container(
alignment: Alignment.center,
margin: EdgeInsets.only(top: 48.w),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
_currentIndex != index
? Image.asset(
unselected,
height: 44.w,
width: 44.w,
color: Colors.black38,
)
: Image.asset(
selected,
height: 44.w,
width: 44.w,
),
Text(
title,
style: TextStyle(
color: _currentIndex != index
? Color(0xFFA6ABB1)
: Color(0xFF333333),
fontWeight: _currentIndex == index
? FontWeight.bold
: FontWeight.normal,
fontSize: 22.sp),
)
],
)),
),
),
);
}
@override
Widget build(BuildContext context) {
//底部导航来
List<Widget> _bottomNav = <Widget>[
_buildBottomBar(
'首页',
3 years ago
Assets.home.icShouyeNor.path,
Assets.home.icShouyeSel.path,
0,
),
_buildBottomBar(
'商城',
Assets.home.icShangcNor.path,
Assets.home.icShangcSel.path,
1,
),
Expanded(
child: GestureDetector(
onTap: () {
if (UserTool.userProvider.isLogin == false) {
//暂时隐去一键登录页
Get.offAll(() => OtherLoginPage());
} else {}
_tabController!.animateTo(2, curve: Curves.easeInOutCubic);
_currentIndex = 2;
setState(() {});
3 years ago
},
child: Material(
color: Colors.transparent,
child: Center(
child: Container(
width: 108.w,
height: 108.w,
margin: EdgeInsets.only(top: 26.w),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(54.w),
color: Color(0xFFFDE019),
),
child: Assets.home.icKaimen.image(width: 80.w, height: 80.w),
),
),
),
),
),
_buildBottomBar(
'社区',
3 years ago
Assets.home.icShequNor.path,
Assets.home.icShequSel.path,
3,
),
_buildBottomBar(
'我的',
3 years ago
Assets.home.icWodeNor.path,
Assets.home.icWodeSel.path,
4,
),
];
return BeeScaffold(
body: WillPopScope(
onWillPop: () async {
if (_lastPressed == null ||
DateTime.now().difference(_lastPressed!) > Duration(seconds: 1)) {
//两次点击间隔超过1秒重新计算
_lastPressed = DateTime.now();
BotToast.showText(text: '再点击一次返回退出');
return false;
}
//否则关闭app
WebSocketUtil().closeWebSocket();
return true;
},
child: TabBarView(
children: _pages,
controller: _tabController,
physics: NeverScrollableScrollPhysics(),
),
),
bottomNavi: ConstrainedBox(
constraints: BoxConstraints(maxWidth: 750.w, maxHeight: 146.w),
child: Container(
margin:
EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom),
decoration: BoxDecoration(
image: DecorationImage(
image: Assets.home.imgTabdi, fit: BoxFit.fitWidth),
color: Colors.transparent),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: _bottomNav.cast<Widget>().toList(),
),
),
),
);
}
}