You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS环境下Flutter与Golang交互无响应问题求助

Flutter与Golang交互无响应求助

MacOS环境下尝试实现Flutter与Golang交互,让程序后台运行。已解决「Failed to load library」和「Failed to lookup symbol of Start and Stop」问题,但当前点击Flutter页面的Start/Stop按钮时,仅能打印Flutter的debugPrint内容,Golang代码中的日志完全无输出,二者未成功建立交互。已尝试官方Codelabs提供的方法,仍无法解决问题,寻求帮助。


相关代码

Flutter代码(main.dart)

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:window_manager/window_manager.dart';
import 'package:agiler/providers/auth_screen_provider.dart';
import 'package:agiler/providers/home_screen_provider.dart';
import 'package:agiler/utilities/app_strings/app_strings.dart';
import 'package:agiler/initialization_main/main_initialization.dart';
import 'dart:developer';
import 'dart:ffi' as ffi;
import 'package:ffi/ffi.dart';
import 'package:dylib/dylib.dart' as dlib;


void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  windowManager.setSkipTaskbar(true);
  await windowManager.ensureInitialized();
  await MainInitializer.initWindowManager();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
   MyApp({super.key});

  final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();

  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers:[
         ChangeNotifierProvider(create: (_) => HomeScreenProvider()),
    ChangeNotifierProvider(create: (_) => AuthScreenProvider()),
      ],
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        navigatorKey: navigatorKey,
        title: MyAppString.appTitle,
        theme: ThemeData(
          colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
          useMaterial3: true,
        ),
        home: const Sample(),
        // home: const SplashScreen(),
      ),
    );
  }
}


typedef StartFunc = ffi.Void Function();
typedef Start = void Function(); 
typedef StopFunc = ffi.Void Function();
typedef Stop = void Function();


final dylib = ffi.DynamicLibrary.open('main.dylib');


final Start start =
    dylib.lookup<ffi.NativeFunction<StartFunc>>('Start').asFunction();
final Stop stop =
    dylib.lookup<ffi.NativeFunction<StopFunc>>('Stop').asFunction();

class Sample extends StatelessWidget {
  const Sample({super.key});

  @override
  Widget build(BuildContext context) {
  debugPrint("Build Passed");
    return Scaffold(
      body: Center(child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: [
          ElevatedButton(
            onPressed: (){
              debugPrint("Start");
              start;
            },
            child: const Text("Start")),
          ElevatedButton(
            onPressed: (){
              debugPrint("Stop");
              stop;
            },
            child: const Text("Stop")),
        ],
      ),),
    );
  }
}

Golang代码

package main

import "C"
import (
    "fmt"
    "log"
)

//export Start
func Start() {
    log.Println("My Go Code Start run successfully")
}

//export Stop
func Stop() {
    log.Printf("My Go Code Stop run successfully")
}

func main() {
    fmt.Printf("My Go Code Main run successfully\n")
    Start()
    Stop()
}

编译命令

使用以下命令编译Golang代码为动态库:

go build -o main.dylib -buildmode=c-shared main.go

内容的提问来源于stack exchange,提问作者Shubham Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:48:27