Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Flutter实战】文本组件及五大案例

【Flutter实战】文本组件及五大案例

作者头像
老孟Flutter
发布于 2020-09-11 08:42:32
发布于 2020-09-11 08:42:32
7.3K00
代码可运行
举报
文章被收录于专栏:FlutterFlutter
运行总次数:0
代码可运行

老孟导读:大家好,这是【Flutter实战】系列文章的第二篇,这一篇讲解文本组件,文本组件包括文本展示组件(Text和RichText)和文本输入组件(TextField),基础用法和五个案例助你快速掌握。

Text

Text是显示文本的组件,最常用的组件,没有之一。基本用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text('老孟')

注意:Text组件一定要包裹在Scaffold组件下,否则效果如下:

文本的样式在style中设置,类型为TextStyleTextStyle中包含很多文本样式属性,下面介绍一些常用的。

设置文本大小和颜色:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text('老孟',style: TextStyle(color: Colors.red,fontSize: 20),),

上面黑色的字体为没有设置的效果,作为对比。

设置字体粗细:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text('老孟',style: TextStyle(fontWeight: FontWeight.bold))

字体粗细共有9个级别,为w100w900FontWeight.boldw700

设置斜体:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text('老孟',style: TextStyle(fontStyle: FontStyle.italic,))

设置自定义的字体:

  1. 首先下载字体库(比如中华字体库)
  2. 将字体文件拷贝的项目中,一般目录是:assets/fonts/,assets和fonts都需要手动创建,此目录不是必须的,而是约定俗成,资源一般都放在assets目录下。
  3. 配置pubspec.yaml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fonts:
  - family: maobi 
    fonts:
      - asset: assets/fonts/maobi.ttf

maobi:是自己对当前字体的命名,有意义即可。

asset:字体文件的目录。

使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text('老孟', style: TextStyle(fontFamily: 'maobi',)),

设置对齐方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Container(
  height: 100,
  width: 200,
  color: Colors.blue.withOpacity(.4),
  child: Text('老孟', textAlign: TextAlign.center),
),

textAlign只是控制水平方向的对齐方式,值说明如下:

  • left:左对齐
  • right:右对齐
  • center:居中
  • justify:两端对齐,此属性中文存在bug(Flutter版本:1.17.3)也可以在官方issue中关注此问题
  • start:前端对齐,和TextDirection属性有关,如果设置TextDirection.ltr,则左对齐,设置TextDirection.rtl则右对齐。
  • end:末端对齐,和TextDirection属性有关,如果设置TextDirection.ltr,则右对齐,设置TextDirection.rtl则左对齐。

设置文本自动换行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Container(
  height: 100,
  width: 200,
  color: Colors.blue.withOpacity(.4),
  child: Text('老孟,专注分享Flutter技术和应用实战',softWrap: true,),
)

文本超出范围时的处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Container(
  height: 100,
  width: 200,
  color: Colors.blue.withOpacity(.4),
  child: Text('老孟,专注分享Flutter技术和应用实战',overflow: TextOverflow.ellipsis,),
)

溢出的处理方式:

  • clip:直接裁剪。
  • fade:越来越透明。
  • ellipsis:省略号结尾。
  • visible:依然显示,此时将会溢出父组件。

设置全局字体样式:

MaterialApptheme中设置如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
   ...
    textTheme: TextTheme(
        bodyText2: TextStyle(color: Colors.red,fontSize: 24),
    )
  ),
  home: Scaffold(
    body: TextDemo(),
  ),
)

Text组件默认为红色,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text('老孟'),

Text('老孟',style: TextStyle(color: Colors.blue,fontSize: 20),),

RichText

RichText的属性和Text基本一样,使用如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RichText(
  text: TextSpan(
      style: DefaultTextStyle.of(context).style,
      children: <InlineSpan>[
        TextSpan(text: '老孟', style: TextStyle(color: Colors.red)),
        TextSpan(text: ','),
        TextSpan(text: '专注分享Flutter技术和应用实战'),
      ]),
)

TextField

TextField是文本输入组件,即输入框,常用组件之一。基本用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField()

decoration是TextField组件的装饰(外观)参数,类型是InputDecoration。

icon显示在输入框的前面,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  decoration: InputDecoration(
    icon: Icon(Icons.person),
  ),
)

当输入框是空而且没有焦点时,labelText显示在输入框上边,当获取焦点或者不为空时labelText往上移动一点,labelStyle参数表示文本样式,具体参考TextStyle, 用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  decoration: InputDecoration(
    labelText: '姓名:',
    labelStyle: TextStyle(color:Colors.red)
  ),
)

hasFloatingPlaceholder参数控制当输入框获取焦点或者不为空时是否还显示labelText,默认为true,显示。

helperText显示在输入框的左下部,用于提示用户,helperStyle参数表示文本样式,具体参考TextStyle用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  decoration: InputDecoration(
    helperText: '用户名长度为6-10个字母',
    helperStyle: TextStyle(color: Colors.blue),
    helperMaxLines: 1
  ),
)

hintText是当输入框为空时的提示,不为空时不在显示,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  decoration: InputDecoration(
    hintText: '请输入用户名',
    hintStyle: TextStyle(color: Colors.grey),
    hintMaxLines: 1
  ),
)

errorText显示在输入框的左下部,默认字体为红色,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  decoration: InputDecoration(
    errorText: '用户名输入错误',
    errorStyle: TextStyle(fontSize: 12),
    errorMaxLines: 1,
    errorBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.red)),
  ),
)

prefix系列的组件是输入框前面的部分,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  decoration: InputDecoration(
    prefixIcon: Icon(Icons.person)
  ),
)

注意prefix和icon的区别,icon是在输入框边框的外部,而prefix在里面。

suffix和prefix相反,suffix在输入框的尾部,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  decoration: InputDecoration(
      suffixIcon: Icon(Icons.person)
  ),
)

counter组件统计输入框文字的个数,counter仅仅是展示效果,不具备自动统计字数的功能, 自动统计字数代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var _textFieldValue = '';
TextField(
  onChanged: (value){
    setState(() {
      _textFieldValue = value;
    });
  },
  decoration: InputDecoration(
    counterText: '${_textFieldValue.length}/32'
  ),
)

filled为true时,输入框将会被fillColor填充,仿QQ登录输入框代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Container(
  height: 60,
  width: 250,
  child: TextField(
    decoration: InputDecoration(
      fillColor: Color(0x30cccccc),
      filled: true,
      enabledBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Color(0x00FF0000)),
          borderRadius: BorderRadius.all(Radius.circular(100))),
      hintText: 'QQ号/手机号/邮箱',
      focusedBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Color(0x00000000)),
          borderRadius: BorderRadius.all(Radius.circular(100))),
    ),
  ),
)

controller是输入框文本编辑的控制器,可以获取TextField的内容、设置TextField的内容,下面将输入的英文变为大写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextEditingController _controller;

@override
void initState() {
  super.initState();
  _controller = TextEditingController()
    ..addListener(() {
      //获取输入框的内容,变为大写
      _controller.text = _controller.text.toUpperCase();

    });
}

@override
Widget build(BuildContext context) {
  return TextField(
    controller: _controller,
  );
}

@override
dispose() {
  super.dispose();
  _controller.dispose();
}

有时输入框后面带有“清除”功能,需要controller来实现。如果需要2个TextField的内容进行同步,只需要给2个TextField设置同一个controller即可实现。

keyboardType参数控制软键盘的类型,说明如下:

  • text:通用键盘。
  • multiline:当TextField为多行时(maxLines设置大于1),右下角的为“换行” 按键。
  • number:数字键盘。
  • phone:手机键盘,比数字键盘多"*"和 "#"。
  • datetime:在ios上和text一样,在android上出现数字键盘、":"和 "-"。
  • emailAddress:邮箱键盘,有"@" 和 "."按键。
  • url:url键盘,有"/" 和 "."按键。
  • visiblePassword:既有字幕又有数字的键盘。

textInputAction参数控制软键盘右下角的按键,说明如下:

  • none:android上显示返回键,ios不支持。
  • unspecified:让操作系统自己决定哪个合适,一般情况下,android显示“完成”或者“返回”。
  • done:android显示代表“完成”的按钮,ios显示“Done”(中文:完成)。
  • go:android显示表达用户去向目的地的图标,比如向右的箭头,ios显示“Go”(中文:前往)。
  • search:android显示表达搜索的按钮,ios显示"Search"(中文:搜索)。
  • send:android显示表达发送意思的按钮,比如“纸飞机”按钮,ios显示"Send"(中文:发送)。
  • next:android显示表达“前进”的按钮,比如“向右的箭头”,ios显示"Next"(中文:下一项)。
  • previous:android显示表达“后退”的按钮,比如“向左的箭头”,ios不支持。
  • continueAction:android 不支持,ios仅在ios9.0+显示"Continue"(中文:继续)。
  • join:Android和ios显示"Join"(中文:加入)。
  • route:android 不支持,ios显示"Route"(中文:路线)。
  • emergencyCall:android 不支持,ios显示"Emergency Call"(中文:紧急电话)。
  • newline:android显示表达“换行”的按钮,ios显示”换行“。

大家可能发现了,Android上显示的按钮大部分是不确定的,比如next有的显示向右的箭头,有的显示前进,这是因为各大厂商对Android ROM定制引发的。

textCapitalization参数是配置键盘是大写还是小写,仅支持键盘模式为text,其他模式下忽略此配置,说明如下:

  • words:每一个单词的首字母大写。
  • sentences:每一句话的首字母大写。
  • characters:每个字母都大写
  • none:都小写

这里仅仅是控制软键盘是大写模式还是小写模式,你也可以切换大小写,系统并不会改变输入框内的内容。

textAlignVertical表示垂直方向的对齐方式,textDirection表示文本方向,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  textAlignVertical: TextAlignVertical.center,
  textDirection: TextDirection.rtl,
)

toolbarOptions表示长按时弹出的菜单,有copycutpasteselectAll,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  toolbarOptions: ToolbarOptions(
    copy: true,
    cut: true,
    paste: true,
    selectAll: true
  ),
)

cursor表示光标,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  showCursor: true,
  cursorWidth: 3,
  cursorRadius: Radius.circular(10),
  cursorColor: Colors.red,
)

将输入框设置为密码框,只需obscureText属性设置true即可,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  obscureText: true,
)

通过inputFormatters可以限制用户输入的内容,比如只想让用户输入字符,设置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  inputFormatters: [
    WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")),
  ],
)

这时用户是无法输入数字的。

onChanged是当内容发生变化时回调,onSubmitted是点击回车或者点击软键盘上的完成回调,onTap点击输入框时回调,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  onChanged: (value){
    print('onChanged:$value');
  },
  onEditingComplete: (){
    print('onEditingComplete');
  },
  
  onTap: (){
    print('onTap');
  },
)

输入框右下角经常需要字数统计,除了使用上面介绍的方法外,还可以使用buildCounter,建议使用此方法,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  maxLength: 100,
  buildCounter: (
    BuildContext context, {
    int currentLength,
    int maxLength,
    bool isFocused,
  }) {
    return Text(
      '$currentLength/$maxLength',
    );
  },
)

动态获取焦点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FocusScope.of(context).requestFocus(_focusNode);

_focusNode为TextField的focusNode:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_focusNode = FocusNode();

TextField(
  focusNode: _focusNode,
  ...
)

动态失去焦点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_focusNode.unfocus();

过渡颜色的文字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Builder(
  builder: (BuildContext context) {
    RenderBox box = context.findRenderObject();
    final Shader linearGradient = LinearGradient(
      colors: <Color>[Colors.purple, Colors.blue],
    ).createShader(
        Rect.fromLTWH(0.0, 0.0, box?.size?.width, box?.size?.height));

    return Text(
      '老孟,专注分享Flutter技术和应用实战',
      style: new TextStyle(
          fontSize: 18.0,
          fontWeight: FontWeight.bold,
          foreground: Paint()..shader = linearGradient),
    );
  },
)

Builder组件是为了计算当前Text组件大小,生成LinearGradient。

带前后置标签的文本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RichText(
  text: TextSpan(
      style: DefaultTextStyle.of(context).style,
      children: <InlineSpan>[
        WidgetSpan(
            child: Container(
              margin: EdgeInsets.only(right: 10),
              padding: EdgeInsets.symmetric(horizontal: 10),
              decoration: BoxDecoration(
                  shape: BoxShape.rectangle,
                  borderRadius: BorderRadius.all(Radius.circular(20)),
                  color: Colors.blue),
              child: Text(
                '判断题',
                style: TextStyle(color: Colors.white),
              ),
            )),
        TextSpan(text: '泡沫灭火器可用于带电灭火'),

      ]),
)

“服务协议”

通常在登录页面的底部会出现登录即代表同意并阅读 《服务协议》,其中《服务协议》为蓝色且可点击:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text.rich(
  TextSpan(
      text: '登录即代表同意并阅读',
      style: TextStyle(fontSize: 11, color: Color(0xFF999999)),
      children: [
        TextSpan(
          text: '《服务协议》',
          style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
          recognizer: TapGestureRecognizer()
            ..onTap = () {
              print('onTap');
            },
        ),
      ]),
)

登录密码输入框

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextField(
  decoration: InputDecoration(
    fillColor: Color(0x30cccccc),
    filled: true,
    enabledBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Color(0x00FF0000)),
        borderRadius: BorderRadius.all(Radius.circular(100))),
    hintText: '输入密码',
    focusedBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Color(0x00000000)),
        borderRadius: BorderRadius.all(Radius.circular(100))),

  ),
  textAlign: TextAlign.center,
  obscureText: true,
  onChanged: (value) {

  },
)

评论回复

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text.rich(
  TextSpan(
      text: '回复',
      style: TextStyle(fontSize: 11, color: Color(0xFF999999)),
      children: [
        TextSpan(
          text: '@老孟:',
          style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
          recognizer: TapGestureRecognizer()
            ..onTap = () {
              print('onTap');
            },
        ),
        TextSpan(
          text: '你好,想知道Flutter发展前景如何?',
        ),
      ]),
)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老孟Flutter 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flutter 中 TextField 组件必然会遇到的问题
TextField 组件几乎是开发中必然会用到的一个组件,在使用的过程中会遇到两个非常棘手的问题:
老孟Flutter
2021/11/25
3.1K0
Flutter 中 TextField 组件必然会遇到的问题
【Flutter 专题】65 图解基本 TextField 文本输入框 (二)
和尚刚学习了 TextField 的基本用法,今天特意学习一下 TextField InputDecoration 文本框装饰器的相关内容;
阿策小和尚
2019/10/28
4.7K0
【Flutter 专题】65 图解基本 TextField 文本输入框 (二)
Flutter | 常用组件
​ textAlign:文本的对齐方式;可以选择左对齐、右对齐还是居中。注意,对齐的参考系是Text widget本身
345
2022/02/11
11.5K0
Flutter | 常用组件
Flutter 全栈式——基础控件
当输入框的默认线框无法满足时,可以使用Container容器自定义边框。这时候可以将装饰器设置为InputDecoration.collapsed(hintText: 'hint')表示禁用装饰线
arcticfox
2020/06/12
3.8K0
[- Flutter 数据&状态篇 -] setState
0.1:对我而言,一个产品有四层境界 1.造都造不出来 2.它又不是不能用 <---- 3.用的时候大家都不说话 4.如丝般顺滑,易拓展,易修改,易复用 0.2:要说的话 注意:本篇是对状态
张风捷特烈
2020/04/30
1.4K0
[- Flutter 数据&状态篇 -] setState
TextField suffixIcon点击时TextField 选中弹出键盘<Flutter Bug篇>
登录页面有输入密码,常规隐藏显示。但是点击后面小眼睛的时候,TextField会被选中,弹出键盘。
星宇大前端
2020/09/07
2.6K0
TextField  suffixIcon点击时TextField 选中弹出键盘<Flutter Bug篇>
Flutter TextField详解
TextField是一个material design风格的输入框,本身有多种属性,除此之外装饰器InputDecoration也有多种属性,但都比较简单,所以不必担心,且听我娓娓道来。
yechaoa
2022/06/10
4.3K0
Flutter TextField详解
《Flutter》-- 4.Flutter组件基础
Flutter开发中有一个非常重要的理念,即一切皆为组件。Flutter中Widget不仅可以表示UI元素,也可以布局元素、动画、装饰效果。
爱学习的程序媛
2022/04/07
12.6K0
《Flutter》-- 4.Flutter组件基础
Flutter跨平台移动端开发丨Text、Button、Image、Switch、Checkbox、TextField
Material 库中的按钮点击时默认带有“水波动画”,点击事件监听通过 onPressed 属性设置,若不设置 onPressed 则按钮处于禁用状态,无点击动效也不响应点击事件
码脑
2019/05/25
2.6K0
Flutter 入门指北之输入处理(登录界面实战)
这边需要提下的是 setState 方法,该方法只有 StatefulWidget 才有,当需要修改某个值的内容的时候,通过该方法进行修改,最后的效果图如下,当输入框文字发生变化的时候,监听的 Text 内容会随之改变,获取内容的 Text 当点击按钮了才发生变化
陈宇明
2020/12/16
2K1
【Flutter 专题】64 图解基本 TextField 文本输入框 (一)
和尚最近在学习基础的 Flutter Widget,原因在于很多基础的组件有很多容易忽视的注意事项,了解并熟悉后对整体的开发认知会有所提升;今天和尚学习一下 TextField 文本输入框;
阿策小和尚
2019/10/22
4.8K0
Flutter lesson 8:输入框,时间日期选择
Flutter自带的 showDatePicker 和 showTimePicker 两个方法可以进行时间和日期的选择。
踏浪
2019/07/31
4.8K0
Flutter lesson 8:输入框,时间日期选择
Flutter Text(文本控件)
Flutter中的Text相当于Android中的TextView,用于展示文本。
毛大姑娘
2020/09/10
5.1K0
Flutter Text(文本控件)
Flutter组件学习(三)—— 输入框TextFiled
Google 前两天发布了 Flutter 1.0 正式版本,正式版发布之后,LZ身边越来越多的人都开始入坑了,不得不说 Flutter 框架的魅力还是很吸引人的哈,所以我们更要抓紧学习了;之前我写了两篇文章来介绍 Flutter中的Text组件 和 Flutter中的Image组件,今天我们继续学习输入框 TextFiled 组件,话不多说,先上图:
用户2802329
2018/12/26
2.6K0
Flutter组件学习(一)—— Text组件
之前说会给大家一一讲解 Flutter 中的组件,今天咱们就从 Text 组件开始,无图言X,先上图:
用户2802329
2018/12/19
1.6K1
Flutter+Dart聊天实例|flutter仿微信聊天|红包|朋友圈
Flutter_Chatroom聊天室项目是基于flutter+dart技术开发的跨平台聊天实战案例,基本实现了登录/注册表单验证、消息表情发送、图片预览、红包/视频/朋友圈等功能。
andy2018
2020/05/13
6.8K1
Flutter+Dart聊天实例|flutter仿微信聊天|红包|朋友圈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发
flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件
卓伊凡
2025/01/22
690
Flutter基础widgets教程-TextField篇
1 TextField TextField 是一个文本输入组件,类似 Web 上的 Input。 2 构造函数 TextField({ Key key, this.controller, this.focusNode, this.decoration = const InputDecoration(), TextInputType keyboardType, this.textInputAction, this.textCapitalization =
青年码农
2020/10/10
7690
Flutter基础widgets教程-TextField篇
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
上次我们安装了flutter 配置了vs-code的环境,这次我们来写一个注册页面,以及最基本的打包。
卓伊凡
2025/01/16
1040
Flutter集成老的iOS项目
今天来学习下Flutter如何集成在老的iOS项目中 参考iOS老项目如何集成Flutter
赵哥窟
2019/12/19
1.8K1
推荐阅读
相关推荐
Flutter 中 TextField 组件必然会遇到的问题
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文