根据颤振的官方深度链接页,我们不需要任何插件或原生的安卓/iOS代码来处理深度链接。
但它并没有真正告诉我们如何从那个链接中获取数据。我是从编码的角度讲的。当然,他们在书中写道:

但这并没有告诉我,应该在哪里编写,什么样的代码才能真正获得完整的链接。我已经寻找了例子/教程,但我找不到任何不使用插件来处理深度链接的东西。
现在,我所做的就是在<intent-filter>文件中添加AndroidManifest.xml标签,点击链接,我的应用程序就开始出现了。但我不知道如何从那个链接中提取数据。
有谁能指引我到这里来吗?提前谢谢。
发布于 2021-06-22 11:21:03
您需要特定于平台的代码来处理深度链接。如果您遵循文档中提到的链接,您将找到完整的示例。
private val CHANNEL = "poc.deeplink.flutter.dev/channel"
private var startString: String? = null
override fun configureFlutterEngine(@NonNull flutterEngine:FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
MethodChannel(flutterEngine.dartExecutor, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "initialLink") {
if (startString != null) {
result.success(startString)
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val intent = getIntent()
startString = intent.data?.toString()
}颤振守则:
class DeepLinkBloc extends Bloc {
//Event Channel creation
static const stream = const
EventChannel('poc.deeplink.flutter.dev/events');
//Method channel creation
static const platform = const
MethodChannel('poc.deeplink.flutter.dev/channel');
StreamController<String> _stateController = StreamController();
Stream<String> get state => _stateController.stream;
Sink<String> get stateSink => _stateController.sink;
//Adding the listener into contructor
DeepLinkBloc() {
//Checking application start by deep link
startUri().then(_onRedirected);
//Checking broadcast stream, if deep link was clicked in opened appication
stream.receiveBroadcastStream().listen((d) => _onRedirected(d));
}
_onRedirected(String uri) {
// Here can be any uri analysis, checking tokens etc, if it’s necessary
// Throw deep link URI into the BloC's stream
stateSink.add(uri);
}
@override
void dispose() {
_stateController.close();
}
Future<String> startUri() async {
try {
return platform.invokeMethod('initialLink');
} on PlatformException catch (e) {
return "Failed to Invoke: '${e.message}'.";
}
}
}请按照此链接了解更多细节。
发布于 2021-12-24 02:55:08
如果您已经完成了您发布的指南中的步骤,那么最好的方法是在您的onGenerateRoute和/或onGenerateInitialRoutes处理程序中创建一个MaterialApp处理程序,以便这些处理程序根据所描述的行为处理由框架传递或推送的路由。您甚至可以在MaterialApp的路由属性上创建一个来自深度链接的预期命名路由,尽管我认为动态生成路由更合适,这是因为深度链接的动态特性,特别是当您在应用程序中处理“身份验证所需的内容”时。
发布于 2021-08-06 17:21:27
或者,如果您不想通过平台特定的代码传递,您可以使用firebase动态链接。这样就可以轻松地收听来自两个平台的链接,而且如果用户没有安装应用程序,那么您的链接还可以打开商店列表页面。
我在这里写了一个完整的例子:https://gbaccetta.medium.com/flutter-deep-linking-with-firebase-dynamic-links-and-bloc-architecture-660f0517fbc2
https://stackoverflow.com/questions/68081448
复制相似问题