首页 > 解决方案 > Flutter / Dart:尽管设置了状态变量但未设置

问题描述

我根本无法从中做出正面或反面。所以,这是主要的小部件:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Anliegen Foo',
      home: Home(),
    );
  }
}

而 Home 小部件应该是有状态的,因此定义如下:

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  int _currentIndex = 42;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Foo - $_currentIndex"),
      ),
      body: Text('bar baz'),
    );
  }
}

与官方文档建议您执行此操作的方式类似。

您会期望 AppBar 的标题是“Foo - 42”。但它是“Foo - 0”,即发现变量时发现它为空(因此似乎自动解释为 0)。调试器表示该变量存在并设置为 42,无论是在类的上下文中还是在构建函数中。这也适用于我尝试声明的任何其他内容 - 列表、字符串等,所有这些都未初始化但同时已初始化。

但是当我在构建方法中设置变量时,如下所示:

@override
  Widget build(BuildContext context) {
    _currentIndex = 42;
[...]

现在它开始工作了。

那么,我在哪里错了?

标签: dartflutter

解决方案


是的,谢谢你们,仅仅重建/热重启确实是答案。调试器以正确的值很好地显示了变量,而 Widget 确实依赖于热重载之前的旧类定义,这让我感到震惊。

tl; dr:重启或热重启。


推荐阅读