Giter VIP home page Giter VIP logo

flutter's Introduction

Top Langs

🛠 Tech Stack

JavaScript TypeScript

Node.js Vue React NestJs Vite Nuxt Git GitHub Docker

JavaScript工具:

  1. ESLint,代码格式
  2. Lodash.js,功能齐全并且很强大的JavaScript工具库,精简代码;
  3. TypeScript,静态类型

Git 提交规范:

  • feat 增加新功能
  • fix 修复问题/BUG
  • Optimize:需要填写对应需求来源
  • style 代码风格相关无影响运行结果的
  • perf 优化/性能提升
  • refactor 重构
  • revert 撤销修改
  • test 测试相关
  • docs 文档/注释
  • chore 依赖更新/脚手架配置修改等
  • workflow 工作流改进
  • ci 持续集成
  • types 类型定义文件更改
  • wip 开发中

Git 生僻的命令:

  • git update-index --assume-unchanged 文件路径,暂时忽略文件的变更
  • git reset --hard 目标版本号:将版本回退
  • git merge targetbranch:将targetbranch合并到当前分支

Linux命令:

  • scp /path/to/local/file username@server:/path/to/server/directory 终端命令上传文件至服务器

flutter's People

Watchers

 avatar

flutter's Issues

distributionUrl指向本地

#distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
distributionUrl=file\:///D\:/code/gradle-6.7-all.zip

flutter时间戳转化

/*  时间戳转字符串
* timestamp 时间戳
* formart :"y-m":年和月之间的符号,
* "m-d":月和日之间的符号
* "h-m":时和分之间的符号,
* "m-s":分和秒之间的符号;
* "m-a":是否显示上午和下午
*/

class Utils {
  static String dateAndTimeToString(var timestamp,
      {Map<String, String> formart}) {
    if (timestamp == null || timestamp == "") {
      return "";
    }
    String targetString = "";
    final date = new DateTime.fromMicrosecondsSinceEpoch(timestamp * 1000);
    // final String tmp = date.toString();
    String year = date.year.toString();
    String month = date.month.toString();
    if (date.month <= 9) {
      month = "0" + month;
    }
    String day = date.day.toString();
    if (date.day <= 9) {
      day = "0" + day;
    }
    String hour = date.hour.toString();
    if (date.hour <= 9) {
      hour = "0" + hour;
    }
    String minute = date.minute.toString();
    if (date.minute <= 9) {
      minute = "0" + minute;
    }
    String second = date.second.toString();
    if (date.second <= 9) {
      second = "0" + second;
    }
    // String millisecond = date.millisecond.toString();
    String morningOrafternoon = "上午";
    if (date.hour >= 12) {
      morningOrafternoon = "下午";
    }

    if (formart["y-m"] != null && formart["m-d"] != null) {
      targetString = year + formart["y-m"] + month + formart["m-d"] + day;
    } else if (formart["y-m"] == null && formart["m-d"] != null) {
      targetString = month + formart["m-d"] + day;
    } else if (formart["y-m"] != null && formart["m-d"] == null) {
      targetString = year + formart["y-m"] + month;
    }

    targetString += " ";

    if (formart["m-a"] != null) {
      targetString += morningOrafternoon + " ";
    }

    if (formart["h-m"] != null && formart["m-s"] != null) {
      targetString += hour + formart["h-m"] + minute + formart["m-s"] + second;
    } else if (formart["h-m"] == null && formart["m-s"] != null) {
      targetString += minute + formart["m-s"] + second;
    } else if (formart["h-m"] != null && formart["m-s"] == null) {
      targetString += hour + formart["h-m"] + minute;
    }

    return targetString;
  }
}

组件状态

无状态组件:静态组件,或者是说外部传入数据转化为页面展示的内容,只渲染一次;

有状态组件:是定义交互逻辑和业务数据,具有动态交互的内容界面,页面根据数据的变化多次渲染

组件生命周期

createState:在Statefulwidget中创建State的方法,当Statefulwidget执行时会立即执行createState。

initState,初始化state的各个变量,同时也可以通过服务端获取数据后调用setState()来设置state。

didChangeDependencies,在该组件的state发生改变时,【state为全局,如主题、语言等等参数】;

build:返回需要渲染的widget,因为build被执行多次,所以在build函数中只能做返回widget的逻辑;

reassemble:主要是在开发阶段使用,在debug模式下,每次热启动都会执行该方法;

didUpdateWidget:在组件重新构建,父组件发生build变化时,子组件会调用该组件,之后会再次调用本组件的build方法;

deactivate:在组件被移除节点后调用。如果没有被插到其他的节点,则调用dispose永久移除组件;

dispose:永久移除组件,释放该组件的资源

flutter生命周期源码

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:intl/intl.dart';

class App extends StatefulWidget {
  @override
  createState() {
    print("创建state");
    return AppState();
  }
}

class AppState extends State<App> {
  DateTime now = DateTime.now();
  int count = 90;
  String name = "测试";
  @override
  void initState() {
    print("初始化state");
    super.initState();
  }

  @override
  void didChangeDependencies() {
    print("state发生改变了");
    super.didChangeDependencies();
  }

  @override
  void didUpdateWidget(covariant App oldWidget) {
    count++;
    super.didUpdateWidget(oldWidget);
  }

  @override
  void deactivate() {
    print("deactivate");
    super.deactivate();
  }

  @override
  void dispose() {
    print("永久移除组件");
    super.dispose();
  }

  @override
  void reassemble() {
    print("reassemble");
    super.reassemble();
  }

  void changeName() {
    setState(() {
      print("设置state");
      this.name = "flutter";
    });
  }

  @override
  Widget build(BuildContext context) {
    // getCurrentTime("dhfg");
    return Scaffold(
      appBar: AppBar(
        title: Text(
          "下午好!小何",
          style: TextStyle(
            color: Colors.white,
          ),
        ),
      ),
      body: Container(
        child: Column(
          children: [
            Container(
              decoration: BoxDecoration(
                color: Colors.red,
                border: Border.all(
                  color: Colors.red,
                  width: 0.3,
                ),
              ),
              height: 200,
              child: new Swiper(
                itemBuilder: (BuildContext context, int index) {
                  return new Image.network(
                    "https://tse3-mm.cn.bing.net/th/id/OIP.llTGkZjpc-7YxclmweQw-QHaFF?pid=Api&rs=1",
                    fit: BoxFit.fitWidth,
                  );
                },
                itemCount: 3,
                // pagination: new SwiperPagination(),
                autoplay: true,
                // control: new SwiperControl(),
              ),
            ),
            Container(
              padding: EdgeInsets.all(40),
              decoration: BoxDecoration(
                border: Border.all(
                  color: Colors.red,
                  width: 0.2,
                ),
                // borderRadius: BorderRadius.only(topLeft: 12, topRight: 12),
              ),
              child: FlatButton(
                child: Text("$name   $count"),
                onPressed: () => {
                  this.changeName(),
                },
              ),
            ),
            Container(
              child: Sub(),
            ),
          ],
        ),
      ),
    );
  }
}

class Sub extends StatefulWidget {
  @override
  createState() {
    return SubState();
  }
}

class SubState extends State<Sub> {
  String name = "新测试";
  String currentTieStr;

  @override
  void initState() {
    print("sub  init  state");
    super.initState();
    this.currentTieStr = this.getcurrentTime();
    refreshTimeStr();
  }

  String getcurrentTime() {
    DateTime now = DateTime.now();
    var nowTime = DateFormat("yy-MM-dd  hh:mm:ss");
    return nowTime.format(now);
  }

  void refreshTimeStr() {
    const period = Duration(milliseconds: 900);
    Timer.periodic(period, (timer) {
      setState(() {
        this.currentTieStr = getcurrentTime();
      });
    });
  }

  @override
  void didChangeDependencies() {
    print("sub did change dependencies");
    super.didChangeDependencies();
  }

  @override
  void didUpdateWidget(covariant Sub oldWidget) {
    print("sub did update widget");
    super.didUpdateWidget(oldWidget);
  }

  @override
  void deactivate() {
    print("sub dispose");
    super.deactivate();
  }

  @override
  void reassemble() {
    print("sub  reassemble");
    super.reassemble();
  }

  @override
  Widget build(BuildContext context) {
    print(this.currentTieStr);
    return Text(this.currentTieStr);
  }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.