为什么颤振中的热重载会影响构建方法内部增加的静态变量?

问题描述

我正在尝试以下代码,在热重载时它正在增加静态变量 checkIfIncremented 变量。请有人解释我为什么会这样??

import 'package:Flutter/material.dart';
void main()=>runApp(MaterialApp(
  home: TrialApp(),));
class TrialApp extends StatefulWidget {

  @override
  _TrialAppState createState() => _TrialAppState();
}

class _TrialAppState extends State<TrialApp> {
  static int checkIfIncremented = 0;
  @override
  Widget build(BuildContext context) {
    checkIfIncremented++;
    return Scaffold(
      body: Center(
        child: Text("This variable is getting incremented after each hot reload : $checkIfIncremented"),),);
  }
}

解决方法

这个问题是由于每次热重载程序时,构建方法都会自动运行。所以你应该避免在这个函数中使用 checkIfIncremented++;。 我不确定您为什么使用此代码以及您的目的是什么,但是如果您只想在第一次加载时增加checkIfIncremented,您可以使用此代码:

bool firstLoad = true;

 @override
void didChangeDependencies() {
  super.didChangeDependencies();
  if(firstLoad){
     checkIfIncremented++;
     firstLoad = false;
     setState((){});
  }
}