UIWidgets(三)——使用UIWidgets实现一个添加删除列表的小功能

using Unity.UIWidgets.engine;
using Unity.UIWidgets.widgets;
using Unity.UIWidgets.painting;
using System.Collections.Generic;
using System.Linq;
using System;

public class TodoListApp : UIWidgetsPanel
{
    protected override Widget createWidget()
    {
        return new TodoList();
    }

    class TodoList : StatefulWidget
    {
        public override State createState()
        {
            return new TodoListState();
        }
    }

    class TodoListState : State<TodoList>
    {
        private List<string> itemList = new List<string>()
        {
            "1",
            "2",
            "3"
        };

        public override Widget build(BuildContext context)
        {
            return
                BuilderManager
                .ListView()
                .SetChild
                (
                   BuilderManager
                   .Container()
                   .SetChild
                   (
                      BuilderManager
                      .Text()
                      .SetData("+")
                      .SetFontSize(50)
                      .EndText()
                   )
                   .SetAlignment(Alignment.bottomRight)
                   .EndContainer()
                   .OnTap
                   (
                       () =>
                       {
                           this.setState
                           (
                               () =>
                               {
                                   itemList.Add("new");
                               }
                           );
                       }
                   )
                )
                .SetChildren(TodoListViews)
                .EndListView();
        }

        private Widget[] TodoListViews
        {
            get
            {
                return itemList.Select
                    (
                        data => new ListItem
                        (
                            data,
                            () =>
                            {
                                this.setState
                                (
                                    () =>
                                    {
                                        itemList.Remove(data);
                                    }
                                );
                            }
                        )
                    ).ToArray();
            }
        }
    }

    public class ListItem : StatelessWidget
    {
        private string data;
        private Action action;

        public ListItem(string _data, Action _action)
        {
            data = _data;
            action = _action;
        }

        public override Widget build(BuildContext context)
        {
            return BuilderManager
               .Container()
               .SetChild
               (
                  BuilderManager
                  .Text()
                  .SetData(data)
                  .SetFontSize(30)
                  .EndText()
               )
               .EndContainer()
               .OnTap
               (
                   () =>
                   {
                       action();
                   }
               );
        }
    }
}

猜你喜欢

转载自blog.csdn.net/LLLLL__/article/details/105684087