Я создаю приложение TodoList с флаттером. Когда я добавляю Dissmissable To The List, он не отображается на экране. Это в списке однако. Как это исправить?
Уже пробовал, успешно или нет, добавить ValueListener, который обновляется при каждом добавлении элемента, поэтому он устанавливает setState () {} для обновления. Не работает. Попытался запустить метод (buildListView ()) в качестве тела Scaffold. Это работает просто отлично. Попытка добавления указанного метода в список виджетов, которые будут дочерними элементами табуляции как тела. Это не сработало, очевидно, поэтому я создал Stateful Widget Class, возвращая именно этот метод. И он просто не обновляет его визуально, в то время как я вижу, как новые Listmembers напечатаны в консоли.
Home
class Home extends StatefulWidget {
final String title;
final Values values = Values();
Home({this.title});
List<String> items = ['123'];
List<String> itemsDone = [];
addstring(String str) {
items.add(str);
}
add(int idx) {
this.itemsDone.add(this.items[idx]);
}
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final Home home = Home();
final BuildList buildList = BuildList();
final _BuildListState buildListState = _BuildListState();
final TextEditingController textEditingController = TextEditingController();
final PageController pageController = PageController(initialPage: 1);
final List<Widget> _pages = <Widget>[
BuildList(),
new Container(height: double.maxFinite, width: double.maxFinite, color: Colors.pink,)
];
get idontknowaddstring => buildListState.addString;
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Center(child: Text(home.values.apptitle)),
elevation: 0.0,
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add, color: Colors.white,),
onPressed: () {
showDialog<String>(
context: context,
builder: (BuildContext context) => SimpleDialog(
title: Text('Add A Task'),
children: <Widget>[
ListTile(
leading: Icon(Icons.add),
title: TextField(
decoration: InputDecoration(
hintText: 'Describe Thoroughly'),
onSubmitted: (str) {
home.addstring(str);
print(home.items);
setState(() {});
textEditingController.clear();
Navigator.pop(context);
}),
)
],
));
},
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
body: buildListMethod(),
);
}
Метод
Column buildListMethod() {
return Column(
children: <Widget>[
new Expanded(
child: Container(
//color: Colors.transparent,
decoration: new BoxDecoration(
color: Colors.white,
borderRadius:
BorderRadius.only(topLeft: Radius.circular(75))),
child: Padding(
padding: const EdgeInsets.only(top: 75),
child: new ListView.builder(
itemCount: home.items.length,
itemBuilder: (context, index) {
final String item = home.items[index];
// Each Dismissible must contain a Key. Keys allow Flutter to uniquely
// identify Widgets.
return Dismissible(
key: Key(item),
// We also need to provide a function that tells our app what to do
// after an item has been swiped away.
onDismissed: (DismissDirection dir) {
dir == DismissDirection.startToEnd ? null : home.add(index);
setState(() => this.home.items.removeAt(index));
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text(dir == DismissDirection.startToEnd
? '$item removed.'
: '$item completed.'),
action: SnackBarAction(
label: 'UNDO',
onPressed: () {
setState(
() => this.home.items.insert(index, item));
},
),
),
);
},
// Show a red background as the item is swiped away
background: Container(
color: Colors.red,
child: Icon(Icons.delete),
alignment: Alignment.centerLeft,
),
// Background when swipping from right to left
secondaryBackground: Container(
color: Colors.green,
child: Icon(Icons.thumb_up),
alignment: Alignment.centerRight,
),
child: ListTile(
title: Center(child: Text('${home.items[index]}')),
),
);
},
),
),
),
),
],
);
Stateful Widget Class
class TasksScreen extends StatefulWidget {
@override
_TasksScreenState createState() => _TasksScreenState();
}
class _TasksScreenState extends State<TasksScreen> {
final _HomeState homeState = _HomeState();
final Home home = Home();
@override
void initState() {
// TODO: implement initState
super.initState();
setState(() {
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: homeState.buildListMethod(),
);
}
}
Я ожидал, что он будет работать нормально, думая, что если я верну метод, и он заработает, вернет класс, который возвращает тот же метод, который должен работать точно так же. Это не так.