热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter10天高仿大厂App及小技巧积累总结,被阿里面试官征服了

}}调用非常简单,可自定义颜色、字体大小;GStyle.iconfont(0xe635,color:Colors.orange,size:17.0)

}

}

调用非常简单,可自定义颜色、字体大小;GStyle.iconfont(0xe635, color: Colors.orange, size: 17.0)

5、flutter实现badge红点/圆点提示

=======================

![](https://imgconvert.csdnimg.cn/aHR0cDovL3BiMy5wc3RhdHAuY29tL2xhcmdlL
3BnYy1pbWFnZS8zZTMxNDBjMWNmODU0ZGM0ODQ3ZjAwZTU2NWVkNzI1OQ?x-oss-process=image/format,png)

如上图:在flutter中没有圆点提示组件,需要自己封装实现;

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

);

}

}

支持自定义红点大小、颜色,默认数字超过99就…显示;GStyle.badge(0, isdot:true)GStyle.badge(13)GStyle.badge(29, color: Colors.orange, height: 15.0, width: 15.0)

6、flutter长按自定义弹窗

================


  • 在flutter中如何实现长按,并在长按位置弹出菜单,类似微信消息长按弹窗效果;

通过InkWell组件提供的onTapDown事件获取坐标点实现

InkWell(

splashColor: Colors.grey[200],

child: Container(…),

onTapDown: (TapDownDetails details) {

_globalPositiOnX= details.globalPosition.dx;

_globalPositiOnY= details.globalPosition.dy;

},

onLongPress: () {

_showPopupMenu(context);

},

),

// 长按弹窗

double _globalPositiOnX= 0.0; //长按位置的横坐标

double _globalPositiOnY= 0.0; //长按位置的纵坐标

void _showPopupMenu(BuildContext context) {

// 确定点击位置在左侧还是右侧

bool isLeft = _globalPositionX > MediaQuery.of(context).size.width/2 ? false : true;

// 确定点击位置在上半屏幕还是下半屏幕

bool isTop = _globalPositionY > MediaQuery.of(context).size.height/2 ? false : true;

showDialog(

context: context,

builder: (context) {

return Stack(

children: [

Positioned(

top: isTop ? _globalPositionY : _globalPositionY - 200.0,

left: isLeft ? _globalPositionX : _globalPositionX - 120.0,

width: 120.0,

child: Material(

),

)

],

);

}

);

}


  • flutter如何实现去掉AlertDialog弹窗大小限制?

可通过SizedBox和无限制容器UnconstrainedBox组件实现

void _showCardPopup(BuildContext context) {

showDialog(

context: context,

builder: (context) {

return UnconstrainedBox(

constrainedAxis: Axis.vertical,

child: SizedBox(

width: 260,

child: AlertDialog(

content: Container(

),

elevation: 0,

contentPadding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0),

),

),

);

}

);

}

7、flutter登录/注册表单|本地存储

=====================

flutter提供了两个文本框组件:TextField 和 TextFormField本文是使用TextField实现,并在文本框后添加清空文本框/密码查看图标

TextField(

keyboardType: TextInputType.phone,

controller: TextEditingController.fromValue(TextEditingValue(

text: formObj[‘tel’],

selection: new TextSelection.fromPosition(TextPosition(affinity: TextAffinity.downstream, offset: formObj[‘tel’].length))

)),

decoration: InputDecoration(

hintText: “请输入手机号”,

isDense: true,

hintStyle: TextStyle(fontSize: 14.0),

suffixIcon: Visibility(

visible: formObj[‘tel’].isNotEmpty,

child: InkWell(

child: GStyle.iconfont(0xe69f, color: Colors.grey, size: 14.0), onTap: () {

setState(() { formObj[‘tel’] = ‘’; });

}

),

),

border: OutlineInputBorder(borderSide: BorderSide.none)

),

onChanged: (val) {

setState(() { formObj[‘tel’] = val; });

},

)

TextField(

decoration: InputDecoration(

hintText: “请输入密码”,

isDense: true,

hintStyle: TextStyle(fontSize: 14.0),

suffixIcon: InkWell(

child: Icon(formObj[‘isObscureText’] ? Icons.visibility_off : Icons.visibility, color: Colors.grey, size: 14.0),

onTap: () {

setState(() {

formObj[‘isObscureText’] = !formObj[‘isObscureText’];

});

},

),

border: OutlineInputBorder(borderSide: BorderSide.none)

),

obscureText: formObj[‘isObscureText’],

onChanged: (val) {

setState(() { formObj[‘pwd’] = val; });

},

)

验证消息提示则是使用flutter提供的SnackBar实现

// SnackBar提示

final _scaffoldkey = new GlobalKey();

void _snackbar(String title, {Color color}) {

_scaffoldkey.currentState.showSnackBar(SnackBar(

backgroundColor: color ?? Colors.redAccent,

content: Text(title),

duration: Duration(seconds: 1),

));

}

另外本地存储使用的是shared\_preferences,至于如何使用可参看https://pub.flutter-io.cn/packages/shared_preferences

void handleSubmit() async {

if(formObj[‘tel’] == ‘’) {

_snackbar(‘手机号不能为空’);

}else if(!Util.checkTel(formObj[‘tel’])) {

_snackbar(‘手机号格式有误’);

}else if(formObj[‘pwd’] == ‘’) {

_snackbar(‘密码不能为空’);

}else {

// …接口数据

// 设置存储信息

final prefs = await SharedPreferences.getInstance();

prefs.setBool(‘hasLogin’, true);

prefs.setInt(‘user’, int.parse(formObj[‘tel’]));

prefs.setString(‘token’, Util.setToken());

_snackbar(‘恭喜你,登录成功’, color: Colors.greenAccent[400]);

Timer(Duration(seconds: 2), (){

Navigator.pushNamedAndRemoveUntil(context, ‘/tabbarpage’, (route) => route == null);

});

}

}

8、flutter聊天页面功能

===============


  • 在flutter中如何实现类似上图编辑器功能?通过TextField提供的多行文本框属性maxLines就可实现。

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,


推荐阅读
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • 华为鸿蒙系统官网2.0报名方法及适用设备
    本文介绍了华为鸿蒙系统官网2.0报名的适用设备、报名方法以及三种方式,包括在应用商店下载开发者联盟app、在官网中进行报名、在微信公众号中申请体验HarmonyOS 2.0 手机开发者Beta版本。同时提醒错过测试机会的用户可以等待后续的正式版发布。 ... [详细]
author-avatar
爱得诱惑a_920
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有