【问题标题】:How to show CircularProgressIndicator() from a child widget in the parent?如何从父级中的子小部件显示 CircularProgressIndicator()?
【发布时间】:2020-07-03 14:20:57
【问题描述】:

我有来自子状态小部件的网络调用。为此,我需要在包含 Scaffold 的父小部件中显示 CircularProgressIndicator。有什么办法可以显示吗?

父小部件:

class OrderDetailPage extends StatefulWidget {
   @override
  _OrderDetailPageState createState() => _OrderDetailPageState();

}

class _OrderDetailPageState extends State<OrderDetailPage> {
    bool isloading = false;

    Widget build(BuildContext context){
       return Scaffold(body: isLoading ? Center(child: CircularProgressIndicator() : Container(
          child: ChildWidget()
      ));
    }
}

孩子:

class ChildWidget extends StatefulWidget {
  @override
  ChildWidgetState createState() => ChildWidgetState();
}

class ChildWidgetState extends State<OrderDetailPage> {
  return Center(child: RaisedButton(onPressed: () { // need to make isloading in parent widget to true and false})
}

【问题讨论】:

  • 是的,有办法
  • 是的,你可以做到。分享您问题中的代码,然后我可以帮助您
  • @Niteesh 代码由于安全原因无法共享。父母和孩子都是有状态的小部件。我们可以用传递给子小部件的键来显示它吗?
  • 当您提出针对您遇到的问题的问题时,您应该在这里创建简单的可重现代码。请看如何提问stackoverflow.com/help/how-to-ask

标签: flutter dart


【解决方案1】:

State 向上传递到小部件树有两种方法。

将回调函数从父级传递给子级:

class OrderDetailPage extends StatefulWidget {
   @override
  _OrderDetailPageState createState() => _OrderDetailPageState();

}

class _OrderDetailPageState extends State<OrderDetailPage> {
    bool isloading = false;
    Widget build(BuildContext context){
       return Scaffold(body: isLoading ? Center(child: CircularProgressIndicator() : Container(
          child: ChildWidget(callback: () => setState(() => isLoading = !isLoading))
      ));
    }
}

孩子:

class ChildWidget extends StatefulWidget {
  ChildWidget({this.callback});
  @override
  ChildWidgetState createState() => ChildWidgetState();
}

class ChildWidgetState extends State<OrderDetailPage> {
  return Center(child: RaisedButton(onPressed: () { 
   widget.callback();
}

较晚的替代方法是使用状态管理解决方案,例如 InheritedWidgetProvider 包或许多其他包之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2021-05-04
    • 2021-12-30
    • 2019-09-21
    • 2011-09-03
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多