Flutter应用启动处理插件app_launch_handler的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter应用启动处理插件app_launch_handler的使用

AppLuanchHandler 帮助你轻松处理来自其他应用程序的结果,该结果通过 onNewIntent 获取。

开始使用

要使用此插件,在你的 pubspec.yaml 文件中添加 app_luanch_handler 作为依赖项。

dependencies:
  app_luanch_handler: ^版本号

使用示例

以下是一个完整的示例,展示了如何使用 AppLuanchHandler 插件来处理外部应用返回的结果。

import 'package:app_luanch_handler/app_luanch_handler.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final ValueNotifier<String> _result = ValueNotifier("Unknow");

  late AppLuanchHandler applauncher;

  @override
  void initState() {
    super.initState();
    // 注册处理器
    applauncher = AppLuanchHandler(
      onResult: (result) {
        _result.value = result;
      },
      applyStatusFilter: false, // 如果为true,它只会返回状态码。如果您的URL没有状态码,它将抛出错误。默认值为false。请参阅文档以获取更多详细信息。
    );
  }

  @override
  void dispose() {
    applauncher.dispose();
    super.dispose();
  }

  // 启动使用深层链接的应用程序
  void launchApp() {
    applauncher.launch("https://example.com/somethinggggg");
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ValueListenableBuilder<String>(
                valueListenable: _result,
                builder: (context, value, child) {
                  return Text(value);
                },
              ),
              ElevatedButton(
                onPressed: () {
                  launchApp();
                },
                child: const Text("启动"),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

处理scheme

如果你的应用需要处理来自外部应用返回的结果,别忘了在 AndroidManifest.xmlInfo.plist 中添加你的scheme。

Android

在你的 AndroidManifest.xml 中,向 <activity> 标签添加以下内容:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="your_scheme" />
</intent-filter>

iOS

在你的 Info.plist 中,添加以下内容:

<key>CFBundleURLTypes</key>
 <array>
  <dict>
   <key>CFBundleURLSchemes</key>
   <array>
    <string>your_scheme</string>
   </array>
  </dict>
 </array>

更多关于Flutter应用启动处理插件app_launch_handler的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用启动处理插件app_launch_handler的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter应用中使用app_launch_handler插件来处理应用启动事件的代码示例。app_launch_handler插件允许你监听和处理应用启动时的参数,比如通过URL Scheme、Universal Links或Android App Links启动应用时传递的参数。

首先,确保你已经在pubspec.yaml文件中添加了app_launch_handler依赖:

dependencies:
  flutter:
    sdk: flutter
  app_launch_handler: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤配置和使用app_launch_handler

  1. 配置AndroidManifest.xml(针对Android)

    确保你的AndroidManifest.xml文件中有相应的Intent Filter配置,用于捕获启动参数。例如,如果你想要通过URL Scheme启动应用,可以这样配置:

    <activity
        android:name=".MainActivity"
        android:label="your_label"
        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|screenLayout|density|uiMode"
        android:hardwareAccelerated="true"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="yourscheme" android:host="yourhost" />
        </intent-filter>
    </activity>
    
  2. 配置iOS(Info.plist)

    如果你需要支持iOS的Universal Links或Custom URL Scheme,你需要在Info.plist中进行相应的配置。这里只展示Custom URL Scheme的配置示例:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>yourscheme</string>
            </array>
        </dict>
    </array>
    
  3. 在Dart代码中处理启动事件

    在你的Flutter应用中,你可以使用app_launch_handler插件来监听和处理启动事件。下面是一个示例代码:

    import 'package:flutter/material.dart';
    import 'package:app_launch_handler/app_launch_handler.dart';
    
    void main() {
      runApp(MyApp());
    
      // 监听应用启动事件
      AppLaunchHandler().retrieveLaunchDetails().then((LaunchDetails details) {
        if (details != null && details.data != null) {
          // 处理启动参数
          print('Launch data: ${details.data}');
        }
      }).catchError((e) {
        print('Error retrieving launch details: $e');
      });
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Text('Hello, Flutter!'),
          ),
        );
      }
    }
    

在这个示例中,当应用启动时,AppLaunchHandler().retrieveLaunchDetails()方法会被调用以检索启动参数。如果应用是通过一个带有参数的URL Scheme启动的,这些参数将会被打印到控制台。

请注意,这个示例仅展示了基本的启动参数处理。根据你的具体需求,你可能需要更复杂的逻辑来处理这些参数,例如根据参数导航到不同的页面或执行特定的操作。

回到顶部