天天看點

flutter建立可移動的stack小部件

本文主要介紹我為桌面和 Web 設計的一個超級秘密 Flutter 項目使用了畫布和可拖動節點界面。本教程将展示我如何使用堆棧來使用小部件完成可拖動功能

如下所示。

flutter建立可移動的stack小部件

我們将動态地将項目添加到堆棧中并區分它們,我将使用 RandomColor 類型器。是以我們必須添加那個包。

然後我們可以建立包含我們的堆棧的 HomeView

class HomeView extends StatefulWidget {
  @override
  _HomeViewState createState() => _HomeViewState();
}

class _HomeViewState extends State<HomeView> {
  List<Widget> movableItems = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Stack(
          children: movableItems,
        ));
  }
}
           

功能非常簡單。我們将有一個

MoveableStackItem

有狀态的小部件。它會跟蹤自己的位置和顔色。顔色在初始化時設定,位置通過 更新

GestureDetector

class _MoveableStackItemState extends State<MoveableStackItem> {
  double xPosition = 0;
  double yPosition = 0;
  Color color;

  @override
  void initState() {
    color = RandomColor().randomColor();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Positioned(
      top: yPosition,
      left: xPosition,
      child: GestureDetector(
        onPanUpdate: (tapInfo) {
          setState(() {
            xPosition += tapInfo.delta.dx;
            yPosition += tapInfo.delta.dy;
          });
        },
        child: Container(
          width: 150,
          height: 150,
          color: color,
        ),
      ),
    );
  }
}
           

最後要做的是向

MoveableStackItem

視圖添加一個新的。我們将通過 HomeView 中的浮動操作按鈕來實作。

return Scaffold(
  floatingActionButton: FloatingActionButton(
    onPressed: () {
      setState(() {
        movableItems.add(MoveableStackItem());
      });
    },
  ),
  body: Stack(
    children: movableItems,
  ));
           

就是這樣。現在您的視圖上有一個可移動的Stack。