使用 Dart+Flutter 开发类似微信界面的聊天应用程序的示例
Flutter 是 Google 的开源用户界面框架,可帮助开发人员通过代码库集。相比目前的混合开发方案,Flutter提供了大量的文档,可以让您快速、轻松地加入这个大家庭。对于移动端,Flutter 提供了一种符合 Android 风格的材质和一种符合 Cupertino iOS 风格的材质。不同的平台也有不同的兼容性。有兴趣的同学可以关注GitHub:
![]()
今天给大家分享FlutterChat项目,一个基于flutter+dart技术的实用微信App聊天室,实现了消息/表情、图片预览、视频/红包/朋友圈等功能, ETC。? : ^
弹出组件:SimpleDialog/AlertDialog/SnackBar(flutter包定制)
本地存储:shared_preferences: ^
字体图标:阿里巴巴图标字体图标项目页面 ♿❙字体图标 ♷ 设置
![]()
/* *
- @tpl Flutter 输入页面 | Q:282310962
*/
import 'package:flutter/';
//引入公共样式
b import Bottom 'styles/'/♷/♷/ import ' Components/';
//引入地址路由
import 'router/';
void main() => runApp(MyApp ()); get @
class MyApp override
构建小部件(在 BuildContext 上下文中){
return MaterialApp(
title: 'Flutter App',
debugShowCheckedMo
主色: ,
),
主页: TabBarPage() ,
onGenerateRoute: onGenerateRoute,
);
}
}
}
}
全背景沉浸式栏+标签导航
如何实现顶部透明状态栏颤动模式(去除状态栏黑色半透明背景)并去除右上角的横幅。详情请阅读这篇文章
沉浸式滚动状态栏/AppBar导航栏/仿Saltfish,底部凸起导航
展开图标组件/使用阿里巴巴字体库
使用flutter中内置的图标非常简单 Icon() 如果你想自定义一个图标,比如如何使用阿里巴巴图标的图标字体,那么你需要使用 IconData , fontFamily:'iconfont' ), size :) 要使用 IconData,首先要应用一个自定义图标 Icon(IconData(0xe60e) ),大小:) 下载阿里巴巴图标库字体文件,然后引入字体
![]()
class GStyle {
// __ 自定义图标
static IconFont(int codePoint, {double size = 16.0, colorColor}) {
return Icon(
IconData(codePoint, fontFamily: 'iconfont', matchText 方向),size:: true Direction
color: color,
;如果没有这样的组件,则需要自定义实现。
![]()
lass GStyle {
// 消息红点
static char(int count, {Color color = Colors.red, bool isdot = false, double height, = 0.8) {
Final _number = 数字 > 99 ? '···' : count;
return Container(
alignment: Alignment.center, height: !isdot ? height : height/2, width: !isdot ? width : width/2,
装饰: BoxDecoration(color: color, borderRadius: ()),
child: !isdot ? Text('$_num', style: TextStyle(color: Colors.white, fontSize: 12.0)): null
);
}
}
支持自定义点颜色、大小及99个以上...提示 (0, isdot:true) (13) (168, 颜色: Colors.green, 高度: 17.0, 宽度: 17.0 )
Flutter自定义长按菜单/去掉弹出大小限制
如何在flutter中实现类似微信聊天记录的长按菜单复制/发送给好友/转发/收集/删除获取长按坐标点来flutter提供的 InkWell 组件的 onTapDown 事件,然后 onLongPress 长按事件打开菜单
![]()
InkWell(
splashColor: [200],❀) , onTapDown: (TapDownDetails 详情) {
_globalPositionX = 详细信息.globalPosition.dx;
_globalPositionY = 详细信息.globalPosition.dy;,♶}♸重新在线:() {
_ShowpopupMenu (context);
},
),
// 按下弹出窗口
double _globalPositionx = 0.0; // 按下位置的横坐标 ? ).size.width/2 ? false : true;
// 判断点击位置是在屏幕的上半部分还是下半部分
bool isTop = _globalPositionY > (context).size.height/2 ?错误 正确;
showDialog(
context: context,
builder: (context) {
return Stack(
children: <Widget>[
Positioned(
top: isTop ? _globalPositionY : _globalPositionY - 200.0,
left: isLeft ? _globalPositionX : _globalPositionX - 120.0,
width: 120.0,
child: Material(
...
),
)
],
);
}
); 版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网



