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.
 
 
 
 
 

151 lines
4.6 KiB

import 'dart:io';
import 'package:dating_touchme_app/config/env_config.dart';
import 'package:dating_touchme_app/controller/global.dart';
import 'package:dating_touchme_app/controller/overlay_controller.dart';
import 'package:dating_touchme_app/im/im_manager.dart';
import 'package:dating_touchme_app/network/network_service.dart';
import 'package:dating_touchme_app/pages/main/main_page.dart';
import 'package:dating_touchme_app/pages/mine/login_page.dart';
import 'package:dating_touchme_app/rtc/rtc_manager.dart';
import 'package:dating_touchme_app/widget/live/draggable_overlay_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:fluwx/fluwx.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化GetStorage
await GetStorage.init();
// 设置环境配置 - 根据是否为release模式
EnvConfig.setEnvironment(Environment.dev);
await RTCManager.instance.initialize(appId: '4c2ea9dcb4c5440593a418df0fdd512d');
await IMManager.instance.initialize('1165251016193374#demo');
// 初始化全局依赖
final networkService = NetworkService();
Get.put(networkService);
Get.put(networkService.userApi);
Get.put(networkService.homeApi);
// 初始化全局 Overlay 控制器
Get.put(OverlayController());
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.dark,
statusBarBrightness: Brightness.light,
systemNavigationBarColor: Colors.white,
systemNavigationBarIconBrightness: Brightness.dark,
),
);
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
if (Platform.isIOS) {
SystemChrome.setEnabledSystemUIMode(
SystemUiMode.manual,
overlays: [SystemUiOverlay.top],
);
}
runApp(
GetMaterialApp(
locale: Get.locale, // 使用GetX的locale
supportedLocales: const [Locale('zh', 'CN')],
/// 国际化配置 代理
localizationsDelegates: const [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate, // iOS
],
theme: ThemeData(
scaffoldBackgroundColor: Colors.white,
// 设置导航栏样式
appBarTheme: AppBarTheme(
systemOverlayStyle: SystemUiOverlayStyle(
systemNavigationBarColor: Colors.white,
systemNavigationBarIconBrightness: Brightness.light,
),
),
),
builder: (context, child) {
final smartDialogBuilder = FlutterSmartDialog.init();
return smartDialogBuilder(
context,
Stack(
children: [
child ?? const SizedBox(),
// 全局 overlay 组件
Obx(() {
final overlayController = Get.find<OverlayController>();
return overlayController.showOverlay.value
? DraggableOverlayWidget(
size: 60,
backgroundColor: const Color.fromRGBO(0, 0, 0, 0.6),
onClose: () {
overlayController.hide();
},
)
: const SizedBox.shrink();
}),
],
),
);
},
home: MyApp(),
),
);
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Fluwx fluwx = Fluwx();
@override
void initState() {
super.initState();
_initFluwx();
}
_initFluwx() async {
await fluwx.registerApi(
appId: 'wx57624b8918fdd95c',
doOnAndroid: true,
doOnIOS: true,
universalLink: 'https://your.univerallink.com/link/',
);
await fluwx.isWeChatInstalled;
}
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
ScreenUtil.init(context, designSize: const Size(375, 812));
// 判断token是否为空
final storage = GetStorage();
final userId = storage.read<String>('userId');
// 如果token不为空,显示主页;如果token为空,显示登录页面
if (userId != null && userId.isNotEmpty) {
GlobalData().userId = userId;
return MainPage();
} else {
return LoginPage();
}
}
}