目录
如何在不同的项目使用不同的flutter sdk
一、安装 direnv
// 通过 brew 安装
brew install direnv
// 并在 shell 中启用(zsh):
echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
// 重新加载:
source ~/.zshrc
二、创建 .envrc
// 在项目根目录创建:
touch .envrc
// 内容如下:指定的使用flutter版本
export PATH="/Users/lixiaoyi/FlutterSDK/flutter/bin:$PATH"
// 然后执行:
direnv allow
三、修改ide的配置
以 Android Studio为例
左上角Android Studio - setting - 搜索 flutter - 输入指定的sdk路径
左上角Android Studio - setting - 搜索 dart - 查看dart是否执行flutter sdk 的目录内
四、验证
flutter --version
然后执行
flutter doctor
flutter pub get
A push B 的时候为什么会调用A的build方法
flutter的页面栈结构如下:
MaterialApp
└── Navigator
└── Overlay
├── Route A (Page A)
├── Route B (Page B)
└── Route C (Page C) ← top
Route A、B都是一颗独立的子树
每次push一个新的页面时,就是增加一颗新的子树C
增加后会触发Navigator的build方法,重新绘制页面,所以会调用A的、B的 build方法
flutter的页面栈,如何拦截手势返回
PopScope只能监听到发生了pop,并不能做到拦截手势
PopScope(
canPop: true, // 是否允许返回
onPopInvokedWithResult: (bool didPop, dynamic result) {
print('Flutter 页面触发返回(包括手势)-with-result $result');
},
child:Container(),
);