zego_zim 3.0.0
zego_zim: ^3.0.0 copied to clipboard
ZEGO ZIM Flutter SDK is a flutter plugin wrapper based on ZIM native Android / iOS / Mac / Win / Web SDK.
example/lib/main.dart
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:zego_zim_example/topics/login/user_model.dart';
import 'dart:async';
import 'package:window_manager/window_manager.dart';
import 'package:zego_zim_example/topics/splash/splash_page.dart';
import 'package:flutter/material.dart' hide MenuItem;
import 'package:tray_manager/tray_manager.dart';
import 'package:zego_zim_example/app_wrapper.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
if (!kIsWeb && (Platform.isMacOS || Platform.isWindows)) {
await windowManager.ensureInitialized();
await windowManager.setPreventClose(true);
windowManager.addListener(MyWindowListener());
WindowOptions windowOptions = const WindowOptions(
//titleBarStyle: TitleBarStyle.hidden, // 隐藏顶部标题栏
size: Size(1200, 800),
center: true,
);
windowManager.waitUntilReadyToShow(windowOptions, () async {
await windowManager.show();
await windowManager.focus();
});
}
runApp(
ProviderScope(
child: MaterialApp(
title: 'ZIM',
debugShowCheckedModeBanner: false,
home: //GroupSetPage()
SplashPage(),
navigatorObservers: [UserModel.shared().routeObserver],
),
),
);
if (!kIsWeb && (Platform.isMacOS || Platform.isWindows)) {
await trayManager.setIcon(
Platform.isWindows ? 'images/tray_icon.ico' : 'lib/images/tray_icon.png',
);
Menu menu = Menu(
items: [
MenuItem(key: 'show_window', label: 'Show Window'),
MenuItem.separator(),
MenuItem(key: 'exit_app', label: 'Exit App'),
],
);
await trayManager.setContextMenu(menu);
trayManager.addListener(MyTrayListener());
}
}
class MyWindowListener with WindowListener {
@override
void onWindowClose() async {
// 这里如果有资源需要释放可以先处理
// 比如 trayManager.removeListener(...) 之类的
// 直接结束进程
exit(0);
}
}
class MyTrayListener with TrayListener {
/// 左键点击托盘 → 显示/隐藏窗口
@override
void onTrayIconMouseDown() async {
bool isVisible = await windowManager.isVisible();
bool isFocused = await windowManager.isFocused();
if (!isVisible) {
// 窗口不可见 → 显示并获取焦点
await windowManager.show();
await windowManager.focus();
} else if (!isFocused) {
// 窗口可见但未获取焦点 → 聚焦
await windowManager.focus();
} else {}
}
/// 右键松开 → 弹出菜单
@override
void onTrayIconRightMouseUp() {
trayManager.popUpContextMenu();
}
/// 菜单项点击
@override
void onTrayMenuItemClick(MenuItem menuItem) {
if (menuItem.key == 'show_window') {
windowManager.show();
windowManager.focus();
} else if (menuItem.key == 'exit_app') {
exit(0);
}
}
}