main.dart 6.79 KB
import 'dart:io';

import 'package:amap_map_fluttify/amap_map_fluttify.dart';
import 'package:common_utils/common_utils.dart';
import 'package:dio/dio.dart';
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart' hide Router;
import 'package:flutter_bugly/flutter_bugly.dart';
import 'package:flutter_easyrefresh/ball_pulse_footer.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_easyrefresh/material_header.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:fluwx/fluwx.dart';
import 'package:one_key/pages/detail/handle_online_page.dart';
import 'package:one_key/pages/home/home_page.dart';
import 'package:one_key/provider/base_info_provider.dart';
import 'package:one_key/provider/coupon_provider.dart';
import 'package:one_key/provider/create_store_model.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:one_key/provider/message_model.dart';
import 'package:one_key/provider/notebook_detail_model.dart';
import 'package:one_key/provider/online_check_edit_provider.dart';
import 'package:one_key/provider/other_login_provider.dart';
import 'package:one_key/provider/remark_manager_model.dart';
import 'package:one_key/provider/tools.dart';
import 'package:one_key/provider/upload_img_provider.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';
import 'package:tpns_flutter_plugin/tpns_flutter_plugin.dart';

import 'app.dart';
import 'net/dio_util.dart';
import 'net/http_url.dart';
import 'pages/login/login_page.dart';
import 'provider/order_food_provider.dart';
import 'provider/user_model.dart';
import 'route/navigate_service.dart';
import 'route/routes.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';

Future<bool> _requestPermissions() async {
  Map<Permission, PermissionStatus> permissions = await [
    Permission.photos,
    Permission.location,
    Permission.camera,
    Permission.contacts,
    Permission.storage,
    Permission.notification
  ].request();

  List<bool> results = permissions.values.toList().map((status) {
    return status == PermissionStatus.granted;
  }).toList();
  print(results.toString());
}

Future<void> main() async {
  FlutterBugly.postCatchedException(() async {
    WidgetsFlutterBinding.ensureInitialized();
    FluroRouter router = FluroRouter();
    Routes.configureRoutes(router);
    App.router = router;
    App.setupLocator();
    LogUtil.init(isDebug: true, tag: 'ONE_KEY');
    Provider.debugCheckInvalidValueType = null;
    await initializeDateFormatting();
    // _requestPermissions();
    Utils.changeStatusColor();
    SystemChrome.setPreferredOrientations(
            [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown])
        .then((_) {
      runApp(MultiProvider(
        providers: [
          ChangeNotifierProvider<MessageModel>(
            create: (_) => MessageModel(),
          ),
          ChangeNotifierProvider<UserModel>(
            create: (_) => UserModel(),
          ),
          ChangeNotifierProvider<MessageDialogModel>(
            create: (_) => MessageDialogModel()..init(),
          ),
          ChangeNotifierProvider<OnlineCheckEditProvider>(
            create: (_) => OnlineCheckEditProvider(),
          ),
          ChangeNotifierProvider<OrderFoodProvider>(
            create: (_) => OrderFoodProvider(),
          ),
          ChangeNotifierProvider<NotebookDetailModel>(
            create: (_) => NotebookDetailModel(),
          ),
          ChangeNotifierProvider<CouponProvider>(
            create: (_) => CouponProvider(),
          ),
          ChangeNotifierProvider<UploadImageProvider>(
            create: (_) => UploadImageProvider(),
          ),
          ChangeNotifierProvider<CreateStoreModel>(
            create: (_) => CreateStoreModel(),
          ),
          ChangeNotifierProvider<RemarkManagerModel>(
            create: (_) => RemarkManagerModel(),
          ),
        ],
        child: MyApp(),
      ));
    });
    await App.initSp();
    await AmapService.instance.init(
        iosKey: 'e373581528f8fd901c01dfbda236159e',
        androidKey: 'dbced781d0acd36184d5b4b54da7188d');

    /// 如果你觉得引擎的日志太多, 可以关闭Fluttify引擎的日志
    await enableFluttifyLog(false); // 关闭log
    FlutterBugly.init(androidAppId: "f71a313f42", iOSAppId: "3089e4587e");
  });
}

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return new MyAppState();
  }
}

class MyAppState extends State<MyApp> {
  int xgCount = 1; //注册信鸽次数,最多5次
  bool isLogin = false;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    initDio();
    _initFluwx();
    _isLogin();
    Utils.changeStatusColor();
    // 设置EasyRefresh的默认样式
    EasyRefresh.defaultHeader = MaterialHeader();
    EasyRefresh.defaultFooter = BallPulseFooter();
  }

  //初始化微信SDK
  _initFluwx() async {
    await registerWxApi(
        appId: "wx85aa3cdd0f791e65",
        doOnAndroid: true,
        doOnIOS: true,
        universalLink: "https://xt04.colorcun.com/link/OneKey/");
    var result = await isWeChatInstalled;
    if (result != null && result) {
      App.isInstallWx = true;
    } else {
      App.isInstallWx = false;
    }
    LogUtil.v("is installed $result");
  }

//初始化dio
  initDio() {
    DioUtil.openDebug();
    BaseOptions options = DioUtil.getDefOptions();
    options.baseUrl = HttpUrl.server_address;
    HttpConfig config = new HttpConfig(
        options: options, status: "ret", code: "ret", msg: "msg", data: "data");
    DioUtil().setConfig(config);
  }

  //判断是否登录
  bool _isLogin() {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    userModel.initUser();
    isLogin = App.sp.getBool("isLogin") ?? false;
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: '一键订',
      navigatorKey: App.getIt<NavigateService>().key,
      theme: ThemeData(
          brightness: Brightness.light,
          primaryColor: Colors.white,
          splashColor: Colors.transparent,
          textTheme:
              TextTheme(overline: TextStyle(decoration: TextDecoration.none)),
          tooltipTheme: TooltipThemeData(verticalOffset: -100000)),
      home: isLogin
          ? HomePage(initialIndex: 1)
          : ChangeNotifierProvider<OtherLoginProvider>(
              create: (_) => OtherLoginProvider(), child: LoginPage()),
      onGenerateRoute: App.router.generator,
    );
  }
}