前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第九十八期:Flutter学习(一)

第九十八期:Flutter学习(一)

作者头像
terrence386
发布2022-07-15 11:29:52
5020
发布2022-07-15 11:29:52
举报

昨天和今天除了写一些小程序的代码之外,都在学习flutter相关的内容。感觉flutter的学习成本之所以高,很大的原因其实是因为它的学习资料真正能学到东西的,其实还是它的官网,但是官网又是英文版的,读起来就比较费劲。

再一个是因为flutter的生态其实也是比较庞大的。除了基础的widget组件,还有两种不同风格的组件形式material和cupertino。除此之外,还有其他各种库,比如请求库,dio以及各种插件。

https://api.flutter.dev/flutter/material/material-library.html

官网的这个界面里枚举了flutter用到的库:

  • 组件库
  • 核心库 core
  • web端的库
  • 跨平台的继承库
  • 加密
  • 文件操作
  • ...等等

组件其实还好,因为前端的组件这个概念其实都是通用的。基于原生的最基本的标签组件,我们进行组合来实现我们的业务组件。但是和web端不同的是,flutter的组件都是对象。它的属性方法和web比起来差异很大,对于新手来说不容易记的清楚。

还有一个原因是flutter采用的Dart语言。一种类似ts但是有不同于ts的语言,这可能也是flutter学习成本相对来说比较高的一个原因吧。

今天主要熟悉了material库中常用的组件。用easymock和dio库写了个简单的get请求的示例。

把常用组件的概念以及示例代码做了一个总结,其他的也没什么东西。

material.dart 常用组件

这部分内容比较枯燥,可以简单了解一下。

基础组件

  • AppBar
  • Column
  • Container
  • ElevatedButton
  • Image
  • Placeholder
  • Row
  • Scaffold
  • Text

AppBar

属性

含义

示例

actions

title

标题

color

颜色

Colors.amber[600]

bottom

bottomOpacity

foregroundDecoration

centerTitle

elevation

flexibleSpace

示例:

代码语言:javascript
复制
Scaffold(
  body: CustomScrollView(
    primary: true,
    slivers: <Widget>[
      SliverAppBar(
        title: const Text('Hello World'),
        actions: <Widget>[
          IconButton(
            icon: const Icon(Icons.shopping_cart),
            tooltip: 'Open shopping cart',
            onPressed: () {
              // handle the press
            },
          ),
        ],
      ),
      // ...rest of body...
    ],
  ),
)

Column

Column 用来在垂直方向进行布局。

想要子组件自动填充垂直方向的空间,可以用Expanded组件进行包裹。

Column组件不支持滚动,如果我们需要支持滚动,则可以考虑ListView组件。

  • 属性

属性

含义

示例

children

crossAxisAlignment

横轴对齐

direction

用作主轴的方向

textDirection

textBaseline

verticalDirection

示例:

代码语言:javascript
复制
Column(
  children: const <Widget>[
    Text('Deliver features faster'),
    Text('Craft beautiful UIs'),
    Expanded(
      child: FittedBox(
        fit: BoxFit.contain, // otherwise the logo will be tiny
        child: FlutterLogo(),
      ),
    ),
  ],
)

Contanier 组件

  • 属性

属性

含义

示例

alignment

对齐方式

child

子组件

color

颜色

Colors.amber[600]

constraints

应用于子级的其他约束

decoration

应用于子组件背后

foregroundDecoration

应用于子组件前

margin

const EdgeInsets.all(10.0),

padding

transform

transformAligment

width

50

height

50

  • 方法

方法

build

示例-simple:

代码语言:javascript
复制
Center(
  child: Container(
    margin: const EdgeInsets.all(10.0),
    color: Colors.amber[600],
    width: 48.0,
    height: 48.0,
  ),
)

示例-complex:

代码语言:javascript
复制
Container(
  constraints: BoxConstraints.expand(
    height: Theme.of(context).textTheme.headline4!.fontSize! * 1.1 + 200.0,
  ),
  padding: const EdgeInsets.all(8.0),
  color: Colors.blue[600],
  alignment: Alignment.center,
  transform: Matrix4.rotationZ(0.1),
  child: Text('Hello World',
    style: Theme.of(context)
        .textTheme
        .headline4!
        .copyWith(color: Colors.white)),
)

ElevatedButton 组件

  • 属性

属性

含义

示例

autofocus

child

子组件

color

颜色

Colors.amber[600]

style

onPressed

onLongPress

onHover

onFocusChange

enabled

示例:

代码语言:javascript
复制
 final ButtonStyle style =
        ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20));

Column(
    mainAxisSize: MainAxisSize.min,
    children: <Widget>[
        ElevatedButton(
            style: style,
            onPressed: null,
            child: const Text('Disabled'),
        ),
        const SizedBox(height: 30),
        ElevatedButton(
            style: style,
            onPressed: () {},
            child: const Text('Enabled'),
        ),
    ],
    ),
);

Text 组件

文本小部件显示具有单一样式的文本字符串。根据布局约束的不同,字符串可能会跨多行中断,也可能全部显示在同一行上。

style参数是可选的。省略时,文本将使用最接近的封闭式DefaultTextStyle中的样式。如果给定样式为TextStyle。inherit属性为true(默认值),给定样式将与最近的封闭DefaultTextStyle合并。这种合并行为非常有用,例如,在使用默认字体系列和大小时,可以将文本加粗。

  • 属性

属性

含义

示例

maxLines

overflow

子组件

color

颜色

Colors.amber[600]

style

textAlign

textDirection

textHeightBehavior

textScaleFactor

textWidthBasis

布局组件

Align

子组件在父组件中进行定位。

  • 属性

属性

含义

示例

alignment

heightFactor

widthFactor

示例:

代码语言:javascript
复制
Center(
  child: Container(
    height: 120.0,
    width: 120.0,
    color: Colors.blue[50],
    child: const Align(
      alignment: Alignment.topRight,
      child: FlutterLogo(
        size: 60,
      ),
    ),
  ),
)

AspectRatio

将子对象的大小调整为特定的纵横比/宽高比。

  • 属性

属性

含义

示例

aspectRatio

child

示例:

代码语言:javascript
复制
Container(
      color: Colors.blue,
      alignment: Alignment.center,
      width: double.infinity,
      height: 100.0,
      child: AspectRatio(
        aspectRatio: 16 / 9,
        child: Container(
          color: Colors.green,
        ),
      ),
    );

Baseline

根据子组件的基线定位子组件位置。

  • 属性

属性

含义

示例

baseline

baselineType

child

示例:

代码语言:javascript
复制
BaseLine(
    baseline:100,
    baselineType:TextBaselIST.alphabetic,
    child:MyText()
)

ConstrainedBox 组件

对其子级施加附加约束的小部件。

例如,如果希望子对象的最小高度为50.0个逻辑像素,可以使用const-BoxConstraints(minHeight:50.0)作为约束。

  • 属性

属性

含义

示例

constraints

child

示例:

代码语言:javascript
复制
ConstrainedBox(
  constraints: const BoxConstraints.expand(),
  child: const Card(child: Text('Hello World!')),
)

Padding 组件

  • 属性

属性

含义

示例

padding

child

示例:

代码语言:javascript
复制
const Card(
  child: Padding(
    padding: EdgeInsets.all(16.0),
    child: Text('Hello World!'),
  ),
)

SizedBox 组件

指定大小的盒子。

  • 属性

属性

含义

示例

height

width

示例:

代码语言:javascript
复制
const SizedBox(
  width: 200.0,
  height: 300.0,
  child: Card(child: Text('Hello World!')),
)

Transform 组件

在绘制其子级之前应用转换的小部件。

  • 属性

属性

含义

示例

alignment

filterQuality

origin

transform

transformHitTests

示例:

代码语言:javascript
复制
Container(
  color: Colors.black,
  child: Transform(
    alignment: Alignment.topRight,
    transform: Matrix4.skewY(0.3)..rotateZ(-math.pi / 12.0),
    child: Container(
      padding: const EdgeInsets.all(8.0),
      color: const Color(0xFFE8581C),
      child: const Text('Apartment for rent!'),
    ),
  ),
)

dio get请求的简单示例代码

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    getHttp();
    return Scaffold(
      body: Center(
        child: Text('terrence home page')),
    );
  }

  // request
  void getHttp() async {
    try{
      Response response;
      response = await Dio().get('https://mock.mengxuegu.com/mock/629782a36163854a32e82a09/shop/homepage');
      return print(response);
    }catch(e){
      return print(e);
    }
  }
}

学习flutter的一些建议

可以先看中文文档,然后读官网原版,体会一下组件以及各个库的使用方法。

最好也看一遍dart语言的官网,了解dart的基本类型,变量定义,函数定义,条件语句等基本操作。

其次最好找一个科学上网工具,因为在我们实际写代码的过程中,有些依赖包在flutter最新的版本中需要代理才能正常安装,如果没有科学上网工具,我们只能望洋兴叹。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaScript高级程序设计 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • material.dart 常用组件
  • 基础组件
    • AppBar
      • Column
        • Contanier 组件
          • ElevatedButton 组件
            • Text 组件
            • 布局组件
              • Align
                • AspectRatio
                  • Baseline
                    • ConstrainedBox 组件
                      • Padding 组件
                        • SizedBox 组件
                          • Transform 组件
                            • dio get请求的简单示例代码
                              • 学习flutter的一些建议
                              相关产品与服务
                              腾讯云微搭低代码
                              微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。 支持打通企业内部数据,轻松实现企业微信管理、工作流、消息推送、用户权限等能力,实现企业内部系统管理。 连接微信生态,和微信支付、腾讯会议,腾讯文档等腾讯 SaaS 产品深度打通,支持原生小程序,助力企业内外部运营协同和营销管理。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档