【发布时间】:2019-11-13 19:02:49
【问题描述】:
我开始尝试从头开始构建一个简单的 ToDo 应用程序,而不是基于任何教程,因此我可以更好地学习,但现在我无法从等效的小部件访问 todos 数组。 .
为了让事情井井有条,我有以下结构:
lib
pages
home.page.dart
widgets
todo-card.dart
todo-empty.dart
main.dart
该应用程序是每个待办事项的卡片列表和用于创建新待办事项的 FAB。每张卡片都是一个删除按钮、待办事项文本的一部分和一个检查按钮。所有的待办事项都存储在 HomePage 类中:
pages/home.page.dart
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List todos = [
{'text': 'texto teste 1', 'checked': false},
{'text': 'texto teste 2', 'checked': true},
{'text': 'texto teste 3', 'checked': false},
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
...
),
backgroundColor: Theme.of(context).primaryColor,
body: this.todos.length > 0
? ListView.builder(
itemCount: this.todos.length,
itemBuilder: (context, index) {
Map item = this.todos[index];
return TodoCard(item['text'], item['checked']);
},
)
: TodoEmpty(),
floatingActionButton: FloatingActionButton(
...
),
);
}
}
卡牌结构: 小部件/todo-card.dart
class TodoCard extends StatefulWidget {
String text;
bool checked = false;
TodoCard(this.text, [this.checked = false]);
@override
_TodoCardState createState() => _TodoCardState();
}
class _TodoCardState extends State<TodoCard> {
@override
Widget build(BuildContext context) {
return Card(
child: Container(
padding: EdgeInsets.all(20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
IconButton(
icon: Icon(Icons.delete),
onPressed: () {
},
),
Expanded(
child: Text(
widget.text,
),
),
IconButton(
icon: widget.checked
? Icon(Icons.check_box)
: Icon(Icons.check_box_outline_blank),
onPressed: () {
setState(() {
if (widget.checked == true) {
widget.checked = false;
} else {
widget.checked = true;
}
});
},
),
],
),
),
);
}
}
我的问题是:如何从TodoCard 类中访问和删除HomePage 属性,以便从todos 列表中删除索引?
目前我不想使用 bloc、provider 或其他类似工具。由于我开始使用 Flutter,我想先掌握 setState()。
【问题讨论】:
标签: flutter