如何将 flutter_bloc 与方法通道集成?
How do I integrate flutter_bloc with method channels?
我已经开始使用 flutter_bloc 包而不是 redux 来尝试一下,但我不完全确定我将如何调用 flutter bloc从本地接收东西时的事件 (Android/iOS)。使用 redux 更容易,因为在我的 main.dart 文件的父 MyApp 小部件中,我将 redux 存储传递给自定义 class 我从上述 class 创建并调度了方法(称为 MethodChannelHandler)。
main.dart:
void main() {
runApp(new MyApp());
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final Store<AppState> store = Store<AppState>(
// ... redux stuff ...
);
@override
void initState() {
// sauce
MethodChannelHandler(store);
super.initState();
}
}
methodChannelHandler.dart:
class MethodChannelHandler {
Store<AppState> store;
MethodChannelHandler(this.store) {
methodChannel.setMethodCallHandler(_handleMethod);
}
// Handle method calls from native
Future _handleMethod(MethodCall call) async {
if (call.method == A_METHOD) {
store.dispatch("something from native")
}
}
}
注意:我在编程词汇方面很笨拙,所以如果可能的话,请给我一小段示例代码,或者 link 我去一些 GitHub 回购 我可以参考而不是给我一段我可能不会理解的文字。
以非常简单的方式,它看起来像这样:
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider<SomeBloc>(
create: (_) {
final bloc = SomeBloc(); //Create bloc
MethodChannelHandler(bloc); //Add method handler
return bloc;
},
lazy: false,
child: Text("Content"),
);
}
}
class SomeBloc extends Bloc {
SomeBloc() : super(SomeInitState());
@override
Stream mapEventToState(event) async* {
if (event is SomeEvent) {
//Handle SomeEvent
}
}
}
class MethodChannelHandler {
final SomeBloc someBloc;
MethodChannelHandler(this.someBloc) {
methodChannel.setMethodCallHandler(_handleMethod);
}
// Handle method calls from native
Future _handleMethod(MethodCall call) async {
if (call.method == A_METHOD) {
someBloc.add(SomeEvent("something from native"));
}
}
}
我已经开始使用 flutter_bloc 包而不是 redux 来尝试一下,但我不完全确定我将如何调用 flutter bloc从本地接收东西时的事件 (Android/iOS)。使用 redux 更容易,因为在我的 main.dart 文件的父 MyApp 小部件中,我将 redux 存储传递给自定义 class 我从上述 class 创建并调度了方法(称为 MethodChannelHandler)。
main.dart:
void main() {
runApp(new MyApp());
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final Store<AppState> store = Store<AppState>(
// ... redux stuff ...
);
@override
void initState() {
// sauce
MethodChannelHandler(store);
super.initState();
}
}
methodChannelHandler.dart:
class MethodChannelHandler {
Store<AppState> store;
MethodChannelHandler(this.store) {
methodChannel.setMethodCallHandler(_handleMethod);
}
// Handle method calls from native
Future _handleMethod(MethodCall call) async {
if (call.method == A_METHOD) {
store.dispatch("something from native")
}
}
}
注意:我在编程词汇方面很笨拙,所以如果可能的话,请给我一小段示例代码,或者 link 我去一些 GitHub 回购 我可以参考而不是给我一段我可能不会理解的文字。
以非常简单的方式,它看起来像这样:
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider<SomeBloc>(
create: (_) {
final bloc = SomeBloc(); //Create bloc
MethodChannelHandler(bloc); //Add method handler
return bloc;
},
lazy: false,
child: Text("Content"),
);
}
}
class SomeBloc extends Bloc {
SomeBloc() : super(SomeInitState());
@override
Stream mapEventToState(event) async* {
if (event is SomeEvent) {
//Handle SomeEvent
}
}
}
class MethodChannelHandler {
final SomeBloc someBloc;
MethodChannelHandler(this.someBloc) {
methodChannel.setMethodCallHandler(_handleMethod);
}
// Handle method calls from native
Future _handleMethod(MethodCall call) async {
if (call.method == A_METHOD) {
someBloc.add(SomeEvent("something from native"));
}
}
}