daily commit

This commit is contained in:
2022-04-13 15:53:57 +08:00
parent 1763f67e34
commit 9e408f7516
15 changed files with 770 additions and 704 deletions

View File

@@ -208,3 +208,10 @@
```shell
# 调用git rebase可以将一个分支基于另一个分支的改变replay到第三分支上
$ git rebase --onto target-branch base-branch topic-branch
```
* 相较于mergerebase操作可能会产生一些问题。
* 如一个分支已经被push到远程库且被其他协作者pull并在此基础之上进行开发工作。那么当分支的创建者在本地对分支进行rebase操作后再用git push --force命令对远程分支的history进行覆盖时那么其他协作者对更新之后的远程库进行pull操作merge操作会破坏history
* rebase操作的守则
* 一个rebase操作只能再本地库进行
* 一旦分支被push到远程库就有可能被其他开发者clone并在此基础之上进行修改
* 如果分支被push到远程库后那么就无法再进行rebase操作。因为rebase操作可能会破坏已有的history结构如果用git push --force强制覆盖remote仓库的hsitory结构那么其他开发者再次pull的时候就会进一步破坏history结构

View File

@@ -21,6 +21,12 @@
* 通过覆盖State对象的build方法返回一个Widget对象来显示StatefulWidget的UI
* 每次对State中维护的状态进行修改时都要调用setState方法并且传入一个函数
* 每次调用setState方法时都会重新调用build方法来对StatefulWidget的UI进行重新渲染
* StatefulWdiget管理状态的三种方式
* widget管理自己的状态
* 此时widget为stateful的并在state中存储状态信息
* 由父widget管理状态
* 此时widget是stateless的而父widget是stateful的当前无状态widget只负责显示信息而父widget则会通过构造函数向stateless widget传递存储在父widget中的状态信息父widget也会传递一个回调用来对存储在父widget中的数据进行修改
* 一部分状态存储在父widget中一部分状态存储在自身的widget中
* ## Flutter中的布局
* Row和Column通常用于创建行和列的布局
* mainAxisAlignment/crossAxisAlignment用于控制主轴和交叉轴如何对其元素
@@ -40,3 +46,56 @@
* title为行指定title信息
* subtilte为行指定附加信息如果isThreeLine为falsesubtitle不能换行如果为truesubtitle可以为两行
* leading为行定义icon
* ## 添加图片和资源
* 在flutter程序中通过pubspec.yaml中的flutter:assets来app需要的资源
* 资源变体:
* 当一个资源在pubspec.yaml中被指定时在该资源路径的同级子目录下具有相同名称的资源也会被包含。
```yaml
<!--
例如,当.../background.png文件在yaml文件中被指定时
.../dark/background.png文件也会被包含的app中
-->
flutter:
assets:
- img/background.png
- img/dark/background.png
```
* 加载文本资源:
* 可以通过rootBundle静态全局变量来加载资源
* 在当前构建上下文中通常推荐使用DefaultAssetBundle来获取文本资源相比较于rootBundleDefaultAssetBundle能够在运行时替换AssetBundle
* 在上下文之外可以使用rootBundle来导入文本资源
* 加载图片资源:
* 为了加载图片资源可以通过AssetImage来加载
* 使用依赖包中的图片在通过AssetImage来获取图象时需要指定package包名
* ## Navigation导航机制
* ### 从一个页面中传回数据
* 可以通过Navigator.push方法来将新页面压入该方法是异步方法应该要通过await关键字等待返回结果。
* Navigator.push方法接受如下参数
* contextBuildContext
* MaterialPageRouterbuilder:(context)=>return a widget here...)
* 可以通过Navigator.pop方法回退界面并且返回结果数据
* Navigator.pop方法接受如下参数
* context
* 返回的结果
* ### 从一个页面向另一个页面中传参
* 为了向另一个路由中进行传参可以在MaterialPageRouter中为settings赋值RouteSettings并且向arguments属性中加入参数
* 在另一个页面中可以通过Modal.of(context)方法来获取route对象
* ### 在两个路由之间进行跳转
* 在路由之间进行跳转可以分为如下部分
* 创建两个路由
* 使用Navigator.push来跳转到第二个路由
* 使用Navigator.pop回退到第一个路由
* ### 导航到命名路由中
* 步骤:
* 定义两个界面
* 定义路由
* 通过Navigator.pushNamed方法跳转到命名的路由
* 通过Navigator.pop方法返回
* 在创建命名路由时需要在MaterialApp中指定initialRoute属性和routes属性
* initialRoute属性指定开始时的路由路径
* routes属性指定了所有可用的命名路由以及为每个路由指定构建的Widget
* 通过Navigator.pushNamed方法可以跳转到指定的路由而不用像push方法一样指定builder
* ### 向命名路由传递参数
* 可以通过pushNamed方法中的arguments参数向命名路由传递参数传递的参数可以通过ModalRoute.of方法来获取参数位于settings.arguments属性中
* ### 为组件之间添加关联动画
* 可以通过Hero组件为组件之间添加关联