Home > Back-end >  How to change the display order in Stack
How to change the display order in Stack

Time:11-17

I need to randomly change the order of the button in the stack when clicking on it, how can I do this?

Here is the code for an example, 4 buttons in the stack one after the other, when you click on any, I would like them to randomly change the order in the stack.

Could you tell me how I can do this?

       class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key,}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  Widget build(BuildContext context) {
    


    return Scaffold(
      body: Stack(
      children: [
        Positioned(
        height: 700,
        width: 700,
        child: SizedBox(
          child: ElevatedButton(
            onPressed: () {
              setState(() {
              });
            }, child: Text('1'), 
          ),
         ),
      ),
        Positioned(
        height: 600,
        width: 600,
        child: SizedBox(
          child: ElevatedButton(
            onPressed: () {
              setState(() {
              });
            }, child: Text('2'), 
          ),
         ),
      ),

        Positioned(
        height: 500,
        width: 500,
        child: SizedBox(
          child: ElevatedButton(
            onPressed: () {
              setState(() {
              });
            }, child: Text('3'), 
          ),
         ),
      ),

        Positioned(
        height: 400,
        width: 400,
        child: SizedBox(
          child: ElevatedButton(
            onPressed: () {
              setState(() {
              });
            }, child: Text('4'), 
          ),
         ),
      ),
      ]
    )
  );
  }
}

CodePudding user response:

Put all buttons in a list and assign them as children to the Stack and when any button is pressed shuffle this list and rebuild the widget.

class _TestPageState extends State<TestPage> {
  late List<Widget> children;

  @override
  void initState() {
    super.initState();

    children = [
      Positioned(
        height: 700,
        width: 700,
        child: SizedBox(
          child: ElevatedButton(
            onPressed: onPressed,
            child: Text('1'),
          ),
        ),
      ),
      Positioned(
        height: 600,
        width: 600,
        child: SizedBox(
          child: ElevatedButton(
            onPressed: onPressed,
            child: Text('2'),
          ),
        ),
      ),
      Positioned(
        height: 500,
        width: 500,
        child: SizedBox(
          child: ElevatedButton(
            onPressed: onPressed,
            child: Text('3'),
          ),
        ),
      ),
      Positioned(
        height: 400,
        width: 400,
        child: SizedBox(
          child: ElevatedButton(
            onPressed: onPressed,
            child: Text('4'),
          ),
        ),
      ),
    ];
  }

  void onPressed() {
    setState(() {
      children.shuffle();
    });
  }

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