Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

无法获取返回的参数 #1019

Closed
yownyang opened this issue Apr 9, 2021 · 16 comments
Closed

无法获取返回的参数 #1019

yownyang opened this issue Apr 9, 2021 · 16 comments
Assignees
Labels
Boost3.0 The problem in boost 3.0

Comments

@yownyang
Copy link

yownyang commented Apr 9, 2021

调用代码

BoostNavigator.of().push('second_page', arguments: {'name': 'yown', 'present' : false, 'animated' : true}, withContainer: true,).then((value) => print($value))

如果withContainer参数为true,则then((value) => print($value))没有运行。
如果withContainer参数为false,则then((value) => print($value))正常运行。

@yownyang
Copy link
Author

yownyang commented Apr 9, 2021

我看了一下你们的源码实现,发现问题如下。
withContainer参数为true时,你们在flutter端创建的uniqueId原生端并没有使用,原生端的uniqueId是自己生成的。但是flutter端的_pendingResult字典只存储了flutter端生产的uniqueId,原生端的并没有进行存储。然后在pop时,你们是使用原生端生产的uniqueId_pendingResult字典查询,自然是查询不到的,所以then((value) => print($value))没有运行。 @noborder

@yownyang
Copy link
Author

yownyang commented Apr 9, 2021

还有一个问题
withContainer参数为true时,arguments这个字典里面不能用function作为参数,encode会报错

@yownyang
Copy link
Author

yownyang commented Apr 9, 2021

我只想知道,我在使用flutter-boost的情况下,withContainer参数为true时,我该如何进行页面之间的回调

@ColdPaleLight ColdPaleLight added the Boost3.0 The problem in boost 3.0 label Apr 12, 2021
@kayoxu
Copy link

kayoxu commented Apr 13, 2021

原生在application注册的时候不要使用匿名内部类

@yownyang
Copy link
Author

原生在application注册的时候不要使用匿名内部类

这个匿名内部类是指什么?我没太看懂这个回答

@kayoxu
Copy link

kayoxu commented Apr 13, 2021

    FlutterBoost.instance().setup(this, IFlutterBoostDelegate() /*object : FlutterBoostDelegate {
        override fun pushNativeRoute(pageName: String, arguments: Map<String, Any>) {
            //                Intent intent = new Intent(FlutterBoost.instance().currentActivity(), NativePageActivity.class);

// FlutterBoost.instance().currentActivity().startActivity(intent);
}

        override fun pushFlutterRoute(pageName: String, uniqueId: String?, arguments: Map<String, Any>) {
            val intent = FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity::class.java, FlutterBoost.ENGINE_ID)
                    .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.opaque)
                    .destroyEngineWithActivity(false)
                    .url(pageName)
                    .urlParams(arguments)
                    .build(FlutterBoost.instance().currentActivity())
            FlutterBoost.instance().currentActivity().startActivity(intent)
        }
    }*/) { engine: FlutterEngine ->
        engine.plugins
        FlutterUtils.share().registerUtils.registerWith(engine)
     }

@yownyang
Copy link
Author

    FlutterBoost.instance().setup(this, IFlutterBoostDelegate() /*object : FlutterBoostDelegate {
        override fun pushNativeRoute(pageName: String, arguments: Map<String, Any>) {
            //                Intent intent = new Intent(FlutterBoost.instance().currentActivity(), NativePageActivity.class);

// FlutterBoost.instance().currentActivity().startActivity(intent);
}

        override fun pushFlutterRoute(pageName: String, uniqueId: String?, arguments: Map<String, Any>) {
            val intent = FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity::class.java, FlutterBoost.ENGINE_ID)
                    .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.opaque)
                    .destroyEngineWithActivity(false)
                    .url(pageName)
                    .urlParams(arguments)
                    .build(FlutterBoost.instance().currentActivity())
            FlutterBoost.instance().currentActivity().startActivity(intent)
        }
    }*/) { engine: FlutterEngine ->
        engine.plugins
        FlutterUtils.share().registerUtils.registerWith(engine)
     }

额,我想问的是iOS端的处理。其次,这些安卓的类,我并没有在iOS这边找到相应的方法

@yownyang
Copy link
Author

复现我说的问题很容易,example里面,回传参数的那个跳转,把withContainer设为true之后,then方法就不运行了

@luckysmg
Copy link
Collaborator

您说的example里面的例子是这个吗? @yownyang

void _navigateAndDisplaySelection(BuildContext context) async {
    final result =
        await BoostNavigator.of().push('selectionScreen', withContainer: true);
    Scaffold.of(context)
      ..removeCurrentSnackBar()
      ..showSnackBar(SnackBar(content: Text("$result")));
  }

@yownyang
Copy link
Author

我说的例子是ReturnDataWidget这个类,他在路由中的名字叫做'returnData'
push的代码在flutter_page这个文件

onTap: () => BoostNavigator.of()
                      .push("returnData", withContainer: false)
                      .then((onValue) => print('Get result: $onValue'))),

pop 的代码在return_data这个文件.

BoostNavigator.of().pop('#FlutterBoost3.0');

withContainerfalse时,就可以得到pop返回的结果
withContainerture时,pop返回的结果就得不到 @luckysmg

@luckysmg
Copy link
Collaborator

这个您可以试试v3.0-hotfixes分支,应该是没问题的

@yownyang
Copy link
Author

目前我项目中引用的就是最新版本,事实并不行

dependencies:
  flutter_boost:
    git:
      url: 'https://github.com/alibaba/flutter_boost.git'
      ref: 'v3.0-hotfixes'

@luckysmg

@yownyang
Copy link
Author

我建议你们重新理一下你们iOS端的源码,flutter端生成的uniqueID客户端根本就没有使用
我自己对你们的iOS 端源码进行了粗略修改就可以了
FlutterBoostPlugin文件的pushFlutterRoute:(FBCommonParams*)input error:(FlutterError *_Nullable *_Nonnull)error方法中改为如下代码

 NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:input.arguments];
 [dic setObject:input.uniqueId forKey:@"uniqueId"];
 [self.delegate pushFlutterRoute:input.pageName arguments:dic];

FBFlutterViewContainer中的- (void)setName:(NSString *)name params:(NSDictionary *)params方法添加如下代码

if (params[@"uniqueId"]) {
    _uniqueID = params[@"uniqueId"];
}

做出这种修改之后就可以正常的获取到回调的数据了,从源码和事实来看,你们flutter端生产的uniqueID客户端并没有使用,你们也可以打印下你们flutter端的_pendingResult字典

@yownyang
Copy link
Author

2021-04-13.16.02.50_1618301003648311.mp4

从你们官方下载的code,就改了一个withContainer参数

@TruthKeeper
Copy link

Android端也有同样的问题

@luckysmg luckysmg self-assigned this Apr 15, 2021
@luckysmg
Copy link
Collaborator

911bcbf

这次commit已经修复,请尝试一下 v3.0-beta.4
如果还发现有任何问题可以重新reopen 这个issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Boost3.0 The problem in boost 3.0
Projects
None yet
Development

No branches or pull requests

5 participants