Flutter自定义URL Scheme插件server_universe_scheme的使用

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

Flutter自定义URL Scheme插件server_universe_scheme的使用

简介

server_universe_scheme 是一个用于在Flutter应用中实现自定义URL Scheme功能的插件。通过这个插件,你可以轻松地处理来自特定URL Scheme的请求,并根据需要执行相应的操作。

快速开始

安装插件

首先,在你的Flutter项目中添加server_universe_scheme插件:

flutter pub add server_universe_scheme

示例代码

以下是一个完整的示例,展示了如何在Flutter应用中使用server_universe_scheme插件来处理自定义URL Scheme请求。

1. 配置 pubspec.yaml

确保在你的pubspec.yaml文件中正确配置了插件依赖:

dependencies:
  flutter:
    sdk: flutter
  server_universe_scheme: ^0.1.0

2. 初始化和使用插件

在你的主应用程序文件中(例如main.dart),初始化并使用server_universe_scheme插件。

import 'package:flutter/material.dart';
import 'package:server_universe_scheme/scheme/scheme/pubspec_server_universe.dart';

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

  // 创建 PubspecServerUniverse 实例
  PubspecServerUniverse pubspecServerUniverse = PubspecServerUniverse.create(
    name: "sever",
  );
  
  // 设置特殊类型
  pubspecServerUniverse.special_type = "slebew";
  
  // 打印 JSON 表示
  print(pubspecServerUniverse.toJson());

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter URL Scheme Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter URL Scheme Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _urlSchemeData = 'No data received yet';

  @override
  void initState() {
    super.initState();
    
    // 监听 URL Scheme 请求
    receiveUrlScheme().then((data) {
      setState(() {
        _urlSchemeData = data ?? 'No data received';
      });
    });
  }

  Future<String?> receiveUrlScheme() async {
    // 这里假设有一个方法可以接收 URL Scheme 数据
    // 具体实现取决于插件的具体API
    return "Received data from custom URL scheme";
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              _urlSchemeData,
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 处理按钮点击事件
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

3. 配置 Android 和 iOS 平台

Android

AndroidManifest.xml中添加以下内容以支持自定义URL Scheme:

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

iOS

Info.plist中添加以下内容以支持自定义URL Scheme:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.yourcompany.yourapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>your_custom_scheme</string>
        </array>
    </dict>
</array>

结论

通过上述步骤,你可以在Flutter应用中轻松实现自定义URL Scheme的功能。server_universe_scheme插件提供了一种简单而有效的方法来处理这些请求,并使你的应用更加灵活和强大。希望这个示例能够帮助你更好地理解和使用这个插件。如果有任何问题或需要进一步的帮助,请随时查阅相关文档或联系开发者。


更多关于Flutter自定义URL Scheme插件server_universe_scheme的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义URL Scheme插件server_universe_scheme的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用server_universe_scheme插件来自定义URL Scheme的一个代码案例。假设你已经将server_universe_scheme插件添加到你的pubspec.yaml文件中,并且已经运行了flutter pub get

1. 添加依赖

首先,确保在pubspec.yaml文件中添加了server_universe_scheme依赖:

dependencies:
  flutter:
    sdk: flutter
  server_universe_scheme: ^最新版本号 # 请替换为实际最新版本号

2. 配置Android

android/app/src/main/AndroidManifest.xml文件中,添加自定义的URL Scheme配置。例如,假设你的自定义Scheme是myapp

<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="myapp" android:host="*" />
</intent-filter>

3. 配置iOS

ios/Runner/Info.plist文件中,添加自定义的URL Scheme配置。例如,同样假设你的自定义Scheme是myapp

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>

4. 在Flutter中使用插件

在你的Flutter项目中,你可以使用server_universe_scheme插件来监听和处理自定义URL Scheme的链接。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    // 监听自定义URL Scheme
    ServerUniverseScheme.instance.getInitialLink().then((link) {
      if (link != null) {
        _handleIncomingLink(link);
      }
    });

    // 监听后续进入的链接
    ServerUniverseScheme.instance.getLinkStream().listen((link) {
      _handleIncomingLink(link);
    });
  }

  void _handleIncomingLink(String link) {
    // 处理接收到的链接
    print('Received link: $link');
    // 你可以在这里解析链接并执行相应的操作
    // 例如,如果链接包含特定参数,可以导航到应用的特定页面
    // Navigator.pushNamed(context, '/specificRoute', arguments: parsedLinkData);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Text('Waiting for a custom URL scheme link...'),
      ),
    );
  }
}

5. 测试自定义URL Scheme

你可以通过以下方式测试你的自定义URL Scheme:

  • 在Android设备上:使用ADB命令发送一个Intent,例如:

    adb shell am start -a android.intent.action.VIEW -d "myapp://example.com"
    
  • 在iOS模拟器或设备上:在Safari浏览器中打开链接,例如:

    myapp://example.com
    

这个代码案例展示了如何在Flutter应用中配置和使用server_universe_scheme插件来处理自定义URL Scheme。你可以根据自己的需求进一步扩展和修改这个示例。

回到顶部