Flutter如何与C#交互
在Flutter开发中,如何实现与C#代码的交互?具体场景是需要调用C#编写的后端服务或本地Windows API。请问有哪些可行的方案?例如通过MethodChannel、REST API,或者使用FFI直接调用C# DLL?每种方式的优缺点和性能对比如何?是否有成熟的插件或案例可以参考?
2 回复
Flutter与C#交互可通过平台通道实现。在Flutter端使用MethodChannel调用原生代码,C#端通过Xamarin或MAUI处理请求并返回结果。也可通过gRPC或REST API进行网络通信。
更多关于Flutter如何与C#交互的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中与C#交互,主要有以下几种方式:
1. 通过平台通道(Platform Channels)
这是官方推荐的方式,适合方法调用和数据传递。
Flutter端代码:
import 'package:flutter/services.dart';
class CSharpInteractor {
static const platform = MethodChannel('com.example/native');
Future<String> callCSharpMethod(String methodName, dynamic args) async {
try {
final result = await platform.invokeMethod(methodName, args);
return result;
} on PlatformException catch (e) {
return "Error: ${e.message}";
}
}
}
C#端代码(使用Xamarin或MAUI):
public class MainActivity : FlutterActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
var methodChannel = new MethodChannel(FlutterEngine, "com.example/native");
methodChannel.SetMethodCallHandler(HandleMethodCall);
}
private async void HandleMethodCall(MethodCall call, MethodChannel.Result result)
{
switch (call.Method)
{
case "getData":
var data = await GetDataFromCSharp();
result.Success(data);
break;
default:
result.NotImplemented();
break;
}
}
private async Task<string> GetDataFromCSharp()
{
// 调用C#逻辑
return "Data from C#";
}
}
2. 通过gRPC
适合需要高性能、复杂数据交换的场景。
步骤:
- 定义proto文件
- 分别生成Dart和C#的gRPC客户端/服务端代码
- 实现通信逻辑
3. 通过REST API
如果C#代码运行在服务器上,可以通过HTTP请求交互。
Flutter端:
import 'package:http/http.dart' as http;
Future<void> fetchData() async {
final response = await http.get(Uri.parse('https://api.example.com/data'));
if (response.statusCode == 200) {
// 处理C#返回的数据
}
}
4. 通过Socket通信
适合实时数据交换。
推荐方案
- 移动应用:使用平台通道
- 桌面应用:考虑gRPC或平台通道
- Web应用:使用REST API
选择哪种方式取决于你的具体需求、性能要求和部署环境。

