美文网首页
Flutter 代码规范整理

Flutter 代码规范整理

作者: Cheney2006 | 来源:发表于2020-03-10 15:00 被阅读0次

    Dart 语法简介

    Flutter是使用Dart语言开发的。

    Dart语言是基于类的纯面向对象语言。

    Dart 中的所有东西都是对象,包括数字、函数等,它们都继承自 Object,并且对象的默认值都是 null(包括数字)。

    Dart 中类和接口是统一的,类就是接口。

    Dart语法和java比较相似,熟悉java开发或者安卓开发会更容易理解Dart语言的语法规范。官宣: Dart语言的语法比JAVA更富有表现力。

    总的来说,谷歌的Flutter既然使用Dart语言开发,说明Dart语言在某些方面还是有比其他语言更突出的优势的。

    标识符

    在 Dart 中标识符有三种风格:

    • 大写驼峰:每个单词的第一个字母大写,包括第一个单词。
    • 小写驼峰:每个单词的第一个字母大写,除了 第一个单词一直小写,即使第一个单词是缩写。
    • 小写加下划线:只使用小写字母,即使是缩写,然后使用下划线_分隔。

    包名、文件名使用小写加下线划

    一些文件系统是不区分大小写的,所以许多项目要求文件名全小写。使用分隔符使得那种方式下名字仍然可读。使用下划线作为分隔符确保名字仍然是有效的 Dart 标识符。

    import 'package:flutter/material.dart';

    import 'package:english_words/english_words.dart';

    导入别名使用小写加下划线

    当导入包时, 如果涉及到别名 as, 一律使用小写+下划线方式

    import 'dart:math' as math;

    import 'package:english_words/english_words.dart' as ew;

    类型名使用大写驼峰

    类,枚举,自定义类型和参数类型,应该使用大写驼峰,且不能使用分隔符。

    class SliderMenu { ... }

    class HttpRequest { ... }

    typedef bool Predicate<T>(T value);

    甚至包括作为元数据注解的类。

    class Foo {
    const Foo([arg]);
    }

    @Foo(anArg)
    class A { ... }

    @Foo()
    class B { ... }

    其它标识符使用小写驼峰

    类成员,顶级的定义,变量,参数,命名参数使用小写驼峰。

    var item;

    HttpRequest httpRequest;

    void align(bool clearItems) {
    // ...
    }

    常量名称

    建议使用小写驼峰式命名

    但是你的项目中如果使用大写+下划线分割单词的方式,则可以继续使用这种方式

    这里有个小说明:最初dart中采用的大写+下划线方式,但是后来有一些变量需要修改为非const变量,就需要修改为小写驼峰式,后一律使用小写驼峰式

    const pi = 3.14;

    const defaultTimeout = 1000;

    final urlScheme = new RegExp('^([a-z]+):');

    class Dice {
    static final numberGenerator = new Random();
    }

    缩写相关

    大写首字母缩略词有点难以阅读,并且多个相邻的缩写可能导致模棱两可的名字。例如,一个以HTTPSFTP开始的名字,没有办法判断提及的是HTTPS FTP还是HTTP SFTP。

    为了避免这种情况,除了两个字母的首字母缩略词以及缩写词,其它的还是像常规单词那样首字母大写。(两个字母的缩写词,像 ID 和 Mr. 仍然首字母大写。)

    HttpConnectionInfo

    uiHandler

    IOStream

    HttpRequest

    Id

    DB

    规定代码的顺序

    为了保持文件的整洁,我们规定指令出现的顺序。每个部分应该使用空行隔开。

    在其它导入之前导入 “dart:”

    import 'dart:async';

    import 'dart:html';

    import 'package:bar/bar.dart';

    import 'package:foo/foo.dart';

    在相对导入之前导入 “package:”

    import 'package:bar/bar.dart';

    import 'package:foo/foo.dart';

    import 'util.dart';

    在其它导入前导入第三方 “package:”

    import 'package:bar/bar.dart';

    import 'package:foo/foo.dart';

    import 'package:my_package/util.dart';

    在所有导入之后的单独部分指定导出

    import 'src/error.dart';

    import 'src/foo_bar.dart';

    export 'src/error.dart';

    注释

    Dart的文档注释除了有 /** /外 ,还有 /// 。
    三斜杠一般单行文档注释使用,多行时每行有个三斜杠效果和/
    * */ 一样。

    1. 推荐使用///作为注释。
    2. Dart的文档注释中可以有markdown的标记语法
    3. 文件头统一注释模板

    /// @desp:

    /// @time ${DATE} {TIME} <br> /// @author \{USER}

    /// 主要用于文档注释来注释成员和类型。

    // 主要用于方法体内的注释

    ///item 点击
    void _itemClick() {
      
    
    _btnClick() {
      return () {
        //开始请求网络,显示提交框
        LcfarmUtil.showSubmitDialog(context);
        UserService.passwordVerify(_password, (data) {
          //成功回调
          //隐藏提交对话框
         
          Navigator.of(context).pop();
    
          LogUtil.v("登录成功");
    
          //进入修改密码页-静态路由表
          Navigator.pushNamed(context, Router.passwordUpdate,
              arguments: {"phone": "138****8175"});
        }, (HttpError error) {
          //失败回调
          //隐藏提交对话框
          Navigator.of(context).pop();
          LcfarmUtil.showTipDialog(context, error.message);
        });
      };
    }
    

    约定

    1. 函数体代码不宜过多,最好在20 - 30行以内 过多改用调用 一个方法中尽量只做一件事
    2. flutter嵌套层数最好3以内 改为调用
    3. 入参过多(4个以上),建议封类型
    4. 函数参数定义要写参数类型
    5. 加下划线代表private
    6. 不使用 new 创建(官方)
    7. if格式定死 条件判断请写好注释 不要嵌套太多的逻辑判断 不能超过3层
    if (true) {
        // aa
    } else {
        // bb
    }
    

    这样避免了else 悬挂的问题。

    if (isWeekDay) {
      print('Bike to work!');
    } else {
      print('Go dancing or read a book!');
    }
    
    1. 使用dartfmt 程序来格式化代码
    2. 避免一行的长度超过 80 个字符

    相关文章

      网友评论

          本文标题:Flutter 代码规范整理

          本文链接:https://www.haomeiwen.com/subject/wabwdhtx.html