home_page.dart 11.1 KB
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/app.dart';
import 'package:one_key/pages/message/message_page.dart';
import 'package:one_key/pages/my/my_page.dart';
import 'package:one_key/pages/notebook/notebook_page.dart';
import 'package:one_key/provider/contact_model.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/provider/message_model.dart';
import 'package:one_key/provider/my_model.dart';
import 'package:one_key/provider/notebook_model.dart';
import 'package:one_key/provider/tools.dart';
import 'package:one_key/provider/update_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/log_util.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tpns_flutter_plugin/tpns_flutter_plugin.dart';

class HomePage extends StatefulWidget{

  final int initialIndex;//初始tab

  HomePage({this.initialIndex=1});

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return new HomePageState();
  }
}

class HomePageState extends State<HomePage> with WidgetsBindingObserver{


  List<Widget> pages = List<Widget>();
  int _currIndex = 1;
  Color _activeColor = MyColours.color_2bb5b7;
  Color _defaultColor = MyColours.color_bfbfbf;

  Timer timer;

  int xgCount=1;//注册信鸽次数,最多5次

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    LogUtil.v("home_initState");
    WidgetsBinding.instance.addObserver(this);
    _currIndex=widget.initialIndex;
    pages
      ..add(ChangeNotifierProvider<MessageModel>(
        create: (_)=>MessageModel(),
        child: MessagePage(),
      ))
      ..add(ChangeNotifierProvider<NoteBookModel>(
        create: (_)=>NoteBookModel(),
        child: NoteBookPage(),
      ))
      ..add(ChangeNotifierProvider<MyModel>(
        create: (_)=>MyModel(),
        child: MyPage(),
      ));
    WidgetsBinding.instance.addPostFrameCallback((_){
      if(widget.initialIndex==0)return;
      if(Platform.isAndroid){
        _getIntent();
      }
      Future.delayed(Duration(milliseconds: 300),(){
        initPlatformState();
      });
      Future.delayed(Duration(milliseconds: 30000),(){
        ContactModel.getInstance().uploadLocalContact(context);
      });
      getUntreatedMessage();
      timer=Timer.periodic(Duration(minutes: 3), (_){
        getUntreatedMessage();
      });
      UpdateModel updateModel=new UpdateModel();
      updateModel.checkUpdate(context,showToast: false);
    });
  }

  _getIntent() async {
    Map notifyParam=await Tools().getIntent();
    LogUtil.v(notifyParam.toString());
    if(notifyParam!=null&&notifyParam.isNotEmpty){
      switch(notifyParam["messageType"]){
        case "10":
          NavigatorUtil.goNotebookDetailPage(context, notifyParam['rid'],fromNotify: true);
          break;
        case "11":
          NavigatorUtil.goHandleOnlinePage(context, notifyParam["rid"], notifyParam['mid'],fromNotify: true);
          break;
      }
    }
  }

  //初始化信鸽推送
  initPlatformState(){

    /// 开启DEBUG
    XgFlutterPlugin().setEnableDebug(false);

    /// 添加回调事件
    XgFlutterPlugin().addEventHandler(
      onRegisteredDeviceToken: (String msg) async {
        print("flutter onRegisteredDeviceToken: $msg");
      },
      onRegisteredDone: (String msg) async {
        String token="";
        try{
          token=await XgFlutterPlugin.xgToken;
        }catch(e){
          LogUtil.v("注册失败:${e.toString()}");
//          Utils.showToast("注册失败:${e.toString()}");
        }
        if(token==null||token.isEmpty){
          LogUtil.v("注册失败:${xgCount.toString()}");
//          Utils.showToast("注册失败:${xgCount.toString()}");
          registerPush();
        }else{
          LogUtil.v("注册成功:$token");
//          Utils.showToast("注册成功:$token");
          userTokenInit(token);
          XgFlutterPlugin().setAppBadge(0);
        }
      },
      unRegistered: (String msg) async {
        print("flutter unRegistered: $msg");
      },
      onReceiveNotificationResponse: (Map<String, dynamic> msg) async {
        LogUtil.v("flutter onReceiveNotificationResponse $msg");
      },
      onReceiveMessage: (Map<String, dynamic> msg) async {
        print("flutter onReceiveMessage $msg");
      },
      xgPushDidSetBadge: (String msg) async {
        print("flutter xgPushDidSetBadge: $msg");
        /// 在此可设置应用角标
        XgFlutterPlugin().setAppBadge(0);
      },
      xgPushDidBindWithIdentifier: (String msg) async {
        print("flutter xgPushDidBindWithIdentifier: $msg");
      },
      xgPushDidUnbindWithIdentifier: (String msg) async {
        print("flutter xgPushDidUnbindWithIdentifier: $msg");
      },
      xgPushDidUpdatedBindedIdentifier: (String msg) async {
        print("flutter xgPushDidUpdatedBindedIdentifier: $msg");
      },
      xgPushDidClearAllIdentifiers: (String msg) async {
        print("flutter xgPushDidClearAllIdentifiers: $msg");
      },
      xgPushClickAction: (Map<String, dynamic> msg) async {
        print("flutter xgPushClickAction ${msg['custom']}");
        if(Platform.isIOS&&msg!=null&&msg['custom']!=null){
          Map<String,dynamic> custom=jsonDecode(msg['custom'].toString());
          switch(custom["messageType"].toString()){
            case "10":
              NavigatorUtil.goNotebookDetailPage(context, custom['rid'].toString(),fromNotify: true);
              break;
            case "11":
              NavigatorUtil.goHandleOnlinePage(context, custom["rid"].toString(), custom['mid'],fromNotify: true);
              break;
          }
        }
      },
    );
    registerPush();
  }

  //注册信鸽
  registerPush() async {
    if(xgCount>5)return;
    if(Platform.isAndroid){
      /// 设置OPPO AppKey 和 AppSecret
      if(await XgFlutterPlugin().getXgAndroidApi().isOppoRom()){
    XgFlutterPlugin().getXgAndroidApi().enableOppoNotification();
    XgFlutterPlugin().getXgAndroidApi().setOppoPushAppId(appId:"30260281");
    XgFlutterPlugin().getXgAndroidApi().setOppoPushAppKey(appKey: "9b7e372f93794593953f93f118619570");
    }
    // 设置小米 AppID 和 AppKey。
    if(await XgFlutterPlugin().getXgAndroidApi().isMiuiRom()){
    XgFlutterPlugin().getXgAndroidApi().setMiPushAppId(appId:"2882303761518639456");
    XgFlutterPlugin().getXgAndroidApi().setMiPushAppKey(appKey: "5231863961456");
    }
    XgFlutterPlugin().getXgAndroidApi().enableOtherPush();
    }
    /// 启动TPNS服务
    LogUtil.v("register:${xgCount.toString()}");
    XgFlutterPlugin().startXg("1600012876", "INUIMFK21WGH");
    xgCount++;
  }


  //初始化推送token
  userTokenInit(String token){
    UserModel userModel=Provider.of<UserModel>(context,listen: false);
    userModel.token=token;
    Map<String,String> params={
      "sid":userModel.user.sellerid,
      "account":userModel.user.account,
      "user_token":Platform.isAndroid?"Android_$token":"Ios_$token"
    };
    userModel.userTokenInit(context, params);
  }

  //获取未处理在线预订消息
  getUntreatedMessage(){
    UserModel userModel=Provider.of<UserModel>(context,listen: false);
    Map<String,String> params={
      "sid":userModel.user.sellerid,
      "type_id":"10",//10 在线预订
      "status":"0",//未处理
      "offset":"0",
      "limit":"100",
    };
    MessageDialogModel messageModel=Provider.of<MessageDialogModel>(context,listen: false);
    messageModel.getUntreatedMsg(context, params);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    // TODO: implement didChangeAppLifecycleState
    super.didChangeAppLifecycleState(state);
    switch(state){
      case AppLifecycleState.resumed://应用前台可见
      getUntreatedMessage();
        break;
    }
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new Scaffold(
      bottomNavigationBar: BottomNavigationBar(
        iconSize: ScreenUtil().setWidth(70),
        unselectedFontSize: ScreenUtil().setSp(22),
        selectedFontSize: ScreenUtil().setSp(22),
        backgroundColor: MyColours.color_ffffff,
        items: [
          BottomNavigationBarItem(
            icon: Image(
              image: AssetImage("assets/message_default.png"),
              width: ScreenUtil().setWidth(70),
              height: ScreenUtil().setWidth(70),
            ),
            activeIcon: Image(
              image: AssetImage("assets/message_selected.png"),
              width: ScreenUtil().setWidth(70),
              height: ScreenUtil().setWidth(70),
            ),
            title: Text(
              "消息中心",
              style: TextStyle(
                  color: _currIndex == 0 ? _activeColor : _defaultColor,fontSize: ScreenUtil().setSp(22)),
            ),
          ),
          BottomNavigationBarItem(
            icon: Image(
              image: AssetImage("assets/notebook_default.png"),
              width: ScreenUtil().setWidth(70),
              height: ScreenUtil().setWidth(70),
            ),
            activeIcon: Image(
              image: AssetImage("assets/notebook_selected.png"),
              width: ScreenUtil().setWidth(70),
              height: ScreenUtil().setWidth(70),
            ),
            title: Text(
              "预定本",
              style: TextStyle(
                  color: _currIndex == 1 ? _activeColor : _defaultColor,fontSize: ScreenUtil().setSp(22)),
            ),
          ),
          BottomNavigationBarItem(
            icon: Image(
              image: AssetImage("assets/my_default.png"),
              width: ScreenUtil().setWidth(70),
              height: ScreenUtil().setWidth(70),
            ),
            activeIcon: Image(
              image: AssetImage("assets/my_selected.png"),
              width: ScreenUtil().setWidth(70),
              height: ScreenUtil().setWidth(70),
            ),
            title: Text(
              "我的",
              style: TextStyle(
                  color: _currIndex == 2 ? _activeColor : _defaultColor,fontSize: ScreenUtil().setSp(22)),
            ),
          ),
        ],
        type: BottomNavigationBarType.fixed,
        currentIndex: _currIndex,
        onTap: (int index) {
          if (_currIndex != index) {
            setState(() {
              _currIndex = index;
            });
            if(_currIndex==2){
              Utils.changeStatusColor(color: MyColours.color_2bb5b7);
            }else{
              Utils.changeStatusColor(color: MyColours.color_ffffff);
            }
          }
        },
      ),
      body: SafeArea(child: pages[_currIndex]),
    );
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    LogUtil.v("home_dispose");
    if(timer!=null){
      timer.cancel();
    }
    XgFlutterPlugin().stopXg();
    WidgetsBinding.instance.removeObserver(this);

  }
}