JHHK

欢迎来到我的个人网站
行者常至 为者常成

重点收集⭐️

目录

如何在不同的项目使用不同的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(),
);




R
Valine - A simple comment system based on Leancloud.