添加新的小部件和可拖动的小部件

时间:2019-12-26 06:08:17

标签: flutter-web

我想在卡片中的 + 按钮单击时添加相同的窗口小部件,但是它不起作用。但是,单击“卡”按钮时,会继承前一张卡,而继承的仍然具有可拖动的小部件功能。有人可以帮我吗?

import 'package:flutter/material.dart';

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: <Widget>[
          DraggableWidget(
            offset: Offset(100.0, 100.0),
          ),
        ],
      ),
    );
  }
}

class DraggableWidget extends StatefulWidget {
  final Offset offset;

  DraggableWidget({Key key, this.offset}) : super(key: key);

  @override
  _DraggableWidgetState createState() => _DraggableWidgetState();
}

class _DraggableWidgetState extends State<DraggableWidget> {
  Offset offset = Offset(0.0, 0.0);
  int _count = 1;

  @override
  void initState() {
    super.initState();
    offset = widget.offset;
  }

  @override
  Widget build(BuildContext context) {
    List<Widget> _addWidget =
        new List.generate(_count, (int i) => TheWidget(_count));
    return Positioned(
      top: offset.dy,
      left: offset.dx,
      child: Draggable(
        child: Column(
          children: _addWidget,
        ),
        feedback: Container(
          width: 220.0,
          height: 100.0,
          color: Colors.blue.withOpacity(0.3),
        ),
        onDraggableCanceled: (v, o) {
          setState(() {
            offset = o;
          });
        },
      ),
    );
  }
}

class TheWidget extends StatefulWidget {
  int _count = 1;
  TheWidget(this._count);

  @override
  _TheWidgetState createState() => _TheWidgetState();
}

class _TheWidgetState extends State<TheWidget> {
  String defaultText = "My Card";

  @override
  Widget build(BuildContext context) {
    return Card(
      color: Colors.orange[400],
      child: Center(
        child: Padding(
          padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 40),
          child: Row(
            children: <Widget>[
              Text(
                defaultText,
                style: TextStyle(
                  fontSize: 18.0,
                ),
              ),
              SizedBox(
                width: 15.0,
              ),
              IconButton(
                icon: Icon(
                  Icons.add,
                  size: 18.0,
                ),
                onPressed: _addNewCard,
                color: Colors.black87,
              ),
            ],
          ),
        ),
      ),
    );
  }

  void _addNewCard() {
    setState(() {
      widget._count = widget._count + 1;
    });
  }
}

If the + button clicked the new Card have been created inherits the current Card. But still have the draggable features.

0 个答案:

没有答案