栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

触发功能从小部件到状态对象

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

触发功能从小部件到状态对象

虽然

GlobalKey
允许轻松访问任何小部件的状态;避开它。窗口小部件应 直接与其他部件进行交互。这是Flutter的核心原则之一。

Flutter改用反应式编程。小部件之间通过提交事件进行通信。不能直接编辑所需的小部件。

明显的好处是小部件保持独立。并且可能有数十个小部件可以使用相同的原理相互通信。

如果要调用方法,则使用相同的原理:A

Listenable
Stream
在小部件之间共享。但无需使用
AnimatedWidget
StreamBuilder
进行收听。相反,我们将手动进行侦听(这需要更多样板)以触发自定义功能。

这是使用的示例

Stream

import 'dart:async';import 'package:flutter/material.dart';class ParentWidget extends StatefulWidget {  @override  _ParentWidgetState createState() => _ParentWidgetState();}class _ParentWidgetState extends State<ParentWidget> {  final changeNotifier = new StreamController.broadcast();  @override  void dispose() {    changeNotifier.close();    super.dispose();  }  @override  Widget build(BuildContext context) {    return new Column(      children: <Widget>[        new AnotherWidget(          shouldTriggerChange: changeNotifier.stream,        ),        new RaisedButton(          child: new Text("data"),          onPressed: () => changeNotifier.sink.add(null),        )      ],    );  }}class AnotherWidget extends StatefulWidget {  final Stream shouldTriggerChange;  AnotherWidget({@required this.shouldTriggerChange});  @override  _AnotherWidgetState createState() => _AnotherWidgetState();}class _AnotherWidgetState extends State<AnotherWidget> {  StreamSubscription streamSubscription;  @override  initState() {    super.initState();    streamSubscription = widget.shouldTriggerChange.listen((_) => someMethod());  }  @override  didUpdateWidget(AnotherWidget old) {    super.didUpdateWidget(old);    // in case the stream instance changed, subscribe to the new one    if (widget.shouldTriggerChange != old.shouldTriggerChange) {      streamSubscription.cancel();      streamSubscription = widget.shouldTriggerChange.listen((_) => someMethod());    }  }  @override  dispose() {    super.dispose();    streamSubscription.cancel();  }  void someMethod() {    print('Hello World');  }  @override  Widget build(BuildContext context) {    return Container();  }}

在此示例中,每当对实例化由进行单击时

someMethod
AnotherWidget
将调用of
RaisedButton``_ParentWidgetState



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379433.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号