简体   繁体   中英

Flutter: how to passing variable from statefulwidget to other statefulwidget

I can't use the _count variables from DraggableWidget class to TheWidget class... From statefulWidget to statefulWidget... How to use _count variable from DraggableWidget class to TheWidget class...

class DraggableWidget extends StatefulWidget {
  String defaultText = "My Card";
  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());
    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 {
  @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(() {
      _count = _count + 1;
    });
  }
}

Check below code

import 'package:flutter/material.dart';

class DraggableWidget extends StatefulWidget {
  String defaultText = "My Card";
  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;
    });
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM