FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts

Overview


中文文档 中文介绍

Release Note

v3.0-preview.17

PS: Before updating the beta version, please read the CHANGELOG to see if there are any BREAKING CHANGE

    1. Flutter SDK upgrades do not require Boost upgrades
    1. Simplify the architecture
    1. Simplify the interface
    1. Unified design of double-end interface
    1. Solved the Top Issue
    1. Android does not need to distinguish between AndroidX and Support

FlutterBoost

A next-generation Flutter-Native hybrid solution. FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts.The philosophy of FlutterBoost is to use Flutter as easy as using a WebView. Managing Native pages and Flutter pages at the same time is non-trivial in an existing App. FlutterBoost takes care of page resolution for you. The only thing you need to care about is the name of the page(usually could be an URL). 

Prerequisites

  1. Before proceeding, you need to integrate Flutter into your existing project.
  2. The Flutter SDK version supported by Boost 3.0 is >= 1.22

Getting Started

Add a dependency in you Flutter project.

Open you pubspec.yaml and add the following line to dependencies:

flutter_boost:
    git:
        url: 'https://github.com/alibaba/flutter_boost.git'
        ref: 'v3.0-preview.17'

Boost Integration

使用文档

建设文档

FAQ

please read this document: FAQ

License

This project is licensed under the MIT License - see the LICENSE.md file for details

关于我们

阿里巴巴-闲鱼技术是国内最早也是最大规模线上运行Flutter的团队。

我们在公众号中为你精选了Flutter独家干货,全面而深入。

内容包括:Flutter的接入、规模化应用、引擎探秘、工程体系、创新技术等教程和开源信息。

架构/服务端/客户端/前端/算法/质量工程师 在公众号中投递简历,名额不限哦

欢迎来闲鱼做一个好奇、幸福、有影响力的程序员,简历投递:[email protected]

订阅地址

For English

Comments
  • 我flutter升级到最新 运行example_new 出现问题  Activity无法转换为ExclusiveAppComponent<Activity>

    我flutter升级到最新 运行example_new 出现问题 Activity无法转换为ExclusiveAppComponent

    /flutter_boost-master/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java:167: 错误: 不兼容的类型: Activity无法转换为ExclusiveAppComponent getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getLifecycle());

    我修改了下FlutterBoostActivity文件 在外层包裹了一层ExclusiveAppComponent

    但又出现其他问题 , 我使用BoostNavigator.instance.pop(result); 在android原生界面得不到参数, 不知道和这个有没有关系.

    opened by Zhaoss 26
  • example 0.1.54 crash on ios

    example 0.1.54 crash on ios

    reproduce step.

    push native -> push Flutter Page -> Open second route -> push native -> push Flutter Page -> Open second route -> push native -> back -> back-> back-> back-> back ..... crash

    bt all

     thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
        frame #0: 0x00007fff5086078b libobjc.A.dylib`objc_msgSend + 11
        frame #1: 0x0000000100c3a7ba Flutter`flutter::AccessibilityBridge::~AccessibilityBridge() + 64
        frame #2: 0x0000000100c41a25 Flutter`std::__1::unique_ptr<flutter::AccessibilityBridge, std::__1::default_delete<flutter::AccessibilityBridge> >::reset(flutter::AccessibilityBridge*) + 25
        frame #3: 0x0000000100c41822 Flutter`flutter::PlatformViewIOS::SetOwnerViewController(fml::WeakPtr<FlutterViewController>) + 82
        frame #4: 0x0000000100c22add Flutter`-[FlutterEngine setViewController:] + 167
      * frame #5: 0x00000001008e6da5 Runner`-[FLBFlutterEngine detach](self=0x0000600001ae11e0, _cmd="detach") at FLBFlutterEngine.m:120:17
        frame #6: 0x00000001008e7cf3 Runner`-[FLBFlutterViewContainer detatchFlutterEngine](self=0x00007fa4298c6200, _cmd="detatchFlutterEngine") at FLBFlutterViewContainer.m:146:5
        frame #7: 0x00000001008e7edc Runner`-[FLBFlutterViewContainer viewWillAppear:](self=0x00007fa4298c6200, _cmd="viewWillAppear:", animated=YES) at FLBFlutterViewContainer.m:166:9
        frame #8: 0x00007fff46f0ebd5 UIKitCore`-[UIViewController _setViewAppearState:isAnimating:] + 661
        frame #9: 0x00007fff46f0f2f1 UIKitCore`-[UIViewController __viewWillAppear:] + 115
        frame #10: 0x00007fff46e59081 UIKitCore`-[UINavigationController _startCustomTransition:] + 1247
        frame #11: 0x00007fff46e6e3d0 UIKitCore`-[UINavigationController _startDeferredTransitionIfNeeded:] + 698
        frame #12: 0x00007fff46e6f7e5 UIKitCore`-[UINavigationController __viewWillLayoutSubviews] + 150
        frame #13: 0x00007fff46e51127 UIKitCore`-[UILayoutContainerView layoutSubviews] + 217
        frame #14: 0x00007fff47a52ad5 UIKitCore`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2478
        frame #15: 0x00007fff2b06e91d QuartzCore`-[CALayer layoutSublayers] + 255
        frame #16: 0x00007fff2b073323 QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 517
        frame #17: 0x00007fff2b07fa7c QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 80
        frame #18: 0x00007fff2afc6e54 QuartzCore`CA::Context::commit_transaction(CA::Transaction*, double) + 324
        frame #19: 0x00007fff2affc32f QuartzCore`CA::Transaction::commit() + 643
        frame #20: 0x00007fff475723b4 UIKitCore`_UIApplicationFlushRunLoopCATransactionIfTooLate + 104
        frame #21: 0x00007fff47614cba UIKitCore`__handleEventQueueInternal + 6902
        frame #22: 0x00007fff23b0d271 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
        frame #23: 0x00007fff23b0d19c CoreFoundation`__CFRunLoopDoSource0 + 76
        frame #24: 0x00007fff23b0c974 CoreFoundation`__CFRunLoopDoSources0 + 180
        frame #25: 0x00007fff23b0767f CoreFoundation`__CFRunLoopRun + 1263
        frame #26: 0x00007fff23b06e66 CoreFoundation`CFRunLoopRunSpecific + 438
        frame #27: 0x00007fff38346bb0 GraphicsServices`GSEventRunModal + 65
        frame #28: 0x00007fff47578dd0 UIKitCore`UIApplicationMain + 1621
        frame #29: 0x00000001008e0370 Runner`main(argc=1, argv=0x00007ffeef31fd48) at main.m:7:12
        frame #30: 0x00007fff516ecd29 libdyld.dylib`start + 1
        frame #31: 0x00007fff516ecd29 libdyld.dylib`start + 1
      thread #5
        frame #0: 0x00007fff51824b9a libsystem_kernel.dylib`__workq_kernreturn + 10
        frame #1: 0x00007fff518d177f libsystem_pthread.dylib`_pthread_wqthread + 390
        frame #2: 0x00007fff518d157b libsystem_pthread.dylib`start_wqthread + 15
      thread #6, name = 'com.apple.uikit.eventfetch-thread'
        frame #0: 0x00007fff51823166 libsystem_kernel.dylib`mach_msg_trap + 10
        frame #1: 0x00007fff518236cc libsystem_kernel.dylib`mach_msg + 60
        frame #2: 0x00007fff23b0caf5 CoreFoundation`__CFRunLoopServiceMachPort + 197
        frame #3: 0x00007fff23b07817 CoreFoundation`__CFRunLoopRun + 1671
        frame #4: 0x00007fff23b06e66 CoreFoundation`CFRunLoopRunSpecific + 438
        frame #5: 0x00007fff2569694f Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 211
        frame #6: 0x00007fff25696bc2 Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 72
        frame #7: 0x00007fff4761a768 UIKitCore`-[UIEventFetcher threadMain] + 138
        frame #8: 0x00007fff256ac887 Foundation`__NSThread__start__ + 1047
        frame #9: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #10: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #8
        frame #0: 0x00007fff51824b9a libsystem_kernel.dylib`__workq_kernreturn + 10
        frame #1: 0x00007fff518d177f libsystem_pthread.dylib`_pthread_wqthread + 390
        frame #2: 0x00007fff518d157b libsystem_pthread.dylib`start_wqthread + 15
      thread #9, name = 'io.flutter.2.ui'
        frame #0: 0x00000001118a8588
        frame #1: 0x0000000111468fb6
        frame #2: 0x0000000111468c2f
        frame #3: 0x0000000110e03622
        frame #4: 0x00000001112fb182
        frame #5: 0x00000001112fa042
        frame #6: 0x00000001112f9860
        frame #7: 0x0000000111a4ac3a
        frame #8: 0x000000011220a8f2
        frame #9: 0x000000010cd47112
        frame #10: 0x0000000112208d07
        frame #11: 0x000000010cd48b64
        frame #12: 0x000000010cd42625
        frame #13: 0x00000001122090c6
        frame #14: 0x000000010cd48b64
        frame #15: 0x000000010cd42625
        frame #16: 0x00000001122090c6
        frame #17: 0x000000010cd48b64
        frame #18: 0x0000000111467265
        frame #19: 0x0000000112209108
        frame #20: 0x000000010cd48b64
        frame #21: 0x0000000111467265
        frame #22: 0x00000001122090e7
        frame #23: 0x000000010cd48b64
        frame #24: 0x000000010cd42625
        frame #25: 0x00000001122090c6
        frame #26: 0x000000010cd48b64
        frame #27: 0x0000000111467265
        frame #28: 0x00000001122090e7
        frame #29: 0x000000010cd48b64
        frame #30: 0x0000000111467265
        frame #31: 0x00000001122090e7
        frame #32: 0x000000010cd48b64
        frame #33: 0x000000010cd42ffe
        frame #34: 0x000000011220919c
        frame #35: 0x000000010cd48b64
        frame #36: 0x0000000111467265
        frame #37: 0x0000000112209108
        frame #38: 0x000000010cd48b64
        frame #39: 0x0000000111467265
        frame #40: 0x00000001122090e7
        frame #41: 0x000000010cd48b64
        frame #42: 0x0000000111467265
        frame #43: 0x0000000112209108
        frame #44: 0x000000010cd48b64
        frame #45: 0x000000010cd42625
        frame #46: 0x00000001122090c6
        frame #47: 0x000000010cd48b64
        frame #48: 0x0000000111467265
        frame #49: 0x00000001122090e7
        frame #50: 0x000000010cd48b64
        frame #51: 0x000000010cd42625
        frame #52: 0x00000001122090c6
        frame #53: 0x000000010cd48b64
        frame #54: 0x0000000111467265
        frame #55: 0x0000000112209108
        frame #56: 0x000000010cd48b64
        frame #57: 0x0000000111467265
        frame #58: 0x0000000112209108
        frame #59: 0x000000010cd48b64
        frame #60: 0x0000000111467265
        frame #61: 0x00000001122090e7
        frame #62: 0x000000010cd48b64
        frame #63: 0x0000000111467265
        frame #64: 0x00000001122090e7
        frame #65: 0x000000010cd48b64
        frame #66: 0x0000000111467265
        frame #67: 0x0000000112209108
        frame #68: 0x000000010cd48b64
        frame #69: 0x0000000111467265
        frame #70: 0x00000001122090e7
        frame #71: 0x000000010cd48b64
        frame #72: 0x000000010cd42625
        frame #73: 0x00000001122090c6
        frame #74: 0x000000010cd48b64
        frame #75: 0x0000000111467265
        frame #76: 0x00000001122090e7
        frame #77: 0x000000010cd48b64
        frame #78: 0x000000010cd42625
        frame #79: 0x00000001122090c6
        frame #80: 0x000000010cd48b64
        frame #81: 0x000000010cd42625
        frame #82: 0x00000001122090c6
        frame #83: 0x000000010cd48b64
        frame #84: 0x0000000111467265
        frame #85: 0x0000000112209108
        frame #86: 0x000000010cd48b64
        frame #87: 0x000000010cd42625
        frame #88: 0x00000001122090c6
        frame #89: 0x000000010cd48b64
        frame #90: 0x0000000111467265
        frame #91: 0x0000000112209165
        frame #92: 0x000000010cd48b64
        frame #93: 0x000000010cd42625
        frame #94: 0x00000001122090c6
        frame #95: 0x000000010cd48b64
        frame #96: 0x0000000111467265
        frame #97: 0x0000000112209108
        frame #98: 0x000000010cd48b64
        frame #99: 0x0000000111467265
        frame #100: 0x00000001122090e7
        frame #101: 0x000000010cd48b64
        frame #102: 0x000000010cd42625
        frame #103: 0x00000001122090c6
        frame #104: 0x000000010cd48b64
        frame #105: 0x0000000111467265
        frame #106: 0x00000001122090e7
        frame #107: 0x000000010cd48b64
        frame #108: 0x0000000111467265
        frame #109: 0x0000000112209108
        frame #110: 0x000000010cd48b64
        frame #111: 0x0000000111467265
        frame #112: 0x0000000112209108
        frame #113: 0x000000010cd48b64
        frame #114: 0x000000010cd42ffe
        frame #115: 0x000000011220919c
        frame #116: 0x000000010cd48b64
        frame #117: 0x000000010cd428ed
        frame #118: 0x000000011220919c
        frame #119: 0x000000010cd48b64
        frame #120: 0x0000000111467265
        frame #121: 0x0000000112209108
        frame #122: 0x000000010cd48b64
        frame #123: 0x0000000111467265
        frame #124: 0x0000000112209165
        frame #125: 0x000000010cd48b64
        frame #126: 0x000000010cd42625
        frame #127: 0x00000001122090c6
        frame #128: 0x000000010cd48b64
        frame #129: 0x0000000111467265
        frame #130: 0x0000000112209108
        frame #131: 0x000000010cd48b64
        frame #132: 0x000000010cd42625
        frame #133: 0x00000001122090c6
        frame #134: 0x000000010cd48b64
        frame #135: 0x000000010cd42625
        frame #136: 0x00000001122090c6
        frame #137: 0x000000010cd48b64
        frame #138: 0x0000000111467265
        frame #139: 0x00000001122090e7
        frame #140: 0x000000010cd48b64
        frame #141: 0x0000000111467265
        frame #142: 0x0000000112209108
        frame #143: 0x000000010cd4665e
        frame #144: 0x0000000110bd4fff
        frame #145: 0x00000001118bb04b
        frame #146: 0x000000011220e33f
        frame #147: 0x00000001118b879d
        frame #148: 0x0000000110bdf116
        frame #149: 0x0000000110bd8f71
        frame #150: 0x0000000110bd848f
        frame #151: 0x0000000110bd5336
        frame #152: 0x00000001118bb04b
        frame #153: 0x00000001112cd2d0
        frame #154: 0x00000001112ca083
        frame #155: 0x00000001118ba92e
        frame #156: 0x00000001112c8e28
        frame #157: 0x00000001118ba92e
        frame #158: 0x000000011220e33f
        frame #159: 0x00000001118b879d
        frame #160: 0x0000000110bcbac0
        frame #161: 0x0000000110ee6174
        frame #162: 0x0000000110ee5a96
        frame #163: 0x0000000110ee599d
        frame #164: 0x0000000110ee5104
        frame #165: 0x0000000110ee4442
        frame #166: 0x00000001112c805e
        frame #167: 0x00000001112c7eb4
        frame #168: 0x000000010d123186
        frame #169: 0x000000010d122f0c
        frame #170: 0x000000010d122482
        frame #171: 0x0000000110ed6645
        frame #172: 0x000000010d107d09
        frame #173: 0x00000001112c7a65
        frame #174: 0x00000001032c166c
        frame #175: 0x00000001011016ff Flutter`dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&, dart::Array const&, unsigned long) + 975
        frame #176: 0x00000001011ad135 Flutter`dart::Library::Invoke(dart::String const&, dart::Array const&, dart::Array const&, bool, bool) const + 1029
        frame #177: 0x0000000101456868 Flutter`Dart_Invoke + 1592
        frame #178: 0x0000000100c7972a Flutter`flutter::Window::BeginFrame(fml::TimePoint) + 270
        frame #179: 0x0000000100c832ca Flutter`flutter::RuntimeController::BeginFrame(fml::TimePoint) + 30
        frame #180: 0x0000000100c8af83 Flutter`flutter::Engine::BeginFrame(fml::TimePoint) + 53
        frame #181: 0x0000000100c87d17 Flutter`flutter::Animator::BeginFrame(fml::TimePoint, fml::TimePoint) + 447
        frame #182: 0x0000000100c3f2dd Flutter`std::__1::function<void (fml::TimePoint, fml::TimePoint)>::operator()(fml::TimePoint, fml::TimePoint) const + 39
        frame #183: 0x0000000100ca2956 Flutter`std::__1::__function::__func<flutter::VsyncWaiter::FireCallback(fml::TimePoint, fml::TimePoint)::$_0, std::__1::allocator<flutter::VsyncWaiter::FireCallback(fml::TimePoint, fml::TimePoint)::$_0>, void ()>::operator()() + 108
        frame #184: 0x0000000100c503f1 Flutter`fml::MessageLoopImpl::FlushTasks(fml::FlushType) + 123
        frame #185: 0x0000000100c55742 Flutter`fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*) + 26
        frame #186: 0x00007fff23b0d994 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
        frame #187: 0x00007fff23b0d682 CoreFoundation`__CFRunLoopDoTimer + 1026
        frame #188: 0x00007fff23b0ccda CoreFoundation`__CFRunLoopDoTimers + 266
        frame #189: 0x00007fff23b07a4e CoreFoundation`__CFRunLoopRun + 2238
        frame #190: 0x00007fff23b06e66 CoreFoundation`CFRunLoopRunSpecific + 438
        frame #191: 0x0000000100c5586d Flutter`fml::MessageLoopDarwin::Run() + 65
        frame #192: 0x0000000100c50330 Flutter`fml::MessageLoopImpl::DoRun() + 22
        frame #193: 0x0000000100c54d98 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*) + 170
        frame #194: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #195: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #10, name = 'io.flutter.1.ui'
        frame #0: 0x00007fff51823166 libsystem_kernel.dylib`mach_msg_trap + 10
        frame #1: 0x00007fff518236cc libsystem_kernel.dylib`mach_msg + 60
        frame #2: 0x00007fff23b0caf5 CoreFoundation`__CFRunLoopServiceMachPort + 197
        frame #3: 0x00007fff23b07817 CoreFoundation`__CFRunLoopRun + 1671
        frame #4: 0x00007fff23b06e66 CoreFoundation`CFRunLoopRunSpecific + 438
        frame #5: 0x0000000100c5586d Flutter`fml::MessageLoopDarwin::Run() + 65
        frame #6: 0x0000000100c50330 Flutter`fml::MessageLoopImpl::DoRun() + 22
        frame #7: 0x0000000100c54d98 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*) + 170
        frame #8: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #9: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #11, name = 'io.flutter.1.gpu'
        frame #0: 0x00007fff51823166 libsystem_kernel.dylib`mach_msg_trap + 10
        frame #1: 0x00007fff518236cc libsystem_kernel.dylib`mach_msg + 60
        frame #2: 0x00007fff23b0caf5 CoreFoundation`__CFRunLoopServiceMachPort + 197
        frame #3: 0x00007fff23b07817 CoreFoundation`__CFRunLoopRun + 1671
        frame #4: 0x00007fff23b06e66 CoreFoundation`CFRunLoopRunSpecific + 438
        frame #5: 0x0000000100c5586d Flutter`fml::MessageLoopDarwin::Run() + 65
        frame #6: 0x0000000100c50330 Flutter`fml::MessageLoopImpl::DoRun() + 22
        frame #7: 0x0000000100c54d98 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*) + 170
        frame #8: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #9: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #12, name = 'io.flutter.1.io'
        frame #0: 0x00007fff51823166 libsystem_kernel.dylib`mach_msg_trap + 10
        frame #1: 0x00007fff518236cc libsystem_kernel.dylib`mach_msg + 60
        frame #2: 0x00007fff23b0caf5 CoreFoundation`__CFRunLoopServiceMachPort + 197
        frame #3: 0x00007fff23b07817 CoreFoundation`__CFRunLoopRun + 1671
        frame #4: 0x00007fff23b06e66 CoreFoundation`CFRunLoopRunSpecific + 438
        frame #5: 0x0000000100c5586d Flutter`fml::MessageLoopDarwin::Run() + 65
        frame #6: 0x0000000100c50330 Flutter`fml::MessageLoopImpl::DoRun() + 22
        frame #7: 0x0000000100c54d98 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*) + 170
        frame #8: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #9: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #13, name = 'io.flutter.worker.1'
        frame #0: 0x00007fff51826916 libsystem_kernel.dylib`__psynch_cvwait + 10
        frame #1: 0x00007fff518d5040 libsystem_pthread.dylib`_pthread_cond_wait + 701
        frame #2: 0x00007fff4f68beda libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
        frame #3: 0x0000000100c4d5bf Flutter`fml::ConcurrentMessageLoop::WorkerMain() + 183
        frame #4: 0x0000000100c4db87 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 164
        frame #5: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #6: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #14, name = 'io.flutter.worker.2'
        frame #0: 0x00007fff51826916 libsystem_kernel.dylib`__psynch_cvwait + 10
        frame #1: 0x00007fff518d5040 libsystem_pthread.dylib`_pthread_cond_wait + 701
        frame #2: 0x00007fff4f68beda libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
        frame #3: 0x0000000100c4d5bf Flutter`fml::ConcurrentMessageLoop::WorkerMain() + 183
        frame #4: 0x0000000100c4db87 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 164
        frame #5: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #6: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #15, name = 'io.flutter.worker.3'
        frame #0: 0x00007fff51826916 libsystem_kernel.dylib`__psynch_cvwait + 10
        frame #1: 0x00007fff518d5040 libsystem_pthread.dylib`_pthread_cond_wait + 701
        frame #2: 0x00007fff4f68beda libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
        frame #3: 0x0000000100c4d5bf Flutter`fml::ConcurrentMessageLoop::WorkerMain() + 183
        frame #4: 0x0000000100c4db87 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 164
        frame #5: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #6: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #16, name = 'io.flutter.worker.4'
        frame #0: 0x00007fff51826916 libsystem_kernel.dylib`__psynch_cvwait + 10
        frame #1: 0x00007fff518d5040 libsystem_pthread.dylib`_pthread_cond_wait + 701
        frame #2: 0x00007fff4f68beda libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
        frame #3: 0x0000000100c4d5bf Flutter`fml::ConcurrentMessageLoop::WorkerMain() + 183
        frame #4: 0x0000000100c4db87 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 164
        frame #5: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #6: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #17, name = 'io.flutter.worker.5'
        frame #0: 0x00007fff51826916 libsystem_kernel.dylib`__psynch_cvwait + 10
        frame #1: 0x00007fff518d5040 libsystem_pthread.dylib`_pthread_cond_wait + 701
        frame #2: 0x00007fff4f68beda libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
        frame #3: 0x0000000100c4d5bf Flutter`fml::ConcurrentMessageLoop::WorkerMain() + 183
        frame #4: 0x0000000100c4db87 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 164
        frame #5: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #6: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #18, name = 'io.flutter.worker.6'
        frame #0: 0x00007fff51826916 libsystem_kernel.dylib`__psynch_cvwait + 10
        frame #1: 0x00007fff518d5040 libsystem_pthread.dylib`_pthread_cond_wait + 701
        frame #2: 0x00007fff4f68beda libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
        frame #3: 0x0000000100c4d5bf Flutter`fml::ConcurrentMessageLoop::WorkerMain() + 183
        frame #4: 0x0000000100c4db87 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 164
        frame #5: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #6: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #19, name = 'io.flutter.worker.7'
        frame #0: 0x00007fff51826916 libsystem_kernel.dylib`__psynch_cvwait + 10
        frame #1: 0x00007fff518d5040 libsystem_pthread.dylib`_pthread_cond_wait + 701
        frame #2: 0x00007fff4f68beda libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
        frame #3: 0x0000000100c4d5bf Flutter`fml::ConcurrentMessageLoop::WorkerMain() + 183
        frame #4: 0x0000000100c4db87 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 164
        frame #5: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #6: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #20, name = 'io.flutter.worker.8'
        frame #0: 0x00007fff51826916 libsystem_kernel.dylib`__psynch_cvwait + 10
        frame #1: 0x00007fff518d5040 libsystem_pthread.dylib`_pthread_cond_wait + 701
        frame #2: 0x00007fff4f68beda libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
        frame #3: 0x0000000100c4d5bf Flutter`fml::ConcurrentMessageLoop::WorkerMain() + 183
        frame #4: 0x0000000100c4db87 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 164
        frame #5: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #6: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #21, name = 'dart:io EventHandler'
        frame #0: 0x00007fff5182998a libsystem_kernel.dylib`kevent + 10
        frame #1: 0x0000000100fe6068 Flutter`dart::bin::EventHandlerImplementation::EventHandlerEntry(unsigned long) + 264
        frame #2: 0x00000001010012ed Flutter`dart::bin::ThreadStart(void*) + 45
        frame #3: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #4: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #22, name = 'Dart ThreadPool Worker'
        frame #0: 0x00007fff51826916 libsystem_kernel.dylib`__psynch_cvwait + 10
        frame #1: 0x00007fff518d5040 libsystem_pthread.dylib`_pthread_cond_wait + 701
        frame #2: 0x00000001011f4a94 Flutter`dart::Monitor::Wait(long long) + 180
        frame #3: 0x00000001013e138a Flutter`dart::BackgroundCompiler::Run() + 1082
        frame #4: 0x000000010128246f Flutter`dart::ThreadPool::Worker::Loop() + 47
        frame #5: 0x0000000101282312 Flutter`dart::ThreadPool::Worker::Main(unsigned long) + 290
        frame #6: 0x00000001011f41ef Flutter`dart::ThreadStart(void*) + 79
        frame #7: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #8: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #25, name = 'io.flutter.2.gpu'
        frame #0: 0x00007fff51823166 libsystem_kernel.dylib`mach_msg_trap + 10
        frame #1: 0x00007fff518236cc libsystem_kernel.dylib`mach_msg + 60
        frame #2: 0x00007fff23b0caf5 CoreFoundation`__CFRunLoopServiceMachPort + 197
        frame #3: 0x00007fff23b07817 CoreFoundation`__CFRunLoopRun + 1671
        frame #4: 0x00007fff23b06e66 CoreFoundation`CFRunLoopRunSpecific + 438
        frame #5: 0x0000000100c5586d Flutter`fml::MessageLoopDarwin::Run() + 65
        frame #6: 0x0000000100c50330 Flutter`fml::MessageLoopImpl::DoRun() + 22
        frame #7: 0x0000000100c54d98 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*) + 170
        frame #8: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #9: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
      thread #26, name = 'io.flutter.2.io'
        frame #0: 0x00007fff51823166 libsystem_kernel.dylib`mach_msg_trap + 10
        frame #1: 0x00007fff518236cc libsystem_kernel.dylib`mach_msg + 60
        frame #2: 0x00007fff23b0caf5 CoreFoundation`__CFRunLoopServiceMachPort + 197
        frame #3: 0x00007fff23b07817 CoreFoundation`__CFRunLoopRun + 1671
        frame #4: 0x00007fff23b06e66 CoreFoundation`CFRunLoopRunSpecific + 438
        frame #5: 0x0000000100c5586d Flutter`fml::MessageLoopDarwin::Run() + 65
        frame #6: 0x0000000100c50330 Flutter`fml::MessageLoopImpl::DoRun() + 22
        frame #7: 0x0000000100c54d98 Flutter`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*) + 170
        frame #8: 0x00007fff518d4d36 libsystem_pthread.dylib`_pthread_start + 125
        frame #9: 0x00007fff518d158f libsystem_pthread.dylib`thread_start + 15
    

    flutter doctor

    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel v1.9.1-hotfixes, v1.9.1+hotfix.6-pre.1, on Mac OS X 10.15.1
        19B88, locale zh-Hans-CN)
     
    [!] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
        ! Some Android licenses not accepted.  To resolve this, run: flutter doctor
          --android-licenses
    [✓] Xcode - develop for iOS and macOS (Xcode 11.1)
    [✓] Android Studio (version 3.5)
    [✓] VS Code (version 1.40.1)
    [✓] Connected device (1 available)
    
    ! Doctor found issues in 1 category.
    
    iOS 
    opened by Kila2 24
  • 安卓端flutter页面返回时会偶现屏幕闪黑的问题

    安卓端flutter页面返回时会偶现屏幕闪黑的问题

    无论是我们的代码还是flutterboost自带的demo都可以稳定复现这个问题,概率不稳定 20%~50%左右吧,现象是flutter页面点击返回键后屏幕会瞬间黑一下然后再恢复回来,然后滑出页面,感觉像是flutterview先被移除掉了,然后才把封面加上来,有一个视觉差,希望可以帮忙修复一下这个问题,看闲鱼app就没有这个问题

    opened by yanjichaoo 22
  • Wanted: who's using flutter_boost/您在使用boost吗?

    Wanted: who's using flutter_boost/您在使用boost吗?

    First of all, thanks sincerely for constantly using and supporting FlutterBoost. We will try our best to keep FlutterBoost better, and keep growing FlutterBoost community. To attract more people to use and contribute to FlutterBoost, please comment in this issue to include the following information:

    Your app name Your city and country. You can refer to the following sample answer for the format:

    app: xianyu Location: Hangzhou, China

    首先诚挚地感谢每一位持续关注并使用 flutter_boost 的朋友。我们会持续投入,力图把 boost 变得更好。为了更好的聆听社区的声音,吸引更多的人使用和参与,我们期待您在此提交一条评论, 评论内容包括:

    app名字 您所在的城市、国家

    再次感谢你的参与!!

    opened by noborder 19
  • 在FLBFlutterViewContainer内调用Navigator.push方法,第一个页面push到第二个页面动画有问题。

    在FLBFlutterViewContainer内调用Navigator.push方法,第一个页面push到第二个页面动画有问题。

    import 'package:flutter/material.dart';
    import 'package:flutter_boost/flutter_boost.dart';
    
    void main(){
      print("flutter main");
      runApp(MyApp());
    }
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      @override
      void initState() {
        super.initState();
    
        ///register page widget builders,the key is pageName
        FlutterBoost.singleton.registerPageBuilders({
          'pageone': (pageName, params, _) => FirstRouteWidget(),
        });
    
      }
    
      @override
      Widget build(BuildContext context) => MaterialApp(
          title: 'Flutter Boost example',
          builder: FlutterBoost.init(), ///init container manager
          home: Container());
    }
    
    //第一个页面
    class FirstRouteWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("pageone"),
          ),
          body: Center(
            child: GestureDetector(
              onTap: (){
                //跳转到第二个flutter页面
                Navigator.push(context, MaterialPageRoute(builder: (context) => SecondRouteWidget()));
              },
              child: Text("push next"),
            ),
          ),
        );
      }
    }
    
    class SecondRouteWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("page two"),
          ),
          body: Center(
            child: GestureDetector(
              onTap: (){
                Navigator.push(context, MaterialPageRoute(builder: (context) => ThirdRouteWidget()));
              },
              child: Text("push next"),
            ),
          ),
        );
      }
    }
    
    class ThirdRouteWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("page three"),
          ),
          body: Center(
            child: GestureDetector(
              onTap: (){
                Navigator.push(context, MaterialPageRoute(builder: (context) => ForthRouteWidget()));
              },
              child: Text("push next"),
            ),
          ),
        );
      }
    }
    
    class ForthRouteWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("page four"),
          ),
          body: Center(
            child: GestureDetector(
              onTap: (){
                // Navigator.push(context, MaterialPageRoute(builder: (context) => enterPage));
              },
              child: Text("push next"),
            ),
          ),
        );
      }
    }
    
    

    A push B正常动画是A页面有一个向左移动的动画,但是从gif看pageone -> pagetwo没有这个动画。

    opened by liugang1104 19
  • iOS跳flutter页面,第一次没问题,第二次出现灰色页面,flutter_boost3.0

    iOS跳flutter页面,第一次没问题,第二次出现灰色页面,flutter_boost3.0

    第一次跳进flutter页面没问题,第二次就出现灰色的页面了,并且报了一下错误 [6542:1878261] [VERBOSE-2:ui_dart_state.cc(171)] Unhandled Exception: NoSuchMethodError: The getter 'settings' was called on null. Receiver: null Tried calling: settings #0 ListIterator.moveNext (dart:_internal/iterable.dart:896) #1 NavigatorState._updatePages (package:flutter/src/widgets/navigator.dart:896) #2 NavigatorState.didUpdateWidget (package:flutter/src/widgets/navigator.dart:2869) #3 StatefulElement.update (package:flutter/src/widgets/framework.dart:4758) #4 Element.updateChild (package:flutter/src/widgets/framework.dart:3257) #5 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3502) #6 Element.updateChild (package:flutter/src/widgets/framework.dart:3270) #7 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4595) #8 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4743) #9 Element.rebuild (package:flutter/src/widgets/framework.dart:4286) #10 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4549) #11 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4734) #12 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4544) #13 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3512) #14 Element.updateChild (package:flutter/src/widgets/framework.dart:3270) #15 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4595) #16 Element.rebuild (package:flutter/src/widgets/framework.dart:4286) #17 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4549) #18 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4544) #19 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3512) #20 Element.updateChild (package:flutter/src/widgets/framework.dart:3270) #21 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4595) #22 Element.rebuild (package:flutter/src/widgets/framework.dart:4286) #23 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4549) #24 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4544) #25 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3512) #26 Element.updateChild (package:flutter/src/widgets/framework.dart:3270) #27 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4595) #28 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4743) #29 Element.rebuild (package:flutter/src/widgets/framework.dart:4286) #30 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4549) #31 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4734) #32 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4544) #33 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3512) #34 Element.updateChild (package:flutter/src/widgets/framework.dart:3270) #35 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5648) #36 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6189) #37 Element.updateChild (package:flutter/src/widgets/framework.dart:3257) #38 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4595) #39 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4743) #40 Element.rebuild (package:flutter/src/widgets/framework.dart:4286) #41 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2673) #42 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:913) #43 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302) #44 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117) #45 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055) #46 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971) #47 _rootRun (dart:async/zone.dart:1190) #48 _CustomZone.run (dart:async/zone.dart:1093) #49 _CustomZone.runGuarded (dart:async/zone.dart:997) #50 _invoke (dart:ui/hooks.dart:251) #51 _drawFrame (dart:ui/hooks.dart:209) [6542:1878261] [VERBOSE-2:ui_dart_state.cc(171)] Unhandled Exception: NoSuchMethodError: The getter 'overlayEntries' was called on null. Receiver: null Tried calling: overlayEntries #0 NavigatorState._allRouteOverlayEntries. (package:flutter/src/widgets/navigator.dart:2912) #1 _SyncIterator.moveNext (dart:core-patch/core_patch.dart:165) #2 new List.from (dart:core-patch/array_patch.dart:50) #3 new List.of (dart:core-patch/array_patch.dart:68) #4 Iterable.toList (dart:core/iterable.dart:404) #5 NavigatorState.build (package:flutter/src/widgets/navigator.dart:4097) #6 StatefulElement.build (package:flutter/src/widgets/framework.dart:4687) #7 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4570) #8 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4743) #9 Element.rebuild (package:flutter/src/widgets/framework.dart:4286) #10 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2673) #11 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:913) #12 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302) #13 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117) #14 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055) #15 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971) #16 _rootRun (dart:async/zone.dart:1190) #17 _CustomZone.run (dart:async/zone.dart:1093) #18 _CustomZone.runGuarded (dart:async/zone.dart:997) #19 _invoke (dart:ui/hooks.dart:251) #20 _drawFrame (dart:ui/hooks.dart:209)

    Boost3.0 
    opened by Tubhael 18
  • Flutter boost 3.0 在安卓6.0机型上的黑屏问题

    Flutter boost 3.0 在安卓6.0机型上的黑屏问题

    Flutter boost 分支: v3.0-preview11 安卓手机版本: android 6.0 复现demo: 用 flutter_boost 官方demo 即可复现,需要安卓 6.0 系统; 复现操作: 安卓 6.0 系统运行 flutter_boost demo, 进入 flutter 页面,点击手机任务管理器,再返回当前应用会黑屏

    demo:

    https://user-images.githubusercontent.com/15603319/133883068-63bd4f83-9efb-4890-922a-3586ff35a894.mp4

    问题原因: 黑屏的原因是 FlutterBoostActivity 写死了使用 RenderMode.texture . 而点击任务管理器后,在安卓 6.0 上, 当前textureView 会回调 onSurfaceTextureDestroyed 从而使 flutterRender 也销毁了 flutter 页面。

    重新在进入页面时,会重新走一次 flutterRender 的渲染过程. 在第一帧未绘制完成之前出现了黑屏现象。

    /// FlutterBoostActivity#getRenderMode
    @Override
        public RenderMode getRenderMode() {
            // Default to |FlutterTextureView|.
            return RenderMode.texture;
        }
    
    /// FlutterTextureView#onSurfaceTextureDestroyed
    public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surface) {
              Log.v(TAG, "SurfaceTextureListener.onSurfaceTextureDestroyed()");
              isSurfaceAvailableForRendering = false;
    
              // 安卓6.0 系统会销毁当前的texture
              if (isAttachedToFlutterRenderer) {
                disconnectSurfaceFromRenderer();
              }
    
              // Return true to indicate that no further painting will take place
              // within this SurfaceTexture.
              return true;
            }
    

    我尝试修改了getRenderMode方法为 super 的实现, 但是又会引入页面跳转和退出情况下的其他问题,不好解决。

    我仔细查看了 flutter_boost 之前的版本,过去的版本在默认情况下会使用到的是 RenderMode.surface , 不确定 flutter_boost 官方为什么这个默认了 RenderMode.texture, 问题感觉比较大,希望能尽早修复.

    Android Not a problem with boost 
    opened by dengzq 16
  • [iOS]在单VC下,会根据内部page的个数动态设置是否允许原生容器侧滑退出

    [iOS]在单VC下,会根据内部page的个数动态设置是否允许原生容器侧滑退出

    在单VC情况下,之前的容器内跳转flutter页面,侧滑退出手势将会将整个容器退出,这样的表现不太符合用户预期 于是做了一下容器数量的监听:

    • 当容器内部的 page数量 > 1的时候,将禁止native侧的侧滑手势,此时flutter内部的侧滑手势将会响应
    • 当容器内部的page数量 == 1的时候,将允许原生的侧的侧滑,由原生的容器(ViewController)对侧滑进行接管
    opened by luckysmg 16
  • Flutter项目集成FlutterBoost

    Flutter项目集成FlutterBoost

    boost

    版本: ref: 'v3.0-beta.6'

    Flutter项目集成FlutterBosst v3.0-beta.6

    1. MainActivity为以下代码时:

    public class MainActivity extends FlutterActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }

    启动项目,默认正常显示'/'Flutter页面,但是跳转原生页面时报错 Unhandled Exception: PlatformException(RuntimeException, java.lang.RuntimeException: FlutterBoostPlugin might *NOT* set delegate!, null, null)

    1. 修改MainActivity代码为下边内容时: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("MainActivity","MainActivityMainActivity"); FlutterBoost.instance().open("/",new HashMap<>()); } }

    会先显示个短暂的黑屏,然后才会跳转到Flutter首页,然后就可以正常跳转回原生页面。

    1. 想要的效果: 因为本身是Flutter项目,项目首页肯定是Flutter页面最好,

    目前FlutterBoost版本可以实现默认启动Flutter页面,但是后续的跳转会出现上边1的异常PlatformException。请问这个异常怎么处理?

    Boost3.0 demo code has provided crowded waiting for customer response 
    opened by wzy885588 16
  • 无法获取返回的参数

    无法获取返回的参数

    调用代码

    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))正常运行。

    Boost3.0 
    opened by yownyang 16
  • The implementation of 'schedulingStrategy' in the non-abstract class 'CustomFlutterBinding' does not conform to its interface

    The implementation of 'schedulingStrategy' in the non-abstract class 'CustomFlutterBinding' does not conform to its interface

    Error: The implementation of 'schedulingStrategy' in the non-abstract class 'CustomFlutterBinding' does not conform to its interface. class CustomFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding

    opened by icemioi 14
  • iOS 使用PlatformView的A页面跳转到Flutter B页面,返回到A页面后PlatformView会变空白然后再显示

    iOS 使用PlatformView的A页面跳转到Flutter B页面,返回到A页面后PlatformView会变空白然后再显示

      InkWell(
        child: Container(
          height: 100,
          width: 375,
          child: NativeView('<simple-text-view>', true),
        ),
      ),
      InkWell(
        child: Container(
            padding: const EdgeInsets.all(8.0),
            margin: const EdgeInsets.all(8.0),
            color: Colors.yellow,
            child: const Text(
              'flutter rebuild demo',
              style: TextStyle(fontSize: 22.0, color: Colors.black),
            )),
        onTap: () {
          BoostNavigator.instance
              .push('flutterRebuildDemo', withContainer: withContainer);
        },
      )
    

    官方Demo在flutter rebuild demo按钮上面加一个NativeView,点击flutter rebuild demo按钮后再返回到该页面,NativeView会变空白,然后再显示。

    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel stable, 3.3.2, on macOS 12.6 21G115 darwin-x64, locale zh-Hans-CN)
    [!] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
        ✗ cmdline-tools component is missing
          Run `path/to/sdkmanager --install "cmdline-tools;latest"`
          See https://developer.android.com/studio/command-line for more details.
        ✗ Android license status unknown.
          Run `flutter doctor --android-licenses` to accept the SDK licenses.
          See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
    [!] Xcode - develop for iOS and macOS (Xcode 14.0.1)
        ! CocoaPods 1.10.1 out of date (1.11.0 is recommended).
            CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
            Without CocoaPods, plugins will not work on iOS or macOS.
            For more info, see https://flutter.dev/platform-plugins
          To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.
    [✓] Chrome - develop for the web
    [✓] Android Studio (version 4.1)
    [✓] VS Code (version 1.74.1)
    [✓] Connected device (3 available)
    [✓] HTTP Host Availability
    
    ! Doctor found issues in 2 categories.
    
    opened by zhanfengkuang 1
  • 外发版本偶现异常

    外发版本偶现异常

    Non-fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: Null check operator used on a null value. Error thrown null. #00 pc 0x66339f com.a.tv (BoostChannel.sendEventToNative [boost_channel.dart:45]) #01 pc 0x663307 com.a.tv (BoostChannel.enablePopGesture [boost_channel.dart:51]) #02 pc 0xb87573 com.a.tv (BoostLifecycleBinding.containerDidShow [boost_lifecycle_binding.dart:103]) #03 pc 0xb874a7 com.a.tv (FlutterBoostAppState.onContainerShow [flutter_boost_app.dart:623]) #04 pc 0xb8741f com.a.tv (BoostFlutterRouterApi.onContainerShow. [boost_flutter_router_api.dart:74]) #05 pc 0xb86987 com.a.tv (BoostFlutterRouterApi._addInOperationQueueOrExcute [boost_flutter_router_api.dart:95]) #06 pc 0xb873c3 com.a.tv (BoostFlutterRouterApi.onContainerShow [boost_flutter_router_api.dart:73]) #07 pc 0x11a6b43 com.a.tv (FlutterRouterApi.setup. [messages.dart:468]) #08 pc 0x110b09f com.a.tv (BasicMessageChannel.setMessageHandler. [platform_channel.dart:197]) #09 pc 0x107b99f com.a.tv (_DefaultBinaryMessenger.setMessageHandler. [binding.dart:387]) #10 pc 0x4c0dc3 com.a.tv (_invoke2 [hooks.dart:186]) #11 pc 0x4c0cc3 com.a.tv (_ChannelCallbackRecord.invoke [channel_buffers.dart:42]) #12 pc 0x4c0747 com.a.tv (_Channel.push [channel_buffers.dart:132]) #13 pc 0x4c062f com.a.tv (ChannelBuffers.push [channel_buffers.dart:329]) #14 pc 0x1074353 com.a.tv (PlatformDispatcher._dispatchPlatformMessage [platform_dispatcher.dart:599]) #15 pc 0x4c0573 com.a.tv (_dispatchPlatformMessage [hooks.dart:89]) #16 pc 0x4c376b com.a.tv (_dispatchPlatformMessage [hooks.dart:87])

    image

    flutter boost : 4.1.1

    Flutter 3.3.7 • channel stable • https://github.com/flutter/flutter.git Framework • revision e99c9c7cd9 (6 周前) • 2022-11-01 16:59:00 -0700 Engine • revision 857bd6b74c Tools • Dart 2.18.4 • DevTools 2.15.0

    opened by hello-soon 0
  • iOS 添加Notification Service Extension 后运行崩溃

    iOS 添加Notification Service Extension 后运行崩溃

    截屏2022-12-05 17 35 01

    在application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary )launchOptions里把 MyFlutterBoostDelegate delegate= [[MyFlutterBoostDelegate alloc ] init]; [[FlutterBoost instance] setup:application delegate:delegate callback:^(FlutterEngine *engine) {

    }];
    

    注释了就不会崩溃

    opened by dongzhenggang123 0
  • 4.2.0版本   removeListener = BoostChannel.instance.addEventListener(

    4.2.0版本 removeListener = BoostChannel.instance.addEventListener("yourEventKey", (key, arguments) { ///deal with your event here return; });

    4.2.0版本 按照文档接入,在flutter接收事件的方法,报错: removeListener = BoostChannel.instance.addEventListener("yourEventKey", (key, arguments) { ///deal with your event here

      return;
    });
    

    这个方法报错,烦请完善开发文档

    opened by LiFuPeng 0
  • Flutter 嵌入WebView后 调转到含有FlutterBoostFragment原生界面崩溃

    Flutter 嵌入WebView后 调转到含有FlutterBoostFragment原生界面崩溃

    flutter_boost: git: url: 'https://github.com/alibaba/flutter_boost.git' ref: '4.1.1' webview_flutter: ^3.0.4 步骤 1.BoostNavigator.instance.push( "xxPage", ); 2. 原生界面val fragment1 = FlutterBoostFragment.CachedEngineFragmentBuilder().urlParams(map as Map<String, Any>?).url("brandExhibitionHallPage").build() 3.E/AndroidRuntime: FATAL EXCEPTION: main Process: com.vedeng.android.pre, PID: 30986 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vedeng.android.pre/com.vedeng.android.ui.brand_center.BrandRoomActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3318) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3429) at android.app.ActivityThread.-wrap12(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009) at android.os.Handler.dispatchMessage(Handler.java:109) at android.os.Looper.loop(Looper.java:166) at android.app.ActivityThread.main(ActivityThread.java:7555) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963) Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.view.ViewGroup.addViewInner(ViewGroup.java:4973) at android.view.ViewGroup.addView(ViewGroup.java:4804) at android.view.ViewGroup.addView(ViewGroup.java:4744) at android.view.ViewGroup.addView(ViewGroup.java:4717) at io.flutter.plugin.platform.PlatformViewsController.attachToView(PlatformViewsController.java:747) at io.flutter.embedding.android.FlutterView.attachToFlutterEngine(FlutterView.java:1215) at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onCreateView(FlutterActivityAndFragmentDelegate.java:337) at io.flutter.embedding.android.FlutterFragment.onCreateView(FlutterFragment.java:806) at com.idlefish.flutterboost.containers.FlutterBoostFragment.onCreateView(FlutterBoostFragment.java:93) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3138) at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3072) at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:251) at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:502) at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1340) at android.app.Activity.performStart(Activity.java:7364) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3281) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3429)  at android.app.ActivityThread.-wrap12(Unknown Source:0)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009)  at android.os.Handler.dispatchMessage(Handler.java:109)  at android.os.Looper.loop(Looper.java:166)  at android.app.ActivityThread.main(ActivityThread.java:7555)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) 

    opened by wubao100 1
Releases(4.2.0)
  • 4.2.0(Nov 7, 2022)

    What's Changed

    • [Android] Fixes HybridCompositon does not work by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1743
    • Add pigeon commands to script file. by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1744
    • [ios] Use a screen edge pan gesture to go back to the previous page of a non-container page. by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1751

    Full Changelog: https://github.com/alibaba/flutter_boost/compare/4.1.1...4.2.0

    Source code(tar.gz)
    Source code(zip)
  • 4.1.1(Oct 13, 2022)

    What's Changed

    • release 4.1.0 by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1728
    • [Android] 修复FlutterFragment可能会盖住NativeFragment的Bug by @joechan-cq in https://github.com/alibaba/flutter_boost/pull/1736
    • 更新许可证链接 by @TJRoger in https://github.com/alibaba/flutter_boost/pull/1731
    • Release 4.1.1 by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1739

    New Contributors

    • @TJRoger made their first contribution in https://github.com/alibaba/flutter_boost/pull/1731

    Full Changelog: https://github.com/alibaba/flutter_boost/compare/4.1.0...4.1.1

    Source code(tar.gz)
    Source code(zip)
  • 4.1.0(Oct 9, 2022)

    What's Changed

    • [Android]fix popUntil not working by @joechan-cq in https://github.com/alibaba/flutter_boost/pull/1718
    • Add demo for afterimage test by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1723
    • [Android] 与纯Flutter应用生命周期行为保持一致:应用切换到后台时,暂停帧调度,解决动画残影的问题 by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1724
    • feat(flutter):对子类开放didFragmentShow和didFragmentHide by @JunhuaLin in https://github.com/alibaba/flutter_boost/pull/1726

    New Contributors

    • @joechan-cq made their first contribution in https://github.com/alibaba/flutter_boost/pull/1718

    Full Changelog: https://github.com/alibaba/flutter_boost/compare/4.0.4...4.1.0

    Source code(tar.gz)
    Source code(zip)
  • 4.0.4(Aug 30, 2022)

    What's Changed

    • 修复 onPostPush 和 onPostPush 类型强转失败 by @zmtzawqlp in https://github.com/alibaba/flutter_boost/pull/1707
    • [Android] 提前暴露混淆导致的异常,并给出明确指引 by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1708

    New Contributors

    • @zmtzawqlp made their first contribution in https://github.com/alibaba/flutter_boost/pull/1707

    Full Changelog: https://github.com/alibaba/flutter_boost/compare/4.0.3...4.0.4

    Source code(tar.gz)
    Source code(zip)
  • 4.0.2(Aug 22, 2022)

    What's Changed

    • 增加dual_screen测试案例 by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1701
    • [Android]恢复detachFromFlutterEngine重载逻辑,解决空指针崩溃问题 by @0xZOne in https://github.com/alibaba/flutter_boost/pull/1702

    Full Changelog: https://github.com/alibaba/flutter_boost/compare/4.0.1...4.0.2

    Source code(tar.gz)
    Source code(zip)
  • 4.0.0(Aug 12, 2022)

  • 0.1.61(Nov 18, 2019)

  • 0.1.60(Nov 18, 2019)

    Change the content android:

    1. based on the v1.9.1+hotfixes branch of flutter
    2. Solve major bugs, such as page parameter passing
    3. Support platformview
    4. Support androidx branch :feature/flutter_1.9_androidx_upgrade
    5. Resolve memory leaks
    6. Rewrite part of the code
    7. API changes
    8. Improved demo and added many demo cases

    ios:

    1. based on the v1.9.1+hotfixes branch of flutter 2.bugfixed
    Source code(tar.gz)
    Source code(zip)
  • 0.1.50(Sep 2, 2019)

    0.1.5

    The main changes are as following:

    1. The new version do the page jump (URL route) based on the inherited FlutterViewController or Activity. The jump procedure will create new instance of FlutterView, while the old version just reuse the underlying FlutterView
    2. Avoiding holding and reusing the FlutterView, there is no screenshot and complex attach&detach logical any more. As a result, memory is saved and black or white-screen issue occured in old version all are solved.
    3. This version also solved the app life cycle observation issue, we recommend you to use ContainerLifeCycle observer to listen the app enter background or foreground notification instead of WidgetBinding.
    4. We did some code refactoring, the main logic became more straightforward.

    API changes

    From the point of API changes, we did some refactoring as following:

    iOS API changes

    1. FlutterBoostPlugin's startFlutterWithPlatform function change its parameter from FlutterViewController to Engine

    Before change

    FlutterBoostPlugin
    - (void)startFlutterWithPlatform:(id<FLBPlatform>)platform onStart:(void (^)(FlutterViewController *))callback;
    

    After change

    FlutterBoostPlugin2
    - (void)startFlutterWithPlatform:(id<FLB2Platform>)platform
                             onStart:(void (^)(id<FlutterBinaryMessenger,
                                               FlutterTextureRegistry,
                                               FlutterPluginRegistry> engine))callback;
    
    
    1. FLBPlatform protocol removed flutterCanPop、accessibilityEnable and added entryForDart Before change:
    @protocol FLBPlatform <NSObject>
    @optional
    //Whether to enable accessibility support. Default value is Yes.
    - (BOOL)accessibilityEnable;
    // flutter模块是否还可以pop
    - (void)flutterCanPop:(BOOL)canpop;
    @required
    - (void)openPage:(NSString *)name
              params:(NSDictionary *)params
            animated:(BOOL)animated
          completion:(void (^)(BOOL finished))completion;
    - (void)closePage:(NSString *)uid
             animated:(BOOL)animated
               params:(NSDictionary *)params
           completion:(void (^)(BOOL finished))completion;
    @end
    

    After change:

    @protocol FLB2Platform <NSObject>
    @optional
    - (NSString *)entryForDart;
        
    @required
    - (void)open:(NSString *)url
       urlParams:(NSDictionary *)urlParams
            exts:(NSDictionary *)exts
          completion:(void (^)(BOOL finished))completion;
    - (void)close:(NSString *)uid
           result:(NSDictionary *)result
             exts:(NSDictionary *)exts
       completion:(void (^)(BOOL finished))completion;
    @end
    

    Android API changes

    Android mainly changed the IPlatform interface and its implementation. It removed following APIs:

    Activity getMainActivity();
    boolean startActivity(Context context,String url,int requestCode);
    Map getSettings();
    

    And added following APIs:

    void registerPlugins(PluginRegistry registry) 方法
    void openContainer(Context context,String url,Map<String,Object> urlParams,int requestCode,Map<String,Object> exts);
    void closeContainer(IContainerRecord record, Map<String,Object> result, Map<String,Object> exts);
    IFlutterEngineProvider engineProvider();
    int whenEngineStart();
    
    Source code(tar.gz)
    Source code(zip)
  • 0.0.411(Apr 25, 2019)

  • 0.0.401(Mar 13, 2019)

Owner
Alibaba
Alibaba Open Source
Alibaba
Integration test - Copy of the official Flutter integration test plugin

integration_test This package enables self-driving testing of Flutter code on de

null 0 Jan 5, 2022
Hack&Heal hybrid hackathon 2022 - Body & Mind topic

Meditation App Hack&Heal hybrid hackathon 2022 - Body & Mind topic The MVP is available for mobile browsers here. The Problem 3.6 million citizens hav

Lorenzo Fiorini 4 Jun 19, 2022
Call Kit is a prebuilt feature-rich call component, which enables you to build one-on-one and group voice/video calls into your app with only a few lines of code.

Call Kit (ZegoUIKitPrebuiltCall) Call Kit is a prebuilt feature-rich call component, which enables you to build one-on-one and group voice/video calls

ZEGOCLOUD 9 Dec 26, 2022
Flutter-fb-integration - Flutter And firebase integration Guide

Quickstart Guide This project still use my firebase server config, if you want t

Naufal Aldy Pradana 0 Feb 2, 2022
FLutter Api Integration - Flutter Rest API Integration

Flutter_Rest_Api_integration Flutter_Rest_Api_integration. Preview How To Use To

Rahul Ranjan Singh 0 Feb 17, 2022
Getx and Dio APi-Integration - Flutter RestApi Integration using Dio

Flutter RestApi Integration using Dio. Click this image to find videos==> //Crud

Fsd Ramjan 9 Nov 5, 2022
Flet enables developers to easily build realtime web, mobile and desktop apps in Python. No frontend experience required.

Flet Flet is a framework that enables you to easily build realtime web, mobile and desktop apps in your favorite language and securely share them with

Flet 3.6k Jan 9, 2023
Flet enables developers to easily build realtime web, mobile and desktop apps in Ruby. No frontend experience required

Flet If bundler is not being used to manage dependencies, install the gem by executing: $ gem install flet Flet Flet is a framework that enables you

AdamMusa 29 Jan 3, 2023
A wrapper for a Flutter ScrollView which enables lazy loading

Lazy load scrollview A wrapper for a ScrollView that will enable lazy loading Usage Add lazy_load_scrollview dependency to your pubspec.yaml: dependen

Quirijn Groot Bluemink 104 Nov 7, 2022
dna, dart native access. A lightweight dart to native super channel plugin

dna, dart native access. A lightweight dart to native super channel plugin, You can use it to invoke any native code directly in contextual and chained dart code.

Assuner 14 Jul 11, 2022
Trying out Flutter for desktop Web app development as an alternative to SPA frameworks (such as React and Angular) by recreating one of the pages of an existing CV Management web app

HTML Renderer Demo CanvasKit Renderer Demo Reddit discussion This repo contains a PoC of using Flutter as a traditional SPA framework for creating a d

Maxim Saplin 20 Oct 11, 2022
flutter_thrio makes it easy and fast to add flutter to existing mobile applications, and provide a simple and consistent navigator APIs.

中文文档 英文文档 问题集 原仓库不再维护,代码已经很老了 最近版本更新会很快,主要是增加新特性,涉及到混合栈的稳定性的问题应该不多,可放心升级,发现问题加 QQ 群号码:1014085473,我会尽快解决。 不打算好好看看源码的使用者可以放弃这个库了,因为很多设定是比较死的,而我本人不打算花时间写

null 290 Dec 29, 2022
flutter_thrio makes it easy and fast to add flutter to existing mobile applications, and provide a simple and consistent navigator APIs.

本仓库不再维护,可移步新仓库 https://github.com/flutter-thrio/flutter_thrio 中文文档 问题集 QQ 群号码:1014085473 The Navigator for iOS, Android, Flutter. Version 0.2.2 requir

Hellobike 732 Dec 5, 2022
Tencent Cloud Chat: Samples of integratation Flutter SDK to an existing app.

Tencent Cloud Chat Integrate In-App Chat and Call to your existing applications. Samples of integration Flutter SDK to an existing app. This directory

Tencent Cloud 4 Nov 24, 2022
A modified version of the existing checkbox with the shape of a circle instead of a rounded rectangle!

A modified version of the existing checkbox with the shape of a circle instead of a rounded rectangle!

Mash Ibtesum 53 Oct 24, 2022
This project is a rebuild of the existing movie colony https://github.com/debbsefe/Movie-Colony. Here's also a link to the figma file https://www.figma.com/file/XpLFNEsROiN1z6lwnNHMrU/Movie-app?node-id=2956%3A10161

Tvfiy Generated by the Very Good CLI ?? A Very Good Project created by Very Good CLI. Getting Started ?? This project contains 3 flavors: development

Eferha Mamus 3 Nov 12, 2022
how to Integrating facebook audience network to flutter app for banner, interstitial, rewarded, native and native banner

fb_ads_flutter_12 A new Flutter project. Getting Started Watch the complite tutorial for integrating Facebook ads into the Flutter app in our Youtube

null 4 Nov 26, 2022
Flutter native ads - Show AdMob Native Ads use PlatformView

flutter_native_ads Flutter plugin for AdMob Native Ads. Compatible with Android and iOS using PlatformView. Android iOS Getting Started Android Androi

sakebook 64 Dec 20, 2022
react-native native module for In App Purchase.

Documentation Published in website. Announcement Version 8.0.0 is currently in release candidate. The module is completely rewritten with Kotlin and S

dooboolab 2.3k Dec 31, 2022