如何从初始化状态删除窗口小部件或仅在初始化状态下加载窗口小部件一次?

时间:2019-07-15 12:04:12

标签: android flutter dart applinks

很抱歉,我的问题有点愚蠢,但我刚刚开始颤抖。

我正在致力于共享和深层链接抖动。我已经创造了意图,除了一个之外,一切都运转良好。我在主页而不是主页上调用“ initUniLinks”。 因此,链接和导航工作正常,但是当我通过共享链接打开应用程序并打开特定页面时,但之后转到首页时,它再次获取“ initUniLinks”,并再次重定向到指定页面。

我正在从中使用Uni-link插件和应用程序或深层链接方法 https://pub.dev/packages/uni_links

我没有做太多尝试,但是尝试了一些基本的选项,例如在导航之前为initialLink赋予空值,但是由于我的小部件处于初始状态,因此当我返回首页时会再次调用它。

class HomePage extends StatefulWidget {
  final Widget child;
  HomePage({Key key, this.child}) : super(key: key);
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> with WidgetsBindingObserver {

  String initialLink = "";

  void initState() {
    super.initState();
    initUniLinks();
  }

  Future<Null> initUniLinks() async {
    try {
      initialLink = await getInitialLink();

      if (initialLink != null || initialLink != "") {
        initialLink.contains("pgpost")
            ? await Navigator.push(
                context, MaterialPageRoute(builder: (context) => PostPage()))
            : await Navigator.push(context,
                    MaterialPageRoute(builder: (context) => UserPage()));

      }
    } on PlatformException {

    }
  }
}

我只想知道有什么方法可以一次而不是每次都通过从initstate中删除来调用“ initUniLinks”? 或任何其他更好的解决方案。 此处的场景很简单,我希望用户单击链接时仅一次浏览至深层链接页面,但此后我的应用程序应该能够正常导航。

1 个答案:

答案 0 :(得分:0)

我想问题是您从initState调用了导航器,当您导航到另一个页面时,小部件树并不完整,因此当您返回首页时,会再次调用initState。您可以使用此工作表: WidgetsBinding.instance.addPostFrameCallback((_) => initUniLinks());在您的initState中,它将在小部件完全完成时调用一个函数。

如果工作正常,请给我反馈

@override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) => initUniLinks());
  }