Flutter
1、Flutter版本要求:1.17及以上
2、yaml中引入
d_stack: ^1.2.5
3、执行 pub get
4、在main.dart引入文件
import 'package:d_stack/d_stack.dart'; import 'package:d_stack/observer/life_cycle_observer.dart';
5、在main()函数加入
// 注册路由builder , 生命周期监听
DStack.instance.register(
builders: builder的实现者,参考步骤7
);6、在MaterialApp里面配置navigatorKey、navigatorObservers、home
return MaterialApp(
navigatorKey: DStack.instance.navigatorKey,
navigatorObservers: [DStack.instance.dStackNavigatorObserver],
home: DStackWidget(),
);对于home: DStackWidget(),如果工程是flutter为主工程的,则配置为home: DStackWidget(homePage: yourHomePage),需要在DStackWidget初始化时配置自己工程中的homePage
如果是native为主工程,flutter是以module形式接入的,则配置为home: DStackWidget()即可
7、builder的实现
class RouterBuilder {
static Map<String, DStackWidgetBuilder> builders() {
Map<String, DStackWidgetBuilder> builders = {
'page1': page1Builder,
'page2': page2Builder,
};
return builders;
}
static DStackWidgetBuilder page1Builder = (Map params)
{
return (BuildContext context) {
return Page1();
};
};
static DStackWidgetBuilder page2Builder = (Map params)
{
return (BuildContext context) {
return Page2();
};
};
}安卓
纯Flutter工程
1.工程的pubspec.yaml中,引入dstack依赖
d_stack: ^1.2.5
2.以工程方式打开android目录,进入android工程进行配置
3.在自己工程的自定义application中,onCreate方法内初始化混合栈
val nativeRouter = INativeRouter { routerUrl, params ->
}
DStack.getInstance().init(this, nativeRouter)4.在自己工程的flutter容器activity中,实现引擎复用方法
override fun provideFlutterEngine(context: Context): FlutterEngine? {
return FlutterEngineCache.getInstance().get(DStack.ENGINE_ID)
}原生工程接入flutter模块
1,2,3,4,步骤如上,额外添加步骤5
5.在app的build.gradle中,添加依赖 implementation project(':d_stack')
iOS
1、在AppDelegate引入头文件
#import "FlutterPluginRegistrant/GeneratedPluginRegistrant.h" #import <DStack.h>
2、在didFinishLaunchingWithOptions调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[DStack sharedInstance] startWithDelegate:id<DStackDelegate>];
[GeneratedPluginRegistrant registerWithRegistry:DStack.sharedInstance.engine];
}3、在id所在的头文件中加入
@DStackInject(当前类);
4、实现DStackDelegate的代理方法
+ (nonnull FlutterEngine *)dStackForFlutterEngine {
}
- (UINavigationController *)dStack:(DStack *)stack navigationControllerForNode:(DStackNode *)node
{
}
- (void)dStack:(DStack *)stack presentWithNode:(DStackNode *)node
{
}
- (void)dStack:(DStack *)stack pushWithNode:(DStackNode *)node
{
}例如在TRouterDelegate里实现DStackDelegate,完整示例为
#import <DStack.h>
@interface TRouterDelegate : NSObject <DStackDelegate>
@end
#import "TRouterDelegate.h"
// 注解
@DStackInject(TRouterDelegate);
@implementation TRouterDelegate
+ (nonnull FlutterEngine *)dStackForFlutterEngine {
FlutterEngine *engine = [[FlutterEngine alloc] initWithName:@"io.flutter" project:nil];
[engine run];
return engine;
}
- (UINavigationController *)dStack:(DStack *)stack navigationControllerForNode:(DStackNode *)node
{
}
- (void)dStack:(DStack *)stack presentWithNode:(DStackNode *)node
{
}
- (void)dStack:(DStack *)stack pushWithNode:(DStackNode *)node
{
}
