美文网首页
Flutter 热加载和热重启的区别

Flutter 热加载和热重启的区别

作者: 小冰山口 | 来源:发表于2023-12-04 21:35 被阅读0次

    随便写了个demo, 修改widget的颜色, 开启hot reload 发现并没有什么改变. 只有hot restart才有反应

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(build());
    }
    
    Widget build() {
      return MaterialApp(
          home: Scaffold(
        body: Center(
          child: ConstrainedBox(
            constraints: BoxConstraints.tight(const Size(100, 100)),
            child: Container(
              color: Colors.yellow,
              width: 30,
              height: 30,
            ),
          ),
        ),
      ));
    }
    

    跟记忆中的好像有点不太一样
    热加载(hot reload)热重启(hot restart)有什么区别呢?

    ·Hot reload loads code changes into the VM and re-builds the widget tree, preserving the app state; it doesn't rerun main( ) or initState().(command\ in Intellij and Android Studio,^F5 in VSCode)

    ·Hot restart loads code changes into the VM, and restarts the Flutter app, losing the app state. (↑command\ in IntelliJ and Android Studio,↑commandF5 in VSCode)

    热加载(hot reload)加载代码修改到虚拟机, 重新buildwidget树, 保留了app状态, 它不会重走main方法和initState方法(但会走build方法)

    热重启(hot restart)加载代码修改到虚拟机, 重启了Flutter app, 丢失了app状态, 它会重走main方法

    那么回到我上面的demo, 我这个widget是在main里面加载的, 但是hot reload并不会重走main, 所以改变是不会生效的. 但当你的改变在build方法里时, 就可以生效

    PS: VS上的快捷键

    Hot reload command + \ (Android Studio), control + F5 (VS Code)

    Hot reload shift + command + \ (Android Studio), shift + control + F5 (VS Code)

    这里有一个类似的问题

    相关文章

      网友评论

          本文标题:Flutter 热加载和热重启的区别

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