ishak Akdaş
ishak Akdaş

Reputation: 53

flutter - clear the widget cache

When I leave a page when I work with flutter and then re-enter it, the old values are saved.

I don't want this to happen.

For example, when I first enter:

int number = 1;

class TestPage extends StatefulWidget {
  @override
  _TestPageState createState() => _TestPageState();
}

bool donus = true;

class _TestPageState extends State<TestPage> {
  List<Todo> sorular = new List<Todo>();

  @override
  void initState() {
    print(donus);
    super.initState();
    getTodos();
  }

  bool pressAttention = true;
  String ileri = "İleri", geri = "Geri";
  @override
  Widget build(BuildContext context) {number++;
   print(number);

output:1

Second entry to the page: output:2

I do not know how to fix this.

Upvotes: 0

Views: 3490

Answers (1)

Alex Meuer
Alex Meuer

Reputation: 1779

The scope of your number variable is outside the scope of your page and its state.

number is essentially static or global, and its lifetime is tied to your application's. Tighten up its scope so that it is declared within your state class and initialise it in your initState method (for private non-final variables).

class TestPage extends StatefulWidget {
  @override
  _TestPageState createState() => _TestPageState();
}

bool donus = true;

class _TestPageState extends State<TestPage> {
  List<Todo> sorular = new List<Todo>();
  int _number;

  @override
  void initState() {
    _number = 1;
    print(donus);
    super.initState();
    getTodos();
  }

  bool pressAttention = true;
  String ileri = "İleri", geri = "Geri";
  @override
  Widget build(BuildContext context) {
  _number++; // You probably don't want to increment every time you build,
             // but I have no idea what you're using `number` for.
  print(_number);

Your donus variable is also global, which is unlikely to be what you had intended. Dart is an object-oriented language; refer to the language tour for more details on classes, scope, etc.

Upvotes: 2

Related Questions