一个工具, 可以根据 dart 代码, 自动生成不同平台的代码, 例如 Android, iOS, Web....
platforms_source_gen 会自动根据 dart 代码, 生成其他平台的代码, 以便能在混合开发的时候快速编程, 提高开发效率.
因为我们在混合开发的时候, 涉及到 Flutter 和 Native 之间的交互, 总是需要手动写两份, 甚至多份相同功能, 但是不同语言的代码.
当我们在进行混合开发的时候, 经常需要从 Android 页面, 跳转到 Flutter 页面, 然后又从 Flutter 页面, 跳回 Android 页面, 这种反复混合跳转, 我们一般都会在两边写一个路由, 用来管理所有的跳转, 例如 flutter_boost , 而路由管理就需要定义页面的路径:
public class Route {
public static final String android_page1 = "/android/page1";
public static final String android_page2 = "/android/page2";
//.......
public static final String flutter_page1 = "/flutter/page1";
public static final String flutter_page2 = "/flutter/page2";
//.......
}
class Route {
static const String android_page1 = "/android/page1";
static const String android_page2 = "/android/page2";
//.......
static const String flutter_page1 = "/flutter/page1";
static const String flutter_page2 = "/flutter/page2";
//.......
}
@interface MQQFlutterGen_Route : NSObject
@property (nonatomic, strong) String *main_page;
@property (nonatomic, strong) String *mine_main;
@property (nonatomic, assign) int int_value;
@end
同样的代码我们需要些两份, 如果支持 iOS 平台, 就需要再写一份 swift, 支持 Web, 就需要再写一份 js... 这个工具就是解放你的双手, 只需要写一分 dart 代码, 工具会根据 dart 代码, 自动生成其他平台的代码.
把 platforms_source_gen
添加到 pubspec.yaml
文件中, 并在命令行运行命令 dart pub get
下载, 当然你也可以直接点 IDE 上面的 puh get
直接下载:
dev_dependencies:
platforms_source_gen: 版本号
最新的版本号, 你可以点击 这里, 如果你还是个新手, 从来没下载安装过 package, 可以点击这里, 这里有详细的说明文档.
编写你的 drat 代码, 放到这个目录下: ./lib/example
:
这个路径你可以自定义, 工具会自动将这个路径下的所有 dart 文件都转换成
class InnerClass {
String a;
int b;
}
class Route {
static const String main_page = "/main/page"; //main page
static const String mine_main = "/mine/main"; //
static const int int_value = 123;
}
更多例子你可以点击这里 example class.
写一个 main 函数在 ./test/any.dart
路径下, 点击左边的按钮, 运行 run:
flutter 的应用入口, 会直接运行起一个 app.
import 'package:platforms_source_gen/platforms_source_gen.dart';
void main() async {
List<GenClassBean> genClassBeans = await platforms_source_gen_init(
"./lib/example", //you dart file path
);
platforms_source_gent_start(
"com.siyehua.example", //javaPackage
"./Android_gen", // androidSavePath
genClassBeans,
nullSafe: true);
platforms_source_start_gen_objc(
"MQQFlutterGen_", // iOS Pre
"./iOS_gen", //iOS save path
genClassBeans,
nullSafe: true);
}
运行结束后, 你就可以在你自定义的路径下找到自动生成的类了, 例子中的路径放在 ./Android_gen
, 或者在./iOS_gen
中找到生成的OC代码。
类 | 支持 |
---|---|
普通类 | ✅ |
接口 | ✅ |
继承 | ❌ |
实现 | ❌ |
组合 | ✅ |
方法 | 支持 |
---|---|
所有 | ✅ |
类型 | 支持 | Android | iOS |
---|---|---|---|
bool | ✅ | Boolean | BOOL |
int | ✅ | Long | int |
double | ✅ | Double | double |
String | ✅ | String | NSString |
Uint8List | ✅ | byte[] | NSData |
Int32List | ✅ | int[] | NSData |
Int64List | ✅ | long[] | NSData |
Float64List | ✅ | double[] | NSData |
List< T > | ✅ | ArrayList<> | NSArray |
Map<T, U> | ✅ | HashMap<T, U> | NSDictionary |
var | ❌ | ||
dynamic | ❌ | ||
Object | ✅ | ❌ | id |
自定义类 | ✅ |
- 为什么依赖要加在
dev_dependencies
中?
因为这是一个开发工具,这个工具的代码无需打包进源码中, 故只需要加在 dev_dependencies 即可. - 这个工具和 source_gen 有什么不同, 为什么不直接使用它?
source_gen
主要是依赖 run build 来生成自己想要的 dart 代码, 而这个工具是根据 dart 代码生成其他平台代码, 方法和作用不相同.
更多问题和 Bug, 欢迎前往 github