如何在没有Firebase的情况下进行深层链接?

问题描述

我有一个Netflix模型应用程序,我想与他人共享电影内容,如果接收者拥有该应用程序,则该内容应在他/她的应用程序中打开,或者如果该应用程序不存在,请访问网站

我尝试使用Firebase,但是效果不佳,所以我在uni_links上进行了尝试,但这是我第一次使用它,并且没有找到很多有关它的教程。

下面是我的代码,纯属扑朔迷离,并使用了共享小部件来共享内容

import 'dart:async';
import 'package:Flutter/material.dart';
import 'package:Flutter/services.dart';
import 'package:share/share.dart';
import 'package:uni_links/uni_links.dart';

// Share tab
enum UniLinksType { string,uri }

class SharePage extends StatelessWidget 
{
    SharePage(this.shareType,this.share,this.image);
    final shareType;
    final VideoDataModel share;
    final image;

    String latestLink;
    Uri latestUri;

    StreamSubscription sub;
    UniLinksType type = UniLinksType.string;

    initPlatformState() async
    {

        if(type == UniLinksType.string)
        {
            await initPlatformStateForStringUniLinks();
        }
        else
        {
            await initPlatformStateForUriUniLinks();
        }
    }

    initPlatformStateForStringUniLinks() async
    {
        sub = getLinksstream().listen((String link)
        {
            latestLink = link ?? "UnkNown";
            latestUri = null;

            try
            {
                if(link != null)
                {
                    latestUri = Uri.parse(link);
                }
            }
            on FormatException{}
        },onError: (err)
        {
            latestLink = "Failed to load latest link: $err";
            latestUri = null;
        });

        getLinksstream().listen((String link)
        {
            print('got link: $link');
        },onError: (err)
        {
            print('got err: $err');
        });

        String initialLink;
        Uri initialUri;

        // Platform messages may fail,so we use a try/catch PlatformException.
        try
        {
            initialLink = await getinitialLink();
            print("initial link: $initialLink");

            if (initialLink != null)
            {
                print("in if");
                initialUri = Uri.parse(initialLink);
            }
        }
        on PlatformException
        {
            initialLink = 'Failed to get initial link.';
            initialUri = null;
        }
        on FormatException
        {
            initialLink = 'Failed to parse the initial link as Uri.';
            initialUri = null;
        }
    }

    Future initPlatformStateForUriUniLinks() async
    {
        sub = getUriLinksstream().listen((Uri uri)
        {
            latestUri = uri;
            latestLink = uri?.toString() ?? 'UnkNown';
        },onError: (err)
        {
            latestUri = null;
            latestLink = 'Failed to get latest link: $err.';
        });

        getUriLinksstream().listen((Uri uri)
        {
            print('got uri: ${uri?.path} ${uri?.queryParametersAll}');
        },onError: (err)
        {
            print('got err: $err');
        });

        Uri initialUri;
        String initialLink;

        try
        {
            initialUri = await getinitialUri();
            print('initial uri: ${initialUri?.path}'' ${initialUri?.queryParametersAll}');
            initialLink = initialUri?.toString();
        }
        on PlatformException
        {
            initialUri = null;
            initialLink = 'Failed to get initial uri.';
        }
        on FormatException
        {
            initialUri = null;
            initialLink = 'Bad parse the initial link as Uri.';
        }
        latestUri = initialUri;
        latestLink = initialLink;

        return latestUri;
    }

    Widget shareText()
    {
        return Text
        (
            "Share",style: TextStyle
            (
                fontFamily: 'Lato',fontSize: 12.0,fontWeight: FontWeight.w600,letterSpacing: 0.0,color: Colors.white
            ),);
    }

    Widget shareTabColumn()
    {
        return Column
        (
            mainAxisAlignment:
            MainAxisAlignment.center,children: <Widget>
            [
                Icon
                (
                    Icons.share,size: 30.0,color: Colors.white,),new Padding
                (
                    padding: const EdgeInsets.fromLTRB(0.0,0.0,10.0),shareText(),],);
    }

    @override
    Widget build(BuildContext context) 
    {
        return Expanded
        (
            child: Material
            (
                child:  new InkWell
                (
                    onTap: ()
                    {
                       Share.share('$shareType'+ share.id.toString() + "\n" + share.name);
                       initPlatformState();
                    },child: shareTabColumn(),color: Colors.transparent,)
        );
    }
}

在共享内容中,我想获取我的域名(例如www.example.co.in

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)