前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Flutter+Dart聊天实例|flutter仿微信聊天|红包|朋友圈

Flutter+Dart聊天实例|flutter仿微信聊天|红包|朋友圈

原创
作者头像
andy2018
修改于 2020-05-13 10:05:35
修改于 2020-05-13 10:05:35
6.9K10
代码可运行
举报
文章被收录于专栏:h5h5
运行总次数:0
代码可运行

Flutter_Chatroom聊天室项目是基于flutter+dart技术开发的跨平台聊天实战案例,基本实现了登录/注册表单验证、消息表情发送、图片预览、红包/视频/朋友圈等功能。

技术点

  • 技术框架:Flutter 1.12.13/Dart 2.7.0
  • 视频组件:chewie: ^0.9.7
  • 图片/拍照:image_picker: ^0.6.6+1
  • 图片预览组件:photo_view: ^0.9.2
  • 弹窗组件:showModalBottomSheet/AlertDialog/SnackBar
  • 本地存储:shared_preferences: ^0.5.7+1
  • 字体图标:阿里iconfont字体图标库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @tpl Flutter入口页面 | Q:282310962
 */

import 'package:flutter/material.dart';

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

// 引入底部Tabbar页面导航
import 'components/tabbar.dart';

// 引入地址路由
import 'router/routes.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter App',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primaryColor: GStyle.appbarColor,
      ),
      home: TabBarPage(),
      onGenerateRoute: onGenerateRoute,
    );
  }
}

flutter顶部沉浸式状态条+底部tabbar

至于在flutter中如何实现顶部透明状态栏(去掉状态栏黑色半透明背景),去掉右上角banner,详细介绍可以去看这篇文章

https://segmentfault.com/a/1190000022483730

flutter图标Icon及自定义IconData组件

flutter中自带图标使用非常简单 Icon(Icons.search)

可是如果想要自定义图标,如使用阿里图标iconfont如何实现,这时就需要用到IconData来实现自定义图标了。Icon(IconData(0xe60e, fontFamily:'iconfont'), size:24.0)

使用IconData需要先下载阿里图标库字体文件,然后在pubspec.yaml中引入字体

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class GStyle {
    // __ 自定义图标
    static iconfont(int codePoint, {double size = 16.0, Color color}) {
        return Icon(
            IconData(codePoint, fontFamily: 'iconfont', matchTextDirection: true),
            size: size,
            color: color,
        );
    }
}

调用方式如下:支持自定义字体图标、颜色、字体大小;

GStyle.iconfont(0xe60e, color: Colors.orange, size: 17.0)

flutter中圆点数字/红点提醒

如下图红点提示在flutter没有提供这种组件,只能自定义实现。支持自定义红点大小、颜色,默认数字超过99就...显示;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class GStyle {
    // 消息红点
    static badge(int count, {Color color = Colors.red, bool isdot = false, double height = 18.0, double width = 18.0}) {
        final _num = count > 99 ? '···' : count;
        return Container(
            alignment: Alignment.center, height: !isdot ? height : height/2, width: !isdot ? width : width/2,
            decoration: BoxDecoration(color: color, borderRadius: BorderRadius.circular(100.0)),
            child: !isdot ? Text('$_num', style: TextStyle(color: Colors.white, fontSize: 12.0)) : null
        );
    }
}

flutter聊天页面实现|TextField编辑框插入表情

flutter中TextField文本框提供的maxLines属性可实现多行/换行文本,不过默认会有高度,

可在外层加个Container容器限制最小高度,然后设置 maxLines: null keyboardType: TextInputType.multiline

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Container(
    margin: GStyle.margin(10.0),
    decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(3.0)),
    constraints: BoxConstraints(minHeight: 30.0, maxHeight: 150.0),
    child: TextField(
        maxLines: null,
        keyboardType: TextInputType.multiline,
        decoration: InputDecoration(
          hintStyle: TextStyle(fontSize: 14.0),
          isDense: true,
          contentPadding: EdgeInsets.all(5.0),
          border: OutlineInputBorder(borderSide: BorderSide.none)
        ),
        controller: _textEditingController,
        focusNode: _focusNode,
        onChanged: (val) {
          setState(() {
            editorLastCursor = _textEditingController.selection.baseOffset;
          });
        },
        onTap: () {handleEditorTaped();},
    ),
),

表情使用的是emoj表情符,当然也可以使用图片表情,不过需要特殊处理罢了。

聊天消息滚动到最底部,使用的是ListView里controller控制器jumpTo方法实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ScrollController _msgController = new ScrollController();
...
ListView(
    controller: _msgController,
    padding: EdgeInsets.all(10.0),
    children: renderMsgTpl(),
)

// 滚动消息至聊天底部
void scrollMsgBottom() {
    timer = Timer(Duration(milliseconds: 100), () => _msgController.jumpTo(_msgController.position.maxScrollExtent));
}

好了,基于flutter+dart实战聊天室项目就分享到这里,后续会继续分享更多实例项目,希望能有些帮助~~ 🐀💪

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
群聊功能是用的什么方式做的?是腾讯云IM吗?感谢指点分享,期待回复
群聊功能是用的什么方式做的?是腾讯云IM吗?感谢指点分享,期待回复
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Flutter | 常用组件
​ textAlign:文本的对齐方式;可以选择左对齐、右对齐还是居中。注意,对齐的参考系是Text widget本身
345
2022/02/11
11.5K0
Flutter | 常用组件
Flutter lesson 8:输入框,时间日期选择
Flutter自带的 showDatePicker 和 showTimePicker 两个方法可以进行时间和日期的选择。
踏浪
2019/07/31
4.8K0
Flutter lesson 8:输入框,时间日期选择
Flutter 入门指北之输入处理(登录界面实战)
这边需要提下的是 setState 方法,该方法只有 StatefulWidget 才有,当需要修改某个值的内容的时候,通过该方法进行修改,最后的效果图如下,当输入框文字发生变化的时候,监听的 Text 内容会随之改变,获取内容的 Text 当点击按钮了才发生变化
陈宇明
2020/12/16
2K1
Flutter 数据持久化存储之Hive库
以上的这些我们都不使用,这里要使用的是Hive库,地址是 Hive,感兴趣的可以自行了解,本文运行效果图。
晨曦_LLW
2024/05/25
4880
Flutter 数据持久化存储之Hive库
基于flutter3.x+material-design3仿微信App应用实战
flutter3-wchat一款基于flutter3+dart3+material-ui技术构建的跨多端仿微信聊天项目。
andy2018
2024/02/07
1.1K0
Vue3.x+Vant3仿微信聊天|朋友圈
2021已来临,Vue3开发也要步入正轨了。今天为大家带来的是全新开发的Vue3.x实战聊天室项目Vue3_Chatroom,基于vue3+vant3+vuex+vue-router+v3popup等技术搭建的聊天实例。
andy2018
2021/01/09
4.3K2
Vue3.x+Vant3仿微信聊天|朋友圈
Flutter组件学习(三)—— 输入框TextFiled
Google 前两天发布了 Flutter 1.0 正式版本,正式版发布之后,LZ身边越来越多的人都开始入坑了,不得不说 Flutter 框架的魅力还是很吸引人的哈,所以我们更要抓紧学习了;之前我写了两篇文章来介绍 Flutter中的Text组件 和 Flutter中的Image组件,今天我们继续学习输入框 TextFiled 组件,话不多说,先上图:
用户2802329
2018/12/26
2.6K0
【Flutter 专题】08 小小优化【登录】页面
和尚前两天花了很久才搭建了一个最简单的【登录】页面,但依然还有很多需要优化的地方,和尚又花了很久的时间尝试做了一点点的优化,仅针对优化的部分简单整理一下。
阿策小和尚
2019/08/12
1.5K0
【Flutter 专题】08 小小优化【登录】页面
Flutter跨平台移动端开发丨Text、Button、Image、Switch、Checkbox、TextField
Material 库中的按钮点击时默认带有“水波动画”,点击事件监听通过 onPressed 属性设置,若不设置 onPressed 则按钮处于禁用状态,无点击动效也不响应点击事件
码脑
2019/05/25
2.6K0
Flutter第7天--字体图标+综合小案例+Android代码交互
Flutter七日游第七天:2018-12-22 天气:雨-阴 零、前言 最后一天了,今天将把前六天的零碎知识整合起来,以及未涉及的零碎知识 最后会附上源码,在github,我按天分包稍微整理了一下,顺手Star一下吧 顺便提一下:Dart语法的相关测试在test包的base里(怕你们找不到) 与Android代码交互后感觉flutter还是蛮可以的,可惜没条件玩ios,不然岂不是可以通杀 (给我七天或许可以把ios跑一圈,以后有钱再说吧) 留图镇楼:分类效果和查询效果 - - ---
张风捷特烈
2018/12/28
2.4K0
[- Flutter 数据&状态篇 -] setState
0.1:对我而言,一个产品有四层境界 1.造都造不出来 2.它又不是不能用 <---- 3.用的时候大家都不说话 4.如丝般顺滑,易拓展,易修改,易复用 0.2:要说的话 注意:本篇是对状态
张风捷特烈
2020/04/30
1.4K0
[- Flutter 数据&状态篇 -] setState
Flutter Icon IconFont(图标控件)
Flutter中,可以像Web开发一样使用iconfont,iconfont即“字体图标”,它是将图标做成字体文件,然后通过指定不同的字符而显示不同的图片。
毛大姑娘
2020/09/10
3.7K0
Flutter Icon IconFont(图标控件)
【Flutter 专题】64 图解基本 TextField 文本输入框 (一)
和尚最近在学习基础的 Flutter Widget,原因在于很多基础的组件有很多容易忽视的注意事项,了解并熟悉后对整体的开发认知会有所提升;今天和尚学习一下 TextField 文本输入框;
阿策小和尚
2019/10/22
4.8K0
使用 Flutter 制作地图应用
在本文中,我将向您展示如何使用 Flutter 向您的应用程序添加映射功能。对于本教程,您将不需要 google maps API,因此您无需支付任何费用,因为我们将使用另一个免费 API,所以不用多说,让我们深入研究它。
徐建国
2021/08/08
2.8K0
uni-app+vue仿微信聊天APP界面|uniapp仿微信朋友圈
基于uniapp+vue仿微信聊天室uniapp-chatroom项目,vue语法及类似小程序api开发原生APP应用,实现了发送图文消息、表情(gif动图),图片预览、地图位置、红包、仿微信朋友圈等功能。
andy2018
2019/10/10
10.6K3
uni-app+vue仿微信聊天APP界面|uniapp仿微信朋友圈
Flutter TextField详解
TextField是一个material design风格的输入框,本身有多种属性,除此之外装饰器InputDecoration也有多种属性,但都比较简单,所以不必担心,且听我娓娓道来。
yechaoa
2022/06/10
4.3K0
Flutter TextField详解
taro+react导航条组件/自定义底部Tabbar导航
最近在研究taro框架技术,发现官方提供的实例基本都是H5、小程序,对于RN端实例甚少,如是自己就实现了自定义导航栏+tabbar组件,支持自定义背景、颜色、左侧图标、标题居中、搜索框,右侧按钮支持图标/文字/图片,还可以设置样式,红点提示、事件处理
andy2018
2019/11/27
7.8K1
taro+react导航条组件/自定义底部Tabbar导航
Flutter第4天--基础控件(下)+Flex布局详解
Flutter七日游第四天:2018-12-19 天气:晴朗 零、前言 最近有些人问我怎么学的,操作这么6,有没有什么技巧。 今天一开始借助Image来给大家说一个分析的小技巧,让你不到30行代码
张风捷特烈
2018/12/27
2.2K0
Flutter | 常用组件分类、概述、实战
AppBar(title属性,Text组件; action:动作响应;!!!! titleSpacing:标题文字间距; toolbarOpacity:标题透明度;)
凌川江雪
2020/06/16
4.3K0
【Flutter 组件】004-基础组件:图片及 ICON
Flutter 中,我们可以通过 Image 组件来加载并显示图片,Image 的数据源可以是 asset 、文件、内存以及网络。
訾博ZiBo
2025/01/06
3480
【Flutter 组件】004-基础组件:图片及 ICON
推荐阅读
相关推荐
Flutter | 常用组件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验