English 中文(简体)
B. 保持不按预期工作的国家
原标题:Keeping state alive not working as expected
  • 时间:2024-02-01 18:47:00
  •  标签:
  • flutter

从底是我简化的法典,以代表我的问题。 但首先,请允许我就我所面临的问题作一些解释。

我们在此有网页上的>Text Field。 在submit()上,我需要从每一页收集所有数据,因此每页<代码>。 自动KeepAliveClientMisy.wantKeepAlive是压倒一切的,收益价值被设定为true

不幸的是,情况并非如此。 在编辑第十页的<代码>Text Field 价值之后,跃至Y页,重点从X页的<代码>Text Field上移至Y页Text Field。 排在X位,使我从收到<条码>Text Field到<条码>。

我在哪里错了? 我只想拿到这些数值,而不必界定括号中的/code>。

class TheScreen extends StatefulWidget{

  Map data;

  TheScreen(this.data);

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

class TheScreenState extends State<TheScreen>{

  GlobalKey<ViewPageState> keyX = GlobalKey<ViewPageState>();
  GlobalKey<ViewPageState> keyY = GlobalKey<ViewPageState>();
  PageController controller = PageController();

  @override
  Widget build(BuildContext context) {
    ...
    PageView pageview = PageView(controller : controller, children : [
      ThePage(keyX, widget.data[ X ]),
      ThePage(keyY, widget.data[ Y ])
    ]);
    ...
  }

  @override
  initState(){
    keyX.currentState?.populate();
    keyY.currentState?.populate();
  }

  Future submit() async{
    Map map = {
       X  : keyX.currentState?.data;
       Y  : keyY.currentState?.data;
    };
    Navigator.of(context).pop(map);
  }
}

class ThePage extends StatefulWidget{

  GlobalKey<ThePageState> key;
  Map data;
  TextEditingController tecA = TextEditingController();
  TextEditingController tecB = TextEditingController();
  TextEditingController tecC = TextEditingController();

  ThePage(this.key, this.data);

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

class ThePageState extends State<ThePage> with AutomaticKeepAliveClientMixin<ThePage>{

  PageController pvc = PageController();

  @override
  bool get wantKeepAlive => true;

  @override
  Widget build(BuildContext context) {
    ...
    TextField tfA = TextField(controller : widget.tecA, ...);
    TextField tfB = TextField(controller : widget.tecB, ...);
    TextField tfC = TextField(controller : widget.tecC, ...);
    ...
  }

  void populate(){
    if(widget.tecA.text.isEmpty) widget.tecA.text = widget.data[ A ];
    if(widget.tecB.text.isEmpty) widget.tecB.text = widget.data[ B ];
    if(widget.tecC.text.isEmpty) widget.tecC.text = widget.data[ C ];
  }

  Map get data => {
     A  : widget.tecA.text,
     B  : widget.tecB.text,
     C  : widget.tecC.text
  };
}
问题回答

希望有人得到比这更好的答案。 我认为这并不是绝对的选择。 但正如现在一样,它解决了我的案件。 我只是从<代码>直接检索数据。 ThePages.

缩略语

ThePage? pageX, pageY;
    
@override
Widget build(BuildContext context) {
   ...
   pageX = ThePage(widget.data[ X ]),
   pageY = ThePage(widget.data[ Y ])
   ...
}

Future submit() async{

   Map map = {
      X  : pageX?.data;
      Y  : pageY?.data;
   };
   Navigator.of(context).pop(map);
}

http://www.ohchr.org。

Map get data => {
   A  : tecA.text,
   B  : tecB.text,
   C  : tecC.text
};




相关问题
Flutter App cannot be installed on Android TV

I m building a Flutter app that should support Android TV and Mobile devices. Despite Google Play shows that it is supported, I cannot install app on my MiBox device. While trying to install it, both ...

Moving the icon button to the right causes rendering issues

I am trying to align the icon button to the right of the Text field, I tried the row which made the icon button not centered vertically and now I am trying out the Stack widget. Here is my code - ...

热门标签