【问题标题】:Flutter reload init state of a child widgetFlutter 重新加载子小部件的初始状态
【发布时间】:2020-11-30 15:13:07
【问题描述】:

我尝试在 Navigator.pop 上重新加载我的页面,然后我执行以下操作:

Flutter - How to get notified when the page I pushed was popped by back button?

但是当我在我的父页面中时:

refresh() async{
  await _immagineBloc.getNomiImmagini(_deviceName);
  setState(() {
    _index = 0;
  });
}

这不会在 selectPhoto 初始化状态中返回:

Widget build(BuildContext context) {
  _tabs = getTabs(2);
  return StreamBuilder(
        stream:  _immagineBloc.immaginiName,
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return new MaterialApp(
                home: DefaultTabController(
                  length: 2,
                  child: Scaffold(
                    appBar: AppBar(
                        centerTitle: true,
                        title: Text('App Drive'),
                        backgroundColor: Colors.blueAccent,
                        bottom: TabBar(
                            isScrollable: false,
                            indicatorColor: Colors.white,
                            onTap: (int index) {
                              _index = index;
                              setIndex(index);
                            },
                            tabs: _tabs)
                    ),
                    body: _index  == 0 ? selectPhoto(snapshot, refresh) : ImageOnServer(snapshot, _deviceName),
                  ),

如何重新进入selectPhoto里面的init状态?

刷新方法调用后我想重新进入的类的初始化状态:

 class selectPhoto extends StatefulWidget {
 @override
 final Function() notifyParent;
 selectPhoto(AsyncSnapshot<dynamic> snapshot, @required 
 this.notifyParent){
   _snapshot = snapshot;
 }
 AsyncSnapshot<dynamic> _snapshot;
 _selectPhotoState  createState() => _selectPhotoState (_snapshot);
 }

 class _selectPhotoState extends State<selectPhoto> {
    _selectPhotoState(AsyncSnapshot<dynamic> snapshot) {
    _snapshot = snapshot;
    @override
    void initState() {
       super.initState();
         _fetchNewMedia(_snapshot); // i wan't to re enter here on reload method enter
       }
    }

在构建中我有:

 onPressed: () =>
                  Navigator.push(
                      context,
                      MaterialPageRoute(builder: (context) => photoSelection(_imagesIds, _deviceName, _imageNames))
                  ).then((val) {
                    if (val == 'pop') {
                      widget.notifyParent();
                      };
                  })
                        

请帮助我!

【问题讨论】:

    标签: flutter


    【解决方案1】:

    将此方法添加到 selectPhoto 类解决:

    void _reset() {
       Navigator.pushReplacement(
         context,
         PageRouteBuilder(
            transitionDuration: Duration.zero,
            pageBuilder: (_, __, ___) =>MyApp(),
         ),
       );
     }
    

    并在里面调用:

     onPressed: () =>
                  Navigator.push(
                      context,
                      MaterialPageRoute(builder: (context) => photoSelection(_imagesIds, _deviceName, _imageNames))
                  ).then((val) {
                    if (val == 'pop') {
                      widget.notifyParent();
                      _reset();
                      };
                  })
    

    这会将我返回到我的父小部件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-26
      • 2020-11-28
      • 2020-03-18
      • 2018-09-01
      • 2021-06-29
      • 2020-03-18
      • 2019-06-26
      • 1970-01-01
      相关资源
      最近更新 更多