fl_shared_link 0.4.1 copy "fl_shared_link: ^0.4.1" to clipboard
fl_shared_link: ^0.4.1 copied to clipboard

Gets parameters when the app is opened, and listens to be opened

example/lib/main.dart

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

bool get _isAndroid => defaultTargetPlatform == TargetPlatform.android;

bool get _isIOS => defaultTargetPlatform == TargetPlatform.iOS;

bool get _isHarmonyOS => defaultTargetPlatform.name == 'ohos';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
          appBar: AppBar(title: const Text('FlSharedLink Plugin')),
          body: Container(
              alignment: Alignment.center,
              padding: const EdgeInsets.all(20),
              child: const SingleChildScrollView(child: HomePage())))));
}

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

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  /// ios
  IOSUniversalLinkModel? universalLink;
  Map? launchingOptionsWithIOS;
  IOSOpenUrlModel? openUrl;

  /// harmonyos
  HarmonyOSNewWantModel? newWantModel;
  HarmonyOSWantModel? wantModel;
  List<HarmonyOSSharedRecordModel>? sharedData;
  String? newPath;

  /// android
  AndroidIntentModel? intent;
  String? realPath;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      FlSharedLink().receiveHandler(
          onUniversalLink: (IOSUniversalLinkModel data) {
        universalLink = data;
        setState(() {});
      }, onOpenUrl: (IOSOpenUrlModel data) {
        openUrl = data;
        setState(() {});
      }, onIntent: (AndroidIntentModel data) {
        intent = data;
        setState(() {});
      }, onWant: (HarmonyOSNewWantModel data) async {
        newWantModel = data;
        sharedData = await FlSharedLink().wantSharedDataWithHarmonyOS;
        setState(() {});
      });
      if (_isIOS) {
        universalLink = await FlSharedLink().universalLinkWithIOS;
        openUrl = await FlSharedLink().openUrlWithIOS;
        launchingOptionsWithIOS = await FlSharedLink().launchingOptionsWithIOS;
      }
      if (_isAndroid) intent = await FlSharedLink().intentWithAndroid;
      if (_isHarmonyOS) {
        wantModel = await FlSharedLink().wantWithHarmonyOS;
        sharedData = await FlSharedLink().wantSharedDataWithHarmonyOS;
      }
      setState(() {});
    });
  }

  @override
  Widget build(BuildContext context) {
    List<Widget> children = [];
    if (_isAndroid) children = androidChildren;
    if (_isIOS) children = iosChildren;
    if (_isHarmonyOS) children = harmonyOSChildren;
    return Column(
        spacing: 12,
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          ...children,
          ElevatedButton(
              onPressed: FlSharedLink().clearCache, child: const Text('清除缓存'))
        ]);
  }

  List<Widget> get harmonyOSChildren => [
        const Text('HarmonyOS Want'),
        Container(
            width: double.infinity,
            padding: const EdgeInsets.all(12),
            margin: const EdgeInsets.all(12),
            alignment: Alignment.center,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey.withValues(alpha: 0.3)),
            child: Text('${wantModel?.toMap()}', textAlign: TextAlign.start)),
        const Text('HarmonyOS NewWant'),
        Container(
            width: double.infinity,
            padding: const EdgeInsets.all(12),
            margin: const EdgeInsets.all(12),
            alignment: Alignment.center,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey.withValues(alpha: 0.3)),
            child:
                Text('${newWantModel?.toMap()}', textAlign: TextAlign.start)),
        const Text('HarmonyOS SharedData'),
        Container(
            width: double.infinity,
            padding: const EdgeInsets.all(12),
            margin: const EdgeInsets.all(12),
            alignment: Alignment.center,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey.withValues(alpha: 0.3)),
            child: Text(
                '${sharedData?.map((e) => e.toMap()).toList().join('\n')}',
                textAlign: TextAlign.start)),
        ElevatedButton(
            onPressed: uriCopyToCachePathWithHarmonyOS,
            child: const Text('HarmonyOS uri转本地路径')),
        Container(
            width: double.infinity,
            padding: const EdgeInsets.all(12),
            margin: const EdgeInsets.all(12),
            alignment: Alignment.center,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey.withValues(alpha: 0.3)),
            child: Text('$newPath', textAlign: TextAlign.start)),
      ];

  void uriCopyToCachePathWithHarmonyOS() async {
    final data = sharedData?.firstOrNull;
    if (data != null) {
      newPath =
          await FlSharedLink().uriCopyToCachePathWithHarmonyOS(data.uri ?? '');
      setState(() {});
    }
  }

  List<Widget> get androidChildren => [
        const Text('Android Intent'),
        Container(
            width: double.infinity,
            padding: const EdgeInsets.all(12),
            margin: const EdgeInsets.all(12),
            alignment: Alignment.center,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey.withValues(alpha: 0.3)),
            child: Text('${intent?.toMap()}', textAlign: TextAlign.start)),
        ElevatedButton(
            onPressed: getRealFilePathWithAndroid,
            child: const Text('Android uri转真实文件地址 兼容微信QQ')),
        Container(
            width: double.infinity,
            padding: const EdgeInsets.all(12),
            margin: const EdgeInsets.all(12),
            alignment: Alignment.center,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey.withValues(alpha: 0.3)),
            child: Text('$realPath', textAlign: TextAlign.start)),
      ];

  void getRealFilePathWithAndroid() async {
    final id = intent?.id;
    if (id == null) return;
    realPath = await FlSharedLink().getRealFilePathWithAndroid(id);
    setState(() {});
  }

  List<Widget> get iosChildren => [
        const Text('IOS Launching Options'),
        Container(
            width: double.infinity,
            padding: const EdgeInsets.all(12),
            margin: const EdgeInsets.all(12),
            alignment: Alignment.center,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey.withValues(alpha: 0.3)),
            child:
                Text('$launchingOptionsWithIOS', textAlign: TextAlign.start)),
        const Text('IOS UniversalLink'),
        Container(
            width: double.infinity,
            padding: const EdgeInsets.all(12),
            margin: const EdgeInsets.all(12),
            alignment: Alignment.center,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey.withValues(alpha: 0.3)),
            child:
                Text('${universalLink?.toMap()}', textAlign: TextAlign.start)),
        const Text('IOS openUrl'),
        Container(
            width: double.infinity,
            padding: const EdgeInsets.all(12),
            margin: const EdgeInsets.all(12),
            alignment: Alignment.center,
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey.withValues(alpha: 0.3)),
            child: Text('${openUrl?.toMap()}', textAlign: TextAlign.start)),
      ];
}
4
likes
150
points
40
downloads

Publisher

unverified uploader

Weekly Downloads

Gets parameters when the app is opened, and listens to be opened

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on fl_shared_link

Packages that implement fl_shared_link