Flutter学习总结(三)组件必知必会

如果说Java是面向对象,那么Flutter就是面向组件,一切皆组件,那么多组件怎么学习呢,这里我就把高频使用的组件、方法、以及pub包整理一下,主要是能够快速上手和入门。

常用Widget

基组件

  • StatelessWidget(无状态的,一次渲染绘制)
  • StatefulWidget(有状态的,可多次渲染绘制)

flutter大部分组件都是间接或者直接继承于这两个组件。

门户组件

  • MaterialApp(android风格)
  • CupertinoApp(iOS风格)

Material风格基础框架组件,Flutter应用入口配置,例如标题、主题,主界面等。常用的“Scaffold”、“AppBar”、“TabBar”、“BottomNavigationBar”等都需要再此基础组件下实现。

基础组件

  • 文本:Text
  • 文本输入:TextField
  • 按钮:RaisedButton(悬浮按钮)、TextButton(扁平按钮)、OutlineButton(边框按钮)、IconButton(icon按钮)
  • 图片:Image
  • 单/复选框:Radio(单选框)、Checkbox(复选框)
  • 进度条:LinearProgressIndicator(条形进度条)、CircularProgressIndicator(原型进度条)
  • 分割线:Divider
  • 显隐控制:Visibility

布局组件

  • 线性布局:Row(水平)、Column(垂直)
  • 弹性布局:Flex
  • 层叠布局:Stack(层叠父容器)、Positioned(孩子精细化定位)
  • 定位布局:Align(上下左右任意位置)、Center(居中)
  • 空间占用布局:Expanded(剩余空间、比例分割)
  • 尺寸布局:SizedBox(确定宽高,可代替Margin的性质)

容器组件

  • 组合容器:Container(主要用于大小、padding、背景、装饰等多条件组合修饰)
  • 脚手架:Scaffold(页面脚手架,可捆绑appbar)
  • 滚动容器:SingleChildScrollView(单一元素滚动)、CustomScrollView(复合滚动,例如GridView+ListView)、ListView(列表)、GridView(九宫格)

点击组件

  • InkWell(常用,有点击波浪效果)
  • GestureDetector(手势,方法更丰富,无点击效果)

其他组件

  • SafeArea(常用于刘海屏遮挡腾出安全空间,自定义标题栏中经常用到)
  • WillPopScope(导航返回拦截)

更多组件可参看官方文档:https://flutter.cn/docs/development/ui/widgets

静态路由配置

定义静态路由

var staticRoutes = {
  WelcomePage.routeName: (context) => WelcomePage(),
  LoginPage.routeName: (context) => LoginPage(),
  HomePage.routeName: (context) => HomePage(),
};

main入口引用

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My Flutter',
      routes: staticRoutes,
      home: HomePage(),
    );
  }
}

其他页面调用进行跳转

onPressed: () {
    Navigator.pushNamed(context, LoginPage.routeName);
},

一些高频方法

1.延迟获取:

Future.delayed(Duration(seconds: 2), () {
  ...
});

Timer(Duration(seconds: 2), (){
  ...
});

2.渲染结束监听

import 'package:flutter/scheduler.dart';
@override
void initState() {
  super.initState();
  SchedulerBinding.instance.addPostFrameCallback((_) => {});
}

常用pub包整理

  • permission_handler: 权限申请
  • extended_image: 图片加载
  • photo_view: 预览图片
  • flutter_image_compress: 图片压缩
  • flutter_smart_dialog: 自定义加载框、toast、弹框
  • package_info: 获取应用程序包信息(应用名,包名,版本号,构建号等等)
  • path_provider: 获取文件系统中常用的目录路径
  • flutter_easyrefresh: 下拉刷新上拉加载
  • url_launcher: 打电话、打开网址、发送邮件、信息
  • dio: 网络库
  • crypto: 加解密
  • get: 状态管理器GetX

其他开源UI库

  • https://www.jianshu.com/p/2200185df33d

Json转实体

  1. IDE插件:FlutterJsonBeanFactory
  2. json to dart(支持空安全):https://javiercbk.github.io/json_to_dart/
  3. pub插件:json_serializable

开发技巧

  1. 开发时注重私有变量和final的使用
  2. 一些常用的组件尽可能的进行封装,例如标题栏、toast
  3. 开发过程中功能模块抽取,避免套娃式望海
  4. 开发过程中尽可能widget和功能分开保持代码整洁

其他

androidstudio中快速生成代码块:

  • 快速生成StatelessWidget,输入"stless"
  • 快速生成StatefulWidget,输入"stful"

stack是层叠布局,使用Positioned必须给定子widget具体的宽高,否则无法定位。

学习资源

  1. 官方文档:https://flutter.dev/docs
  2. 中文文档:https://flutter.cn/#
  3. flutter pub搜索仓库:https://pub.flutter-io.cn/
  4. flutter SDK仓库:https://github.com/flutter/flutter
  5. 《Flutter实战》:https://book.flutterchina.club/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值