Flutter启动参数获取插件launch_args的使用

Flutter启动参数获取插件launch_args的使用

目录

launch_args

目录

简介

launch_args 是一个用于获取传递给 Android 或 iOS 应用程序的参数的 Flutter 包。目前该插件仅支持 Android 和 iOS,因为大多数其他平台会直接将参数传递给 main 函数。


使用方法

main.dart 文件中,你需要初始化 WidgetsFlutterBinding 并获取传递的参数。如果未接收到任何参数,则从插件中获取默认参数。

import 'package:flutter/material.dart';
import 'package:launch_args/launch_args.dart';

Future<void> main(List<String>? args) async {
  WidgetsFlutterBinding.ensureInitialized();
  // 如果没有传递参数,则使用插件获取参数
  args = args?.isNotEmpty == true ? args : (await LaunchArgs.args);

  runApp(MyApp(args: args));
}

传递参数

Android

在 Android 中,可以使用 adb 命令来传递参数到应用。

adb -s $DEVICE_ID shell am start \
  -n $ANDROID_PACKAGE/$ANDROID_ACTIVITY \
  -ez [arg name] [value] \
  -ez [arg name2] [value 2] \
  ...

注意:在 Android 上,参数名称前缀为 --,以使其与 args 包中的选项兼容。Android 总是以键值对的形式传递参数。

iOS

在 iOS 中,可以使用 ios-deploy 工具来传递参数到应用。

$FLUTTER_HOME/bin/cache/artifacts/ios-deploy/ios-deploy --id $DEVICE_ID \
  --bundle build/ios/iphoneos/Runner.app \
  --debug \
  --args [arg name] [arg value] [arg name2] [arg value2] ...

示例代码

以下是完整的示例代码,展示了如何使用 launch_args 插件获取传递的参数并在应用中显示它们。

import 'package:flutter/material.dart';
import 'package:launch_args/launch_args.dart';

Future<void> main(List<String>? args) async {
  WidgetsFlutterBinding.ensureInitialized();
  // 如果没有传递参数,则使用插件获取参数
  args = args?.isNotEmpty == true ? args : (await LaunchArgs.args);

  runApp(MyApp(args: args));
}

class MyApp extends StatelessWidget {
  const MyApp({super.key, this.args});

  final List<String>? args;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Launch Args'),
        ),
        body: ListView(
          children: [
            for (var arg in args ?? <String>['n/a'])
              ListTile(
                title: Text(arg),
              ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter启动参数获取插件launch_args的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter启动参数获取插件launch_args的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,launch_args 插件用于在应用启动时获取传递的参数。这些参数可以是通过 URL Scheme、Deep Link 或者其他方式传递给应用的。launch_args 插件可以帮助你轻松地获取这些参数,并在应用启动时进行处理。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 launch_args 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  launch_args: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

2. 使用插件

在 Dart 代码中,你可以使用 LaunchArgs 类来获取启动参数。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:launch_args/launch_args.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 获取启动参数
  final LaunchArgs launchArgs = LaunchArgs();
  final String? initialRoute = await launchArgs.getInitialRoute();

  runApp(MyApp(initialRoute: initialRoute));
}

class MyApp extends StatelessWidget {
  final String? initialRoute;

  const MyApp({Key? key, this.initialRoute}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      initialRoute: initialRoute ?? '/',
      routes: {
        '/': (context) => HomeScreen(),
        '/details': (context) => DetailsScreen(),
      },
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: Text('Welcome to the Home Screen!'),
      ),
    );
  }
}

class DetailsScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Details'),
      ),
      body: Center(
        child: Text('Welcome to the Details Screen!'),
      ),
    );
  }
}

3. 处理启动参数

在上面的示例中,LaunchArgsgetInitialRoute() 方法用于获取启动时的初始路由。你可以根据这个路由来决定应用启动时显示哪个页面。

4. 配置 URL Scheme 或 Deep Link

为了让 launch_args 插件能够正确获取启动参数,你需要在 Android 和 iOS 项目中配置相应的 URL Scheme 或 Deep Link。

Android

AndroidManifest.xml 文件中,添加 intent-filter 来捕获特定的 URL Scheme 或 Deep Link:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTop">
    <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="yourapp" />
    </intent-filter>
</activity>

iOS

Info.plist 文件中,添加 CFBundleURLTypes 来配置 URL Scheme:

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

5. 测试

你可以通过以下方式测试启动参数:

  • Android: 使用 ADB 命令发送 Intent,例如:
    adb shell am start -W -a android.intent.action.VIEW -d "yourapp://details" com.example.yourapp
回到顶部