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
相关产品推荐
相关产品推荐

