flutter app_links启动后如何禁止自动跳转到首页

在Flutter中使用app_links处理深度链接时,应用启动后会自动跳转到首页,但我希望根据不同的链接参数跳转到指定页面。请问如何禁止默认跳转首页的行为,改为手动控制路由跳转?目前尝试在MaterialApp的onGenerateRoute中拦截,但app_links似乎仍会优先触发首页跳转。需要在不影响其他功能的情况下实现这个需求,是否有完整的解决方案或示例代码?

2 回复

在Flutter中,使用app_links时,可通过以下方法禁止自动跳转到首页:

  1. AndroidManifest.xml中,移除<intent-filter><category android:name="android.intent.category.LAUNCHER" />
  2. Info.plist中,删除CFBundleURLTypes中的启动配置。

这样可避免应用启动时自动处理链接并跳转。

更多关于flutter app_links启动后如何禁止自动跳转到首页的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 app_links 包时,可以通过以下方法禁止应用启动后自动跳转到首页:

1. 配置 AppLinks 的自动处理

main() 函数中初始化 AppLinks 时,禁用自动跳转:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  final appLinks = AppLinks();
  // 禁用自动跳转
  appLinks.autoHandleInitialLink = false;
  
  runApp(MyApp());
}

2. 手动处理深度链接

在应用启动后,通过监听链接并控制导航:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final appLinks = AppLinks();

  @override
  void initState() {
    super.initState();
    _handleInitialLink();
  }

  Future<void> _handleInitialLink() async {
    // 获取初始链接但不自动跳转
    final initialLink = await appLinks.getInitialLink();
    if (initialLink != null) {
      // 在这里决定是否跳转,或保存链接供后续使用
      print('初始链接: $initialLink');
      // 如果不希望跳转,则不调用 Navigator
    }
  }
}

3. 平台配置(Android & iOS)

确保原生配置正确:

Android (android/app/src/main/AndroidManifest.xml):

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="https" android:host="yourdomain.com" />
</intent-filter>

iOS (ios/Runner/Info.plist):

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>your.bundle.id</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>yourapp</string>
        </array>
    </dict>
</array>

总结

通过设置 autoHandleInitialLink = false 并手动处理初始链接,可以完全控制是否跳转。适用于需要先显示引导页、登录页或根据条件决定导航的场景。

回到顶部