Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
3052dbd7
E
engine
项目概览
sxychenjing
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
3052dbd7
编写于
9月 27, 2018
作者:
D
Dan Field
提交者:
GitHub
9月 27, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
SystemNavigator.pop can pop w/o UINavigationController (#6341)
* SystemNavigator.pop can pop w/o UINavigationController
上级
0c096f79
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
36 addition
and
3 deletion
+36
-3
shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.h
...tform/darwin/ios/framework/Source/FlutterPlatformPlugin.h
+6
-1
shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.mm
...form/darwin/ios/framework/Source/FlutterPlatformPlugin.mm
+25
-1
shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
...form/darwin/ios/framework/Source/FlutterViewController.mm
+5
-1
未找到文件。
shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.h
浏览文件 @
3052dbd7
...
...
@@ -5,10 +5,15 @@
#ifndef SHELL_PLATFORM_IOS_FRAMEWORK_SOURCE_FLUTTERPLATFORMPLUGIN_H_
#define SHELL_PLATFORM_IOS_FRAMEWORK_SOURCE_FLUTTERPLATFORMPLUGIN_H_
#include "flutter/fml/memory/weak_ptr.h"
#include "flutter/shell/platform/darwin/ios/framework/Headers/FlutterChannels.h"
@interface
FlutterPlatformPlugin
:
NSObject
#include <UIKit/UIKit.h>
@interface
FlutterPlatformPlugin
:
NSObject
-
(
instancetype
)
init
NS_UNAVAILABLE
;
-
(
instancetype
)
initWithViewController
:(
fml
::
WeakPtr
<
UIViewController
>
)
viewController
NS_DESIGNATED_INITIALIZER
;
-
(
void
)
handleMethodCall
:(
FlutterMethodCall
*
)
call
result
:(
FlutterResult
)
result
;
@end
...
...
shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.mm
浏览文件 @
3052dbd7
...
...
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.h"
#include "flutter/fml/logging.h"
#include <AudioToolbox/AudioToolbox.h>
#include <Foundation/Foundation.h>
...
...
@@ -31,7 +32,26 @@ const char* const kOverlayStyleUpdateNotificationKey =
using
namespace
shell
;
@implementation
FlutterPlatformPlugin
@implementation
FlutterPlatformPlugin
{
fml
::
WeakPtr
<
UIViewController
>
_viewController
;
}
-
(
instancetype
)
init
{
@throw
([
NSException
exceptionWithName
:
@"FlutterPlatformPlugin must initWithViewController"
reason:
nil
userInfo:
nil
]);
}
-
(
instancetype
)
initWithViewController
:(
fml
::
WeakPtr
<
UIViewController
>
)
viewController
{
FML_DCHECK
(
viewController
)
<<
"viewController must be set"
;
self
=
[
super
init
];
if
(
self
)
{
_viewController
=
viewController
;
}
return
self
;
}
-
(
void
)
handleMethodCall
:(
FlutterMethodCall
*
)
call
result
:(
FlutterResult
)
result
{
NSString
*
method
=
call
.
method
;
...
...
@@ -178,9 +198,13 @@ using namespace shell;
// Apple's human user guidelines say not to terminate iOS applications. However, if the
// root view of the app is a navigation controller, it is instructed to back up a level
// in the navigation hierarchy.
// It's also possible in an Add2App scenario that the FlutterViewController was presented
// outside the context of a UINavigationController, and still wants to be popped.
UIViewController
*
viewController
=
[
UIApplication
sharedApplication
].
keyWindow
.
rootViewController
;
if
([
viewController
isKindOfClass
:[
UINavigationController
class
]])
{
[((
UINavigationController
*
)
viewController
)
popViewControllerAnimated
:
NO
];
}
else
if
(
viewController
!=
_viewController
.
get
())
{
[
_viewController
.
get
()
dismissViewControllerAnimated
:
NO
completion
:
nil
];
}
}
...
...
shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
浏览文件 @
3052dbd7
...
...
@@ -8,6 +8,7 @@
#include <memory>
#include "flutter/fml/memory/weak_ptr.h"
#include "flutter/fml/message_loop.h"
#include "flutter/fml/platform/darwin/platform_version.h"
#include "flutter/fml/platform/darwin/scoped_nsobject.h"
...
...
@@ -34,6 +35,7 @@
fml
::
scoped_nsobject
<
FlutterDartProject
>
_dartProject
;
shell
::
ThreadHost
_threadHost
;
std
::
unique_ptr
<
shell
::
Shell
>
_shell
;
std
::
unique_ptr
<
fml
::
WeakPtrFactory
<
FlutterViewController
>>
_weakFactory
;
// Channels
fml
::
scoped_nsobject
<
FlutterPlatformPlugin
>
_platformPlugin
;
...
...
@@ -65,6 +67,7 @@
bundle
:(
NSBundle
*
)
nibBundleOrNil
{
self
=
[
super
initWithNibName
:
nibNameOrNil
bundle
:
nibBundleOrNil
];
if
(
self
)
{
_weakFactory
=
std
::
make_unique
<
fml
::
WeakPtrFactory
<
FlutterViewController
>>
(
self
);
if
(
projectOrNil
==
nil
)
_dartProject
.
reset
([[
FlutterDartProject
alloc
]
init
]);
else
...
...
@@ -209,7 +212,8 @@
binaryMessenger:
self
codec:
[
FlutterJSONMessageCodec
sharedInstance
]]);
_platformPlugin
.
reset
([[
FlutterPlatformPlugin
alloc
]
init
]);
_platformPlugin
.
reset
(
[[
FlutterPlatformPlugin
alloc
]
initWithViewController
:
_weakFactory
->
GetWeakPtr
()]);
[
_platformChannel
.
get
()
setMethodCallHandler
:
^
(
FlutterMethodCall
*
call
,
FlutterResult
result
)
{
[
_platformPlugin
.
get
()
handleMethodCall
:
call
result
:
result
];
}];
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录