TabView не обновляет визуально элементы добавленного списка - PullRequest
0 голосов
/ 27 октября 2019

Я создаю приложение 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(),
    );
  }
}

Я ожидал, что он будет работать нормально, думая, что если я верну метод, и он заработает, вернет класс, который возвращает тот же метод, который должен работать точно так же. Это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...