【问题标题】:Reset flutter views when leaving flutter module inside native app将颤振模块留在本机应用程序中时重置颤振视图
【发布时间】:2020-06-04 08:09:23
【问题描述】:

我必须在我的原生应用中包含一个 FlutterViewController。引擎是在应用启动时创建的。如果用户在原生视图中单击项目,Flutter App 会打开并加载它通过某些方法通道接收的数据。

直到这里它正在工作。现在用户回到原生应用并点击不同的项目。现在再次调用 Flutter 部分,调用方法通道以获取显示所需的信息并显示它们。

我现在面临的问题是,当用户点击第二个,第三个,......项目时,颤动部分会打开并在很短的时间内显示旧项目的数据,这显然不是这样有利于用户体验。

我现在的问题。在 Flutter 或本机部分中是否有办法在后台重置 Flutter,而不会破坏 Flutter 引擎?

【问题讨论】:

    标签: ios swift flutter


    【解决方案1】:

    经过一些实验后,解决方案是对状态做出本机反应并通过方法通道发送自定义'reset'

    【讨论】:

    • 嗨@Hons - 感谢您回复您的解决方案。您是否有机会分享有关您如何实现这一目标的更多细节?诸如此类的事情-您何时调用自定义“重置”。另外,您是否注意到 iOS 和 Android 上的这种行为?
    【解决方案2】:

    您可以在加载数据时显示加载指示器。参考下文

    final Future<String> _calculation = Future<String>.delayed(
      const Duration(seconds: 2),
      () => 'Data Loaded',
    );
    
    @override
    Widget build(BuildContext context) {
      return DefaultTextStyle(
        style: Theme.of(context).textTheme.headline2!,
        textAlign: TextAlign.center,
        child: FutureBuilder<String>(
          future: _calculation, // a previously-obtained Future<String> or null
          builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
            List<Widget> children;
            if (snapshot.hasData) {
              children = <Widget>[
                const Icon(
                  Icons.check_circle_outline,
                  color: Colors.green,
                  size: 60,
                ),
                Padding(
                  padding: const EdgeInsets.only(top: 16),
                  child: Text('Result: ${snapshot.data}'),
                )
              ];
            } else if (snapshot.hasError) {
              children = <Widget>[
                const Icon(
                  Icons.error_outline,
                  color: Colors.red,
                  size: 60,
                ),
                Padding(
                  padding: const EdgeInsets.only(top: 16),
                  child: Text('Error: ${snapshot.error}'),
                )
              ];
            } else {
              children = const <Widget>[
                SizedBox(
                  child: CircularProgressIndicator(),
                  width: 60,
                  height: 60,
                ),
                Padding(
                  padding: EdgeInsets.only(top: 16),
                  child: Text('Awaiting result...'),
                )
              ];
            }
            return Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: children,
              ),
            );
          },
        ),
      );
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2019-07-10
      • 1970-01-01
      • 2018-10-19
      相关资源
      最近更新 更多