Setstate 在小部件列表中不起作用

Setstate is not working inside list of widgets flutter

我的问题是我的 列表的 Raisedbutton 不改变位置 ontap 停留在小部件列表中 请帮帮我 并告诉我该代码有什么问题

  class Sticker extends 
StatefulWidget {
 Sticker({Key key}) : 
 super(key: key);
 @override
 _StickerState 
createState() => _ 
 StickerState();
 }

class _StickerState extends 
 State<Sticker> {
 Offset position = 
Offset(50, 100);
 List<Widget> list = [];
 @override
 Widget build(BuildContext 
context) {
   return Container(
  child: Stack(
    children: [
      Container(
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
      ),
      Positioned(
        left: 50,
        top: 50,
        child: 
          RaisedButton(
          onPressed: () {
            setState(
              () {
                list.add(
                  
             Positioned(
                    left: position.dx,
                    top: position.dy,
                    child: RaisedButton(
                    onPressed: () {                    
                      setState(() => position = Offset(50, 150));
                    },
                    ),
                  ),
                );
              },
            );
          },
        ),
      ),
        ...list
       ],
     ),
   );
 }
 }

我希望在我停留在列表中时点击它后,我的提升位置会发生变化 请帮我解决这个问题控制台没有错误

我认为您必须为列表中的每个按钮创建一个位置元素

List<Offset> position = Offset();


setState(() => position.add(Offset(50,150)));

您可以复制粘贴 运行 下面的完整代码
您可以使用 StatefulBuilder

list.add(StatefulBuilder(
            builder: (BuildContext context, StateSetter setState) {
          return Positioned(

工作演示

完整代码

import 'package:flutter/material.dart';

class Sticker extends StatefulWidget {
  Sticker({Key key}) : super(key: key);
  @override
  _StickerState createState() => _StickerState();
}

class _StickerState extends State<Sticker> {
  Offset position = Offset(50, 100);
  List<Widget> list = [];
  @override
  Widget build(BuildContext context) {
    print("build list.length ${list.length}");
    return Container(
      child: Stack(
        children: [
          Container(
            height: MediaQuery.of(context).size.height,
            width: MediaQuery.of(context).size.width,
          ),
          Positioned(
            left: 50,
            top: 50,
            child: RaisedButton(
              onPressed: () {
                setState(
                  () {
                    list.add(StatefulBuilder(
                        builder: (BuildContext context, StateSetter setState) {
                      return Positioned(
                        left: position.dx,
                        top: position.dy,
                        child: RaisedButton(
                          onPressed: () {
                            setState(() {
                              position = Offset(50, 150);
                            });
                          },
                        ),
                      );
                    }));
                  },
                );
              },
            ),
          ),
          ...list
        ],
      ),
    );
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Sticker(),
    );
  }
}