main.dart 4.0 KB
import 'package:cp_offline_manage/common/langs/languages.dart';
import 'package:cp_offline_manage/router/route_config.dart';
import 'package:cp_offline_manage/utils/log.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:syncfusion_localizations/syncfusion_localizations.dart';
import 'common/colors.dart';
import 'common/global.dart';
import 'common/services/global_config.dart';
import 'component/my_waterdrop_header.dart';
import 'package:syncfusion_flutter_datepicker/datepicker.dart';

Future<void> main() async {
  await initServices();
  runApp(const MyApp());
  //
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
  if (GetPlatform.isAndroid) {
    // 设置android状态栏为透明的沉浸。
    SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(statusBarColor: Colors.transparent),
    );
  }
}

Future<void> initServices() async {
  LogUtils.i('starting services ...');
  await Global.init();
  await Get.putAsync(() => GlobalConfigService().init());
  LogUtils.i('All services started...');
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return RefreshConfiguration(
        headerBuilder: () => const MyWaterDropHeader(
            waterDropColor: ColorConfig.themeColor
        ),
        footerBuilder:  () => const ClassicFooter(
          loadingText: '加载中',
          idleText: '上拉加载',
          noDataText: '没有更多数据了',
          failedText: '加载失败',
        ),
        headerTriggerDistance: 80.0,
        springDescription: const SpringDescription(stiffness: 170, damping: 16, mass: 1.9),
        maxOverScrollExtent :100, //头部最大可以拖动的范围,如果发生冲出视图范围区域,请设置这个属性
        enableScrollWhenRefreshCompleted: true,
        enableLoadingWhenFailed : true,
        hideFooterWhenNotFull: true,
        enableBallisticLoad: true,
        child: GetMaterialApp(
          title: '商城',
          debugShowCheckedModeBanner: false,
          theme: ThemeData(
              primaryColor: ColorConfig.themeColor,
              primarySwatch: Colors.red
          ),
          initialRoute: RouteConfig.splashPageKey,
          getPages: RouteConfig.getPages,
          defaultTransition: Transition.rightToLeft,
          transitionDuration: const Duration(milliseconds: 250),
          translations: Languages(),
          localizationsDelegates: const [
            RefreshLocalizations.delegate,
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
            GlobalCupertinoLocalizations.delegate,
            SfGlobalLocalizations.delegate
          ],
          // 我的翻译
          locale: Get.find<GlobalConfigService>().language["locale"],
          supportedLocales: const [
            Locale('zh'),
            Locale('en'),
          ],
          // 将会按照指定的语言翻译
          fallbackLocale: const Locale('zh'),
          // FlutterEasyLoading 初始化一个 loading。
          builder: (context, child) => FlutterEasyLoading(
            child: Scaffold(
              body: GestureDetector(
                onTap: () {
                  // 点击空白处,键盘消失。
                  FocusScopeNode currentFocus = FocusScope.of(context);
                  if (!currentFocus.hasPrimaryFocus &&
                      currentFocus.focusedChild != null) {
                    FocusManager.instance.primaryFocus?.unfocus();
                  }
                },
                child: child,
              ),
            ),
          ),
        )
    );
  }
}