前言

这一篇,我们继续说实际开发中会用到的一些功能。

  • 【Flutter】开发之目录

启动页

Android启动页

android/app/src/main/res/drawable/launch_background.xml中已经有写好的启动页,只需修改即可

<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@android:color/white" /><!-- You can insert your own image assets here --><item><bitmapandroid:gravity="center"android:src="@mipmap/ic_launcher" /></item>
</layer-list>
复制代码

如果有更进一步的需求,比如说要在启动页加载广告图,并延时几秒的功能,就需要自己实现了。

思路如下

在main方法中返回自己定义的SplashWidgit(名字随便起),在其中处理自己的逻辑,包括加载广告图、设置延时等,延时结束后,跳转至真正的主页即可。

状态栏

  • 状态栏颜色

1.使用MaterialApptheme属性,theme: ThemeData(primaryColor: Colors.green)请注意:这个是全局的

2.使用AppBarbackgroundColor属性,backgroundColor: Colors.deepOrange 3.不使用AppBar,由于Flutter默认是从屏幕最顶部开始布局,所以,修改状态栏颜色简直太容易,只需要通过MediaQueryData.fromWindow(WidgetsBinding.instance.window).padding.top取得状态栏高度即可。

Container(color: Colors.white,child: Column(children: <Widget>[Container(//状态栏高度height: MediaQueryData.fromWindow(WidgetsBinding.instance.window).padding.top,color: Colors.blue,),Container(height: 200,color: Colors.brown,),],),);
复制代码

甚至你可以修改为渐变色,修改Containerdecoration属性

          decoration: BoxDecoration(gradient: LinearGradient(colors: [Colors.cyan, Colors.brown, Colors.deepOrange],)),
复制代码
  • 字体颜色

使用AppBarbrightness属性:Brightness.light为黑色,Brightness.dark为白色;

不使用AppBar时,可以通过嵌套AnnotatedRegion<SystemUiOverlayStyle>来实现。

class StatusDemo extends StatelessWidget {@overrideWidget build(BuildContext context) {return Container(color: Colors.white,child: AnnotatedRegion<SystemUiOverlayStyle>(child: Column(children: <Widget>[Container(height: 200,color: Colors.brown,),],),value: SystemUiOverlayStyle(statusBarColor: Colors.cyan,//有Appbar时,会被覆盖statusBarIconBrightness: Brightness.light,//底部navigationBar背景颜色systemNavigationBarColor: Colors.white),),);}
}
复制代码
  • 渐变色

使用AppBarflexibleSpace,其中渐变方式还可选择RadialGradientSweepGradient

      appBar: AppBar(title: Text('DemoPage'),flexibleSpace: Container(decoration: BoxDecoration(gradient: LinearGradient(colors: [Colors.cyan, Colors.brown, Colors.deepOrange],)),),)
复制代码

返回键监听

可以WillPopScope 嵌套,可以用于监听处理返回键的逻辑。其实WillPopScope 并不是监听返回按键,是当前页面将要被pop时触发的回调。

class _StatusDemoState extends State<StatusDemo> {@overrideWidget build(BuildContext context) {return WillPopScope(child: StatusWidget(),onWillPop: () {///如果返回 return new Future.value(false); popped 就不会被处理///如果返回 return new Future.value(true); popped 就会触发///这里可以通过 showDialog 弹出确定框,在返回时通过 Navigator.of(context).pop(true);决定是否退出return showExitDialog(context);},);}Future<bool> showExitDialog(BuildContext context) {return showDialog(context: context,builder: (BuildContext content) {return AlertDialog(title: Text("提示"),content: Text("确认退出吗?"),actions: <Widget>[GestureDetector(child: Container(child: Text('退出'),),onTap: () {Navigator.of(context).pop(true);},),GestureDetector(child: Container(child: Text('取消'),),onTap: () {Navigator.of(context).pop();},),],);});}
}
复制代码

选取图片

使用的是Flutter提供的image_picker

首先,在pubspec.yaml文件中添加依赖image_picker: '0.6.0+8'

class TakeDemo extends StatefulWidget {@override_TakeDemoState createState() => _TakeDemoState();
}class _TakeDemoState extends State<TakeDemo> {File _image;@overrideWidget build(BuildContext context) {return Container(color: Colors.white,padding: EdgeInsets.only(top: 20),alignment: AlignmentDirectional.center,child: Column(children: <Widget>[FlatButton(onPressed: () {getImage();},child: Text('从相册选择'),),Center(child: _image == null? Text('No image selected.',style: TextStyle(fontSize: 14),): Image.file(_image),),],),);}Future getImage() async {//gallery相册,camera拍照var image = await ImagePicker.pickImage(source: ImageSource.gallery);setState(() {_image = image;});}
}
复制代码

你的认可,是我坚持更新博客的动力,如果觉得有用,就请点个赞,谢谢

转载于:https://juejin.im/post/5ce76bcbe51d457756536704

【Flutter】开发之功能篇(七)相关推荐

  1. Flutter开发指南之理论篇:Dart语法04(库,异步,正则表达式)

    总目录 Flutter开发指南之理论篇:Dart语法01(数据类型,变量,函数) Flutter开发指南之理论篇:Dart语法02(运算符,循环,异常) Flutter开发指南之理论篇:Dart语法0 ...

  2. 国际网页短信软件平台后台功能篇|移讯云短信系统开发

    国际网页短信软件后台功能篇|移讯云短信系统开发 平台外放接口介绍 支持接入CMPP接口,支持smpp通道接入,支持外放CMPP接口(其他平台可以通过CMPP接入我平台),支持HTTP API JSON ...

  3. Unity关于Oculus Quest2 入门开发:(五)基于XR Interaction Toolkit0.10.0开发交互功能之UI篇

    使用过Unity开发过VR的同学知道,UI分为两大类:渲染在摄像机上的和不渲染在摄像机上的也就是WorldSpace,当然Oculus Q2也一样,它需要的也是world类型的. 第一步:配置Ocul ...

  4. flutter开发实战-flutter二维码条形码扫一扫功能实现

    flutter开发实战-flutter二维码条形码扫一扫功能实现 flutter开发实战-flutter二维码扫一扫功能实现,要使用到摄像头的原生的功能,使用的是插件:scan 效果图如下 一.扫一扫 ...

  5. 论Flutter开发如何改善套娃地狱问题

    /   今日科技快讯   / 近日,滴滴旗下自动驾驶公司宣布与广汽埃安新能源汽车有限公司达成战略合作.滴滴出行董事长兼CEO程维与广汽集团董事长曾庆洪,共同见证签约仪式. /   作者简介   / 本 ...

  6. Flutter开发之《闲鱼的探索与收获》笔记(51)

    本篇内容是根据闲鱼的匠修,本名叫熊华丽的做的演讲内容做的笔记.本文的内容只是认为自己需要学习的地方. 演讲实录--Flutter-闲鱼的探索与收获 Flutter基本知识 (PPT图示)左边是Flut ...

  7. EnjoyingSoft之Mule ESB开发教程第二篇:Mule ESB基本概念

    目录 1. 使用Anypoint Studio开发 2. Mule ESB Application Structure - Mule ESB应用程序结构 3. Mule ESB Application ...

  8. Python开发【第二篇】:初识Python

    Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为 ...

  9. Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

    Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑 本次开发采用的Flutter技术进行开发,没想到会这么快,昨天提交的,今天便已上架appstroe,所以这次来做一次总结,总结从 ...

最新文章

  1. GUI编程---贪吃蛇小游戏开发
  2. IT兄弟连 JavaWeb教程 JSON和JSON字符串
  3. java.io.FileNotFoundException: class path resource [springmvc.xml] cannot be opened
  4. jquery动态加载JS【方法getScript】的改进
  5. 并行执行 Job - 每天5分钟玩转 Docker 容器技术(134)
  6. 新服务器安装和配置zabbix的playbook
  7. dedemodule.class.php,DEDECMS5.7模块/模块管理列表显示空白问题解决方法
  8. 【树链剖分】【倍增】宝石(2021GDOI Day2 T1)
  9. python os path_python os.path模块
  10. Linux中,文件创建的时间是怎么保存的?
  11. Java实现MySQL数据库备份(一)
  12. uni-app真机调试报错request:fail abort解决方法
  13. android 自定义布局 根据布局获取类,阿里高级Android面试题解析:Android自定义View—布局过程的自定义...
  14. 2012春季ACM内部测试赛3
  15. 百度文库的内容怎么复制粘贴下来呢,look
  16. 华三H3C交换机如何配置和使用telnet远程登录设备
  17. 金士顿U盘写保护去除
  18. 介绍H桥电机驱动电路
  19. unbuntu 安装nginx
  20. 蒲公英企服平台对话核盛网络刘涛——Tracup项目管理的一条生命线

热门文章

  1. BGP小实验——选路不困难,只要有方法
  2. 怎么在php项目安装tp5框架,框架安装与基本配置
  3. element selection选中变颜色_Excel | 聚光灯效果(阅读模式)——改变当前行和列的颜色...
  4. api 定位 微信小程序 精度_聊聊微信小程序内置地图定位的精确性
  5. java下拉菜单_薪资对比:Java开发和web前端薪资哪个好
  6. java 漏洞挖掘_Apache Tika命令注入漏洞挖掘
  7. cmd查看当前python安装路径_NotePad++上配置Python
  8. matlab 高斯函数_光学与matlab:高斯光的模拟
  9. webservice框架_聊聊从RPC到服务治理框架
  10. 时间序列 预处理 python_【Python算法】时间序列预处理