|
- import 'dart:io';
-
- import 'package:badges/badges.dart';
- import 'package:dio/dio.dart';
- import 'package:farm_tpf/custom_model/NotificationObjectDTO.dart';
- import 'package:farm_tpf/data/repository/user_repository.dart';
- import 'package:farm_tpf/presentation/screens/account/sc_account.dart';
- import 'package:farm_tpf/presentation/screens/control_device/sc_control_device.dart';
- import 'package:farm_tpf/presentation/screens/notification/sc_notification.dart';
- import 'package:farm_tpf/presentation/screens/notification/update_count_noti_bloc.dart';
- import 'package:farm_tpf/presentation/screens/plot/sc_plot.dart';
- import 'package:farm_tpf/presentation/screens/plot_detail/sc_plot_detail.dart';
- import 'package:farm_tpf/utils/NotificationsBloc.dart';
- import 'package:farm_tpf/utils/const_color.dart';
- import 'package:farm_tpf/utils/const_common.dart';
- import 'package:farm_tpf/utils/const_icons.dart';
- import 'package:farm_tpf/utils/pref.dart';
- import 'package:firebase_messaging/firebase_messaging.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_svg/flutter_svg.dart';
- import 'package:get/get.dart';
-
- import '../../../main.dart';
-
- class TabbarScreen extends StatefulWidget {
- static Route route() {
- return MaterialPageRoute<void>(builder: (_) => TabbarScreen());
- }
-
- @override
- _TabbarScreenState createState() => _TabbarScreenState();
- }
-
- class _TabbarScreenState extends State<TabbarScreen> {
- Stream<LocalNotification> _notificationsStream;
- UserRepository _userRepository = UserRepository();
- final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
- var pref = LocalPref();
- String pushkey = "";
- String currentFullName = "";
- var token;
- var client;
- final changeTabbar = Get.put(TabbarSelected());
- List<TabbarItem> itemsTabbar = [
- TabbarItem(
- icon: AppIcons.icPlot, title: 'Lô trồng', index: TabBarIndex.plot),
- TabbarItem(
- icon: AppIcons.icDevice, title: 'Thiết bị', index: TabBarIndex.device),
- TabbarItem(icon: AppIcons.icQr, title: 'Quét QR', index: TabBarIndex.qr),
- TabbarItem(
- icon: AppIcons.icNotification,
- title: 'Thông báo',
- index: TabBarIndex.notification),
- TabbarItem(
- icon: AppIcons.icPerson, title: 'Cá nhân', index: TabBarIndex.account)
- ];
-
- Future<Null> getSharedPrefs() async {
- token = await pref.getString(DATA_CONST.TOKEN_KEY);
- pushkey = await pref.getString(DATA_CONST.PUSH_KEY);
- currentFullName = await pref.getString(DATA_CONST.CURRENT_FULL_NAME);
- var options = BaseOptions(baseUrl: ConstCommon.baseUrl);
- options.headers["Authorization"] = "Bearer $token";
- client = Dio(options);
- if (Platform.isIOS) {
- _firebaseMessaging
- .requestNotificationPermissions(IosNotificationSettings());
- }
- _firebaseMessaging.configure(
- onMessage: (Map<String, dynamic> message) async {
- print("onMessage--tabbar-: $message");
- try {
- final String type = message['tbCropType'];
- final String contents = message['contents'];
- final String tbCropId = message['tbCropId'];
-
- updateCountNotiBloc.getNotifications((data) {}, (err) {});
- final notification = LocalNotification(type, contents, tbCropId);
- NotificationsBloc.instance.newNotification(notification);
-
- if (contents == "ENV_UPDATE") {
- if (Get.isSnackbarOpen) Get.back();
- Get.snackbar(null, 'Thông số môi trường được cập nhật');
- } else if (contents == "PIC_UPDATE") {
- if (Get.isSnackbarOpen) Get.back();
- Get.snackbar(null, 'Người phụ trách được cập nhật');
- } else {
- //Go home
- }
- } catch (e) {
- print('error');
- print(e);
- }
- },
- onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler,
- onLaunch: (Map<String, dynamic> message) async {
- print("onLaunch: $message");
- Future.delayed(Duration(milliseconds: 500), () {
- updateCountNotiBloc.getNotifications((data) {}, (err) {});
- _notificationNavigateOnFCM(message);
- });
- },
- onResume: (Map<String, dynamic> message) async {
- print("onResume: $message");
- updateCountNotiBloc.getNotifications((data) {}, (err) {});
- _notificationNavigateOnFCM(message);
- },
- );
- _firebaseMessaging.requestNotificationPermissions(
- const IosNotificationSettings(
- sound: true, badge: true, alert: true, provisional: true));
- _firebaseMessaging.onIosSettingsRegistered
- .listen((IosNotificationSettings settings) {
- print("Settings registered: $settings");
- });
- if (pushkey?.isEmpty ?? true) {
- _firebaseMessaging.getToken().then((String token) {
- assert(token != null);
- print("Push Messaging token: $token");
- _userRepository.updateFcmToken(token).then((value) {
- print("send push key successful");
- pref.saveString(DATA_CONST.PUSH_KEY, token);
- });
- // client.put("");
- });
- } else {
- print("Don't need get push key");
- }
-
- if (currentFullName?.isEmpty ?? true) {
- try {
- var currentUser = await _userRepository.getUser();
- pref.saveString(DATA_CONST.CURRENT_FULL_NAME, currentUser.fullName);
- print("fullname: ${currentUser.fullName}");
- } catch (e) {
- print("error: ${e.toString()}");
- }
- }
- }
-
- @override
- void initState() {
- super.initState();
- getSharedPrefs();
- changeTabbar.initValue();
- updateCountNotiBloc.getNotifications((data) {}, (err) {});
- _notificationsStream = NotificationsBloc.instance.notificationsStream;
- _notificationsStream.listen((notification) {
- updateCountNotiBloc.getNotifications((data) {}, (err) {});
- print('Notification: $notification');
- });
- }
-
- _notificationNavigateOnFCM(Map<String, dynamic> message) {
- try {
- final String type = message['tbCropType'];
- final String contents = message['contents'];
- final String tbCropId = message['tbCropId'];
- if (contents == "ENV_UPDATE") {
- Get.to(PlotDetailScreen(
- cropType: int.parse(type),
- cropId: int.parse(tbCropId),
- initialIndex: 0,
- ));
- } else if (contents == "PIC_UPDATE") {
- Get.to(PlotDetailScreen(
- cropType: int.parse(type),
- cropId: int.parse(tbCropId),
- initialIndex: 1,
- ));
- } else {
- //Go home
- }
- } catch (e) {
- //Go home
- }
- Get.to(PlotDetailScreen(
- cropType: 0,
- cropId: 1,
- initialIndex: 0,
- ));
- }
-
- Widget textCountNoti() {
- return StreamBuilder(
- stream: updateCountNotiBloc.actions,
- builder: (context, AsyncSnapshot<dynamic> snapshot) {
- if (snapshot.hasData) {
- var noti = snapshot.data as NotificationObjectDTO;
- var unreadNoti =
- noti.numberUnreadTotal > 99 ? '99+' : '${noti.numberUnreadTotal}';
- return Text(
- '$unreadNoti',
- softWrap: true,
- style: TextStyle(color: Colors.white, fontSize: 10),
- );
- } else {
- return Text(
- 'O',
- softWrap: true,
- style: TextStyle(color: Colors.white, fontSize: 10),
- );
- }
- },
- );
- }
-
- @override
- Widget build(BuildContext context) {
- return Container(
- color: Colors.white,
- child: SafeArea(
- top: false,
- bottom: true,
- child: Scaffold(
- body: GetBuilder<TabbarSelected>(builder: (tabbarSelected) {
- switch (tabbarSelected.index) {
- case TabBarIndex.plot:
- return PlotListScreen();
- break;
- case TabBarIndex.device:
- return ControlDeviceScreen();
- break;
- case TabBarIndex.qr:
- break;
- case TabBarIndex.notification:
- return NotificationScreen();
- break;
- case TabBarIndex.account:
- return AccountScreen();
- break;
- default:
- return PlotListScreen();
- }
- }),
- bottomNavigationBar: Container(
- padding: EdgeInsets.all(4),
- height: 70,
- decoration: BoxDecoration(
- color: Colors.white,
- border: Border(
- top: BorderSide(color: Colors.grey, width: 0.35))),
- child: GetBuilder<TabbarSelected>(builder: (tabbarSelected) {
- return Center(
- child: ListView.builder(
- scrollDirection: Axis.horizontal,
- shrinkWrap: true,
- physics: NeverScrollableScrollPhysics(),
- itemCount: itemsTabbar.length,
- itemBuilder: (context, index) {
- return GestureDetector(
- child: Container(
- width: (Get.width - 20) / 5,
- margin: EdgeInsets.all(1),
- padding: EdgeInsets.all(10),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- index == 3
- ? Badge(
- badgeContent: textCountNoti(),
- shape: BadgeShape.circle,
- badgeColor: Colors.red,
- position: BadgePosition(
- top: -15, start: 10),
- child: SvgPicture.asset(
- itemsTabbar[index].icon,
- width: 24,
- height: 24,
- color: (tabbarSelected.index ==
- itemsTabbar[index]
- .index)
- ? AppColors.YELLOW
- : AppColors.GRAY1,
- ),
- )
- : SvgPicture.asset(
- itemsTabbar[index].icon,
- width: 24,
- height: 24,
- color: (tabbarSelected.index ==
- itemsTabbar[index].index)
- ? AppColors.YELLOW
- : AppColors.GRAY1,
- ),
- Flexible(
- child: Text(
- itemsTabbar[index].title,
- style: TextStyle(
- color: (tabbarSelected.index ==
- itemsTabbar[index].index)
- ? AppColors.DEFAULT
- : Colors.grey,
- fontSize: 9),
- ),
- )
- ],
- )),
- onTap: () {
- //Open scan qr code when tap icon in tabbar
- if (index == 2) {
- changeTabbar.changeIndex(changeTabbar.index);
- scan(context);
- } else {
- changeTabbar
- .changeIndex(itemsTabbar[index].index);
- }
- },
- );
- }),
- );
- })),
- )));
- }
- }
-
- class TabbarSelected extends GetxController {
- TabBarIndex index;
- void initValue() {
- index = TabBarIndex.plot;
- update();
- }
-
- void changeIndex(TabBarIndex changedIndex) {
- index = changedIndex;
- update();
- }
- }
-
- enum TabBarIndex { plot, device, qr, notification, account }
-
- class TabbarItem {
- TabBarIndex index;
- String icon;
- String title;
- TabbarItem({this.icon, this.title, this.index});
- }
|