需要从其他有状态小部件更新布尔标志

Posted

技术标签:

【中文标题】需要从其他有状态小部件更新布尔标志【英文标题】:Need to update a boolean flag from other stateful widget 【发布时间】:2019-04-18 14:05:52 【问题描述】:

我正在尝试为网络错误页面创建一个单独的有状态小部件,但我被困在如何通过 networkerror.dart 更新welcome.dart 中的布尔标志

NetworkError.dart

  class NetworkError extends StatefulWidget 
@override
  State<StatefulWidget> createState() 
    return NetworkErrorState() ;
  

class NetworkErrorState extends State<NetworkError>


  @override
  Widget build(BuildContext context) 
    return Container(

      child: Center(
          child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Image.asset('assets/no_network.png'),
          RaisedButton(
            color: Color(0xff7F00FF),
            child: Text(
              'Retry',
              style: TextStyle(
                  color: Colors.black, letterSpacing: 2.0, fontSize: 15.0),
            ),
            onPressed: () 

              NetworkUtil().netcheck(context).then((result) 
                if (result) 
                WelcomePage().createState().isConnected=true;
                 else 
                WelcomePage().createState().isConnected=false;
                
              );
            ,
          )
        ],
      )),
    );
  

Welcome.dart

  @override
  Widget build(BuildContext context) 
    return Scaffold(
        drawer: Drawer(
          child: ListView(
            children: drawerWidgets(),
          ),
        ),
        key: _scaffoldKey,

        body: isConnected
            ? isLoading
                ? showSpinner()
                : Container(
                    child: Center(
                      child: ListView(
                        shrinkWrap: true,
                        children: <Widget>[
                          Center(
                            child: Container(
                              padding: const EdgeInsets.all(16.0),
                              child: Form(
                                child: Column(
                                  crossAxisAlignment:
                                      CrossAxisAlignment.stretch,
                                  children: submitWidgets(context),
                                ),
                              ),
                            ),
                          )
                        ],
                      ),
                    ),
                  )
            : NetworkError(),
      ),
    );
  

当网络数据可用时,我想将 isConnected 布尔标志从 network.dart 更新为 true。抱歉,如果不能让它更简单。谢谢

【问题讨论】:

How to Set/Update Sate of StatefulWidget from other StatefulWidget in Flutter?的可能重复 【参考方案1】:

您可以使用ScopedModel 或 BloC 来更改应用中任何位置的不同小部件的状态。

【讨论】:

感谢您的回复,我确实使用回调函数方法解决了我的问题

以上是关于需要从其他有状态小部件更新布尔标志的主要内容,如果未能解决你的问题,请参考以下文章

如何从有状态小部件类 Flutter 访问小部件状态

Flutter:有状态的小部件不更新

如何在更新父有状态小部件时更新子有状态小部件

Flutter:从子 StreamBuilder 更新有状态小部件

Flutter BloC 布尔更新状态

Flutter - setState 不更新内部有状态小部件