相关疑难解决方法(0)

从StatefulWidget外部控制状态

我试图理解在Widgets State之外控制StatefulWidget状态的最佳实践.

我定义了以下接口.

abstract class StartupView {
  Stream<String> get onAppSelected;

  set showActivity(bool activity);
  set message(String message);
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个StartupPage实现此接口的StatefulWidget .我希望Widget能够执行以下操作:

  1. 按下按钮时,它将通过onAppSelected流发送事件.控制器甚至会监听它并执行一些操作(db调用,服务请求等).

  2. 控制器可以调用showActivityset message使视图显示消息进度.

因为有状态窗口小部件不会将其状态作为属性公开,所以我不知道访问和修改状态属性的最佳方法.

我希望使用它的方式如下:

Widget createStartupPage() {
    var page = new StartupPage();
    page.onAppSelected.listen((app) {
      page.showActivity = true;
      //Do some work
      page.showActivity = false;
    });
  }
Run Code Online (Sandbox Code Playgroud)

我已经考虑通过传递我希望它返回的状态来实例化Widget createState()但是感觉不对.

关于我们为什么采用这种方法的一些背景:我们目前有一个Dart Web应用程序.对于视图 - 控制器分离,可测试性和对Flutter的前瞻性思考,我们决定为应用程序中的每个视图创建一个接口.这将允许WebComponent或Flutter Widget实现此接口并使所有控制器逻辑保持不变.

flutter

33
推荐指数
4
解决办法
1万
查看次数

如何从另一个小部件设置状态?

我正在尝试从Flutter中的不同小部件更改状态.例如,在以下示例中,我在几秒钟后设置状态.

这是代码:

class _MyAppState extends State<MyApp> {

  int number = 1;

  @override
  void initState() {
    super.initState();
    new Future.delayed(new Duration(seconds: 5)).then((_) {
      this.setState(() => number = 2);
      print("Changed");
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new FlatButton(
          color: Colors.blue,
          child: new Text("Next Page"),
          onPressed: () {
            Navigator.of(context).push(new MaterialPageRoute(
              builder: (BuildContext context) => new StatefulBuilder(builder: (BuildContext context, setState) =>new MySecondPage(number))
            ));
          },
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用一个InheritedWidget,但除非我将它包装在我的顶级窗口小部件周围,否则这将无法工作,这对我正在尝试做的事情是不可行的(上面的代码是我想要实现的简化).

有关实现这一目标的最佳方法的任何想法都在Flutter中?

dart flutter

16
推荐指数
2
解决办法
8298
查看次数

触发从窗口小部件到状态对象的函数

这是场景的简化版本:

class ParentWdiegt extends StatelessWidget{
//
//
floatinActionButton: FloatingActionButtonWidget(onPressed:()=>CustomWidgetState.someMethod(someValue))
//
//somewhere in the ParentWidget tree
child: CustomWidget() //is stateful
}
Run Code Online (Sandbox Code Playgroud)

CustomWidgetState

class CustomWidgetState extends State<CustomWidget>{
//trigger this function when FAB is pressed in parent widget
someMethod(SomeValue) {//}
}
Run Code Online (Sandbox Code Playgroud)

someMethod在不使用FAB的情况下按下FAB时,是否有任何方式可以在状态对象中显示InheritedWidget

dart flutter

7
推荐指数
1
解决办法
3245
查看次数

标签 统计

flutter ×3

dart ×2