专栏首页Flutter&DartFlutter自制工具之fluct创建文件神器

Flutter自制工具之fluct创建文件神器

image

fluct

一个帮助开发Flutter应用程序的工具 .---------------------------------------------- | github地址: | https://github.com/rhymelph/fluct | pub地址: | https://pub.dev/packages/fluct `----------------------------------------------

安装

该工具无需添加到依赖项中,我们只需要激活即可,使用如下命令:

$ pub global activate fluct
# 或者
$ flutter pub global activate fluct

使用

fluct 目前只有一个create命令,用于创建文件及widget,文件名按Dart文件命名规则指定的单词与单词之间添加下划线,并无需指定.dart后缀,例如:index_page

fluct create

Flutter开发过程中,我们创建文件是必须的,而AS自带的创建文件,并没有自动的生成相关的内容,这会让开发者非常的苦恼,类名还需要自己手动敲的话,而该命令,直接可以一步到位。

当运行此命令后,命令行会输出以下内容

Help Flutter application create a new file

Usage: fluct create [arguments] <path>
-h, --help            Print this usage information.
-t, --type            
          [custom]    Create a new file about custom widget in 'fluct.yaml'
                      创建自定义widget的文件,-a 为 指定你在‘fluct.yaml’文件声明的指令
          [stful]     Create a new file about StatefulWidget
                      创建StatefulWidget文件
          [stless]    Create a new file about StatelessWidget
                      创建StatelessWidget文件

-a, --arg             create a new file about your custom widget use arg in 'fluct.yaml'
                      使用你在'fluct.yaml'声明的指令

Run "fluct help" to see global options.

可以看到,该命令输出的内容是简单易懂的,我们来简单使用一下吧。

简单使用

创建IndexPage页面,继承自StatefulWidget,可以使用如下命令:

$ fluct create -t stful ./index_page
Create a new file about StatefulWidget
create class IndexPage
create success
exit 0

运行成功之后,我们会在项目下找到index_page.dart文件,内容为:

import 'package:flutter/material.dart';

class IndexPage extends StatefulWidget {
  @override
  _IndexPageState createState() => _IndexPageState();
}

class _IndexPageState extends State<IndexPage> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

当然,你也可以指定哪个文件夹,例如,我要在./lib/src/page 文件夹下创建IndexPage,使用如下命令

$ fluct create -t stful ./lib/src/page/index_page

自定义内容的文件

在开始之前,我们需要在项目根目录下新建一个fluct.yaml文件,因为fluct create -t custom命令会找到它,内容如下:

inh: |
  import 'package:flutter/material.dart';

  class $NAME$ extends InheritedWidget {
    const $NAME$({
      Key key,
      @required Widget child,
    })  : assert(child != null),
          super(key: key, child: child);

    static $NAME$ of(BuildContext context) {
      return context.dependOnInheritedWidgetOfExactType(aspect: $NAME$) as $NAME$;
    }

    @override
    bool updateShouldNotify($NAME$ old) {
      return false;
    }
  }

这里,我声明了inh命令,然后运行这个命令之后会在生成文件的时候添加inh对应的值,内容中我们值得注意的是$NAME$占位符,该字符串会被替换成根据文件名生成的内容,例如:index_page 会插入IndexPage$NAME$占位符中,最后,我们运行以下命令:

$ fluct create -t custom -a inh ./index_inherited

最后,我们能够在根目录下找到index_inherited.dart文件,内容也是对应的自定义内容

import 'package:flutter/material.dart';

class IndexInherited extends InheritedWidget {
  const IndexInherited({
    Key key,
    @required Widget child,
  })  : assert(child != null),
        super(key: key, child: child);

  static IndexInherited of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType(aspect: IndexInherited) as IndexInherited;
  }

  @override
  bool updateShouldNotify(IndexInherited old) {
    return false;
  }
}

Flutter中运行命令

有小伙伴可能会疑惑,fluct create运行之后会发现未找到命令,可能你使用了flutter pub global activate fluct命令激活,这个时候,我们可以使用flutter pub run fluct create运行

最后,希望大家喜欢这个工具,并关注我,了解更多关于Flutter/Dart开发

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DartVM服务器开发(第九天)--Aqueduct环境搭建

    运行pub global activate aqueduct命令(运行之前,请确保科学上网或设置代理)

    rhyme_lph
  • DartVM服务器开发(第五天)--日志工具

    上面代码的level就是下面onRecord监听能覆盖的范围,我们传入ALL,就是全部的日志输出都监听,LogRecord是一个日志记录类,里面包换的日志的相关...

    rhyme_lph
  • DartVM服务器开发(第二天)--处理请求

    在上一节中,我们对所有请求都回复它一个Hello World!这个信息,我们现在改变一下,添加一个方法,传入request,把Hello World!这一条注释...

    rhyme_lph
  • 将文本文件的内容存储在DataSet中的方法总结

        项目中比较多的会对文件进行操作,例如文件的上传下载,文件的压缩和解压等IO操作。在.NET项目中较多的会使用DataSet,DataTable进行...

    彭泽0902
  • VR游戏《Archangel:Hellfire》丨为了自由,战斗吧,机甲勇士们!

    前段时间,好莱坞制片公司Skydance旗下的Skydance Interactive宣布更新了VR机甲游戏《Archangel:Hellfire》,支持HTC...

    VRPinea
  • Object.assign()用法

    用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

    薛定喵君
  • 2017年大数据领域薪资有多高?

    IT派 - {技术青年圈} 持续关注互联网、大数据、人工智能领域 互联网在经历前几年的繁荣之后,现在开始进入寒冬,资本家不再像以前那样大胆地投资,纷纷攥紧自己...

    IT派
  • CMU2018年春季课程: 深度学习——Bhiksha Raj主讲(附PPT和video)

    【导读】近期,卡耐基梅隆大学深度学习春季课程开课了!课程的主讲老师是卡耐基梅隆大学计算机学院的BhikshaRaj,课程内容涵盖了深度学习的基础内容:深度学习介...

    WZEARW
  • ip地址查询

    <?php Class IPQuery{ private static $_requestURL = 'http://ip.taobao.com/ser...

    joshua317
  • android Handler机制之ThreadLocal详解

    概述 我们在谈Handler机制的时候,其实也就是谈Handler、Message、Looper、MessageQueue之间的关系,对于其工作原理我们不做详解...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券