在if结构中定义时被视为未定义的变量



我对Flutter很陌生,我面临一个小问题。受官方网站上Flutter教程第二部分的启发,我想在数组为空时显示一条错误消息。

错误代码如下:

Undefined name 'divided'.
Try correcting the name to one that is defined, or defining the name.

代码为:

void _showSaved() {
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (BuildContext context) {
if (_saved.isEmpty) {
final Text divided = Text('List is empty');
} else {
final Iterable<ListTile> tiles = _saved.map(
(WordPair pair) {
return ListTile(
title: Text(
pair.asPascalCase,
style: _biggerFont,
),
);
},
);
final ListView divided = ListView(
children: ListTile.divideTiles(
context: context,
tiles: tiles,
).toList());
}
return Scaffold(
appBar: AppBar(
title: Text('Saved Suggestions'),
),
//body: _saved.isEmpty ? Text('List is empty') : ListView(children: divided),
body: divided);
},
),
);
}

变量是在if条件中定义的,但VSCode仍然显示变量未定义的错误。是不是有什么我不太理解的地方?

就您的信息而言,使用内联条件确实有效(代码示例中的注释行(。

谢谢!

您的变量divided的作用域仅在if和else块的大括号之间这样定义它解决了问题:

void _showSaved() {
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (BuildContext context) {
var divided;
if (_saved.isEmpty) {
divided = Text('List is empty');
} else {
final Iterable<ListTile> tiles = _saved.map(
(WordPair pair) {
return ListTile(
title: Text(
pair.asPascalCase,
style: _biggerFont,
),
);
},
);
divided = ListView(
children: ListTile.divideTiles(
context: context,
tiles: tiles,
).toList());
}
return Scaffold(
appBar: AppBar(
title: Text('Saved Suggestions'),
),
//body: _saved.isEmpty ? Text('List is empty') : ListView(children: divided),
body: divided);
},
),
);
}

最新更新