很抱歉,我的问题有点愚蠢,但我刚刚开始颤抖。
我正在致力于共享和深层链接抖动。我已经创造了意图,除了一个之外,一切都运转良好。我在主页而不是主页上调用“ 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”? 或任何其他更好的解决方案。 此处的场景很简单,我希望用户单击链接时仅一次浏览至深层链接页面,但此后我的应用程序应该能够正常导航。
答案 0 :(得分:0)
我想问题是您从initState调用了导航器,当您导航到另一个页面时,小部件树并不完整,因此当您返回首页时,会再次调用initState。您可以使用此工作表:
WidgetsBinding.instance.addPostFrameCallback((_) => initUniLinks());
在您的initState中,它将在小部件完全完成时调用一个函数。
如果工作正常,请给我反馈
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => initUniLinks());
}