本节指标

  • 闲鱼手册中提到的混合开发
  • 编写到应用一个 flutter 组件的残缺过程

视频

https://www.bilibili.com/vide...

代码

https://github.com/ducafecat/..._baidu_plugin_ducafecat/releases/tag/1.0.1

注释

从古至今、挪动开发不可回避的问题

  • flutter、weex、React Native、Cordova

  • 开发模式

聊聊 Flutter in Action 闲鱼最佳实际

电子书下载

https://c.tb.cn/I3.ZZpRl

第二代混合技术计划 FlutterBoost

  • 我的项目开源地址

https://github.com/alibaba/fl..._boost

  • 架构图

  • Native 层概念

● Container:Native 容器,平台 Controller,Activity,ViewController ● Container Manager:容器的管理者 ● Adaptor:Flutter 是适配层 ● Messaging:基于 Channel 的音讯通信

  • Dart 层概念

● Container:Flutter 用来包容 Widget 的容器,具体实现为 Navigator 的派生类 ● Container Manager:Flutter 容器的治理,提供 show,remove 等 Api ● Coordinator: 协调器,承受 Messaging 音讯,负责调用 Container Manager 的状态治理。 ● Messaging:基于 Channel 的音讯通信

Flutter & FaaS 云端一体化

Flutter 会为以下团队带来较大的收益

Flutter Redux

混合工程下的 Flutter 研发构造

入手写第一个 Flutter 组件

创立 flutter 组件工程

$ flutter create --org tech.ducafecat --template=plugin -a java -i objc flutter_baidu_plugin_ducafecat

退出 加法 函数

  • dart 代码

lib/flutter_baidu_plugin_ducafecat.dart

import 'dart:async';import 'package:flutter/services.dart';class FlutterBaiduPluginDucafecat {  static const MethodChannel _channel =      const MethodChannel('flutter_baidu_plugin_ducafecat');  static Future<String> get platformVersion async {    final String version = await _channel.invokeMethod('getPlatformVersion');    return version;  }  static Future<int> duAddOne(int num) async {    final int val = await _channel.invokeMethod('duAddOne', {"num": num});    return val;  }}
  • android 代码

android/src/main/java/tech/ducafecat/flutter_baidu_plugin_ducafecat/FlutterBaiduPluginDucafecatPlugin.java

  @Override  public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {    if (call.method.equals("getPlatformVersion")) {      result.success("Android " + android.os.Build.VERSION.RELEASE);    }    else if (call.method.equals("duAddOne")) {      int val = 100;      val += Integer.valueOf(call.argument("num").toString());      result.success(val);    }    else {      result.notImplemented();    }  }
  • ios 代码

ios/Classes/FlutterBaiduPluginDucafecatPlugin.m

#import "FlutterBaiduPluginDucafecatPlugin.h"@implementation FlutterBaiduPluginDucafecatPlugin+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {  FlutterMethodChannel* channel = [FlutterMethodChannel      methodChannelWithName:@"flutter_baidu_plugin_ducafecat"            binaryMessenger:[registrar messenger]];  FlutterBaiduPluginDucafecatPlugin* instance = [[FlutterBaiduPluginDucafecatPlugin alloc] init];  [registrar addMethodCallDelegate:instance channel:channel];}- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {  if ([@"getPlatformVersion" isEqualToString:call.method]) {    result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);  }  else if ([@"duAddOne" isEqualToString:call.method]) {      NSInteger val = 100;      val += [[call.arguments objectForKey:@"num"] intValue];      result([NSNumber numberWithLong:val]);  }  else {    result(FlutterMethodNotImplemented);  }}@end

新建工程调用

  • pubspec.yaml
flutter_baidu_plugin_ducafecat:  git:    url: https://github.com/ducafecat/flutter_baidu_plugin_ducafecat    version: ^0.0.1
  • 调用 加法
  void _incrementCounter() async {    _counter = await FlutterBaiduPluginDucafecat.duAddOne(20);    setState(() {});  }

参考

  • https://cordova.apache.org/
  • https://reactnative.dev/
  • https://flutter.dev/
  • https://weex.apache.org/