基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

#精品长文创作季#

在结束了长达半个多月的爆肝开发,我的新项目flutter3-winchat终于完结了。

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

目前已经完成的功能有聊天部分、通讯录、收藏、朋友圈、小视频及我的几个大页面模块。

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

项目整体分为左侧功能按钮区、侧边栏、右侧内容区三大模块。

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

使用技术

  • bitsdojo_window: ^0.1.6 窗口管理器
  • system_tray: ^2.0.3 托盘图标
  • get: ^4.6.6 路由+状态管理
  • photo_view: ^0.14.0
  • url_launcher: ^6.2.4
  • get_storage: ^2.1.1
  • media_kit: ^1.1.10+1 短视频插件
  • media_kit_video: ^1.2.4
  • media_kit_libs_video: ^1.0.4
  • file_picker: ^6.1.1

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

在开发的过程中,的确 遇到了不少问题,不过最后都解决了。

通过这个项目的开发,旨在探索flutter3在桌面端开发的更多可能性,让更多的flutter开发爱好者参与其中,推动flutter跨端开发。

项目结构

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

预览图

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

主入口main.dart

/// flutter主窗口

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:media_kit/media_kit.dart';
import 'package:system_tray/system_tray.dart';

import 'utils/index.dart';

// 引入公共样式
import 'styles/index.dart';

// 引入公共布局模板
import 'layouts/index.dart';

// 引入路由配置
import 'router/index.dart';

void main() async {
  // 初始化get_storage存储类
  await GetStorage.init();

  // 初始化media_kit视频套件
  WidgetsFlutterBinding.ensureInitialized();
  MediaKit.ensureInitialized();

  initSystemTray();

  runApp(const MyApp());

  // 初始化bitsdojo_window窗口
  doWhenWindowReady(() {
    appWindow.size = const Size(850, 620);
    appWindow.minSize = const Size(700, 500);
    appWindow.alignment = Alignment.center;
    appWindow.title = 'Flutter3-WinChat';
    appWindow.show();
  });
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'FLUTTER3 WINCHAT',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primaryColor: FStyle.primaryColor,
        useMaterial3: true,
        // 修正windows端字体粗细不一致
        fontFamily: Platform.isWindows ? 'Microsoft YaHei' : null,
      ),
      home: const Layout(),
      // 初始路由
      initialRoute: Utils.isLogin() ? '/index' :'/login',
      // 路由页面
      getPages: routes,
      onInit: () {},
      onReady: () {},
    );
  }
}

// 创建系统托盘图标
Future<void> initSystemTray() async {
  String trayIco = 'assets/images/tray.ico';
  SystemTray systemTray = SystemTray();

  // 初始化系统托盘
  await systemTray.initSystemTray(
    title: 'system-tray',
    iconPath: trayIco,
  );

  // 右键菜单
  final Menu menu = Menu();
  await menu.buildFrom([
    MenuItemLabel(label: 'show', onClicked: (menuItem) => appWindow.show()),
    MenuItemLabel(label: 'hide', onClicked: (menuItem) => appWindow.hide()),
    MenuItemLabel(label: 'close', onClicked: (menuItem) => appWindow.close()),
  ]);
  await systemTray.setContextMenu(menu);

  // 右键事件
  systemTray.registerSystemTrayEventHandler((eventName) {
    debugPrint('eventName: $eventName');
    if (eventName == kSystemTrayEventClick) {
      Platform.isWindows ? appWindow.show() : systemTray.popUpContextMenu();
    } else if (eventName == kSystemTrayEventRightClick) {
      Platform.isWindows ? systemTray.popUpContextMenu() : appWindow.show();
    }
  });
}

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

聊天页面采用全新的UI设计,表情弹窗/选择弹窗采用定位方式。

语音支持按住说话/左滑撤销/右滑转文字全屏功能。

基于Flutter3.x桌面端仿微信exe实例|flutter3-winchat聊天

OK,今天的分享就到这里吧,感谢大家的阅读与支持。

© 版权声明

相关文章

26 条评论

  • 头像
    尉然 读者

    厉害了

    无记录
    回复
  • 头像
    Chic-Lifestyle 读者

    加油

    无记录
    回复
  • 头像
    半边桐 投稿者

    多谢

    无记录
    回复
  • 头像
    动漫推荐官 读者

    半个月有如此成效,牛

    无记录
    回复
  • 头像
    小猫突然出现 读者

    感谢分享

    无记录
    回复
  • 头像
    郑钱钱的小笔记 读者

    打包多大

    无记录
    回复
  • 头像
    我叫起床气大王 投稿者

    不大,几十M

    无记录
    回复
  • 头像
    读者

    大能,能,能~

    无记录
    回复
  • 头像
    读者

    哈哈哈

    无记录
    回复
  • 头像
    屁猪牛仔 读者

    不服不行

    无记录
    回复
  • 头像
    鳄鱼 读者

    疯狂比心

    无记录
    回复
  • 头像
    财神爷的孩子呀 投稿者

    可以开源吗

    无记录
    回复
  • 头像
    闪电小猪mo 投稿者

    厉害厉害

    无记录
    回复
  • 头像
    老人家人老 读者

    非常感谢

    无记录
    回复
  • 头像
    唉只有睡觉不困 投稿者

    性能怎么样?尤其做视频处理方面

    无记录
    回复
  • 头像
    悦灵儿 读者

    可以开发成App吗?能不能成为(嵌入)App项目的一部分?

    无记录
    回复
  • 头像
    魔法口袋里的秘密 投稿者

    https://m.toutiao.com/is/i2vv9Eao/ – flutter3+dart3+materialUI仿微信UI界面聊天实例(wins版演示) – 今日头条

    无记录
    回复
  • 头像
    小小书生 读者

    textfield硬性bug还没修复呢

    无记录
    回复
  • 头像
    纳西索斯的梦 投稿者

    是呢

    无记录
    回复
  • 头像
    沙培俊 读者

    厉害

    无记录
    回复
  • 头像
    丧甜心 读者

    感谢

    无记录
    回复
  • 头像
    东方嘉盛你 读者

    高仿

    无记录
    回复
  • 头像
    sunniton 读者

    这个什么场景用,大家都有微信了

    无记录
    回复
  • 头像
    读者

    看需求呢

    无记录
    回复
  • 头像
    佑荌 读者

    绝了绝了

    无记录
    回复
  • 头像
    雷虎 读者

    优秀

    无记录
    回复