Giter Site home page Giter Site logo

d_stack's Introduction

前言

img

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。

DStack是为了解决在使用Flutter进行混合开发时,不同类型的页面之间互相跳转时的统一管理和处理。

2020年5月,我们对DStack进行整理、封装和推广。

2020年8月,集团内部开源,9月,外部开源,以此共建交流。

开源并不是我们的终点,我们希望能有更多小伙伴和我们共建DStack,我们一起为Flutter社区做更多的贡献。

DStack详细文档

中文文档

设计方向

DStack是基于节点进行管理的,使用简单,易于集成,性能优秀的混合开发框架。

  • 节点管理:不同类型页面抽象成节点这种数据结构,便于后期的扩展
  • 引擎复用:利用Flutter引擎复用机制,框架内存性能优秀
  • 简单实用:追求集成和使用简单,对原有工程改动小
  • 持续积累:紧跟Flutter团队每次版本升级,解决新问题,尝试新思路,不断优化
  • 开源心态:开放公开,接受任何源码的贡献,但有比较严格的代码审核

功能简介

  • 混合页面之间随意跳转

  • 混合页面一致的生命周期管理

  • 页面间数据传递,回传等

  • iOS侧滑返回和android返回键返回

  • 提供一致的页面路由方案

发行版本介绍

DStack目前有一个版本

  • master分支为tag1.3.1+2 稳定版本

以下为1.3.1+2 版本安装

1.引入

在 pubspec.yaml 文件中添加依赖:

dependencies:
  d_stack: ^1.3.1+2      

2.安装

命令行下执行:

flutter pub get

软件作者贡献列表

@xiaoyuyouer @whqfor @caven775

(其他贡献者、请详见文档鸣谢)

合作伙伴

xes1v1.jpeg

联系我们

issue: https://github.com/tal-tech/d_stack/issues

d_stack's People

Contributors

duyuanye avatar whqfor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

d_stack's Issues

移除混合栈中节点

如何在原生端移除当前节点列表中的flutter节点

   func goLogin() {
    let nodeList = DNodeManager.sharedInstance().currentNodeList
    
    let currentNode = DNodeManager.sharedInstance().currentNode
    
    let vc = THDFlutterViewController.init()
    let nav = THNavController.init(rootViewController: vc)
    vc.navigationController?.isNavigationBarHidden = true
    self.window?.rootViewController = nav
}

func goHome(){
    
    let nodeList = DNodeManager.sharedInstance().currentNodeList
    let currentNode = DNodeManager.sharedInstance().currentNode


    if THUserInfoManager.userType() == .AppTypeAudit{
        let nav = THNavController.init(rootViewController: THAuditHomeController.init())
        self.window?.rootViewController = nav
        return
    }
    var vc:UITabBarController?
    if THUserInfoManager.userType() == .AppTypeResident {
        vc = THBenefitTabBarController.init()
    }else if THUserInfoManager.userType() == .AppTypeAssess {
        vc = THAssessTabBarController.init()
    }else{
        vc = THNurseTabBarController.init()
    }
    self.window?.rootViewController = vc
}

跑example报错!!!

Launching lib/main.dart on ELE AL00 in debug mode...
Running Gradle task 'assembleDebug'...
/Users/a/Documents/curwork/demo/d_stack/android/src/main/kotlin/io/flutter/embedding/android/DFlutterPageDelegate.java:66: 错误: 找不到符号
/* package */ class DFlutterPageDelegate implements ExclusiveAppComponent<Activity> {
                                                    ^
  符号: 类 ExclusiveAppComponent
/Users/a/Documents/curwork/demo/d_stack/android/src/main/kotlin/io/flutter/embedding/android/DFlutterPageDelegate.java:763: 错误: 找不到符号
            PlatformPlugin.PlatformPluginDelegate {
                          ^
  符号:   类 PlatformPluginDelegate
  位置: 类 PlatformPlugin
/Users/a/Documents/curwork/demo/d_stack/android/src/main/kotlin/io/flutter/embedding/android/DFlutterActivity.java:16: 错误: 找不到符号
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.HANDLE_DEEPLINKING_META_DATA_KEY;
^
  符号:   静态 HANDLE_DEEPLINKING_META_DATA_KEY
  位置: 类
/Users/a/Documents/curwork/demo/d_stack/android/src/main/kotlin/io/flutter/embedding/android/DFlutterPageDelegate.java:169: 错误: 不兼容的类型: DFlutterPageDelegate无法转换为Activity
            flutterEngine.getActivityControlSurface().attachToActivity(this, host.getLifecycle());
                                                                       ^
/Users/a/Documents/curwork/demo/d_stack/android/src/main/kotlin/io/flutter/embedding/android/DFlutterPageDelegate.java:183: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
/Users/a/Documents/curwork/demo/d_stack/android/src/main/kotlin/io/flutter/embedding/android/DFlutterPageDelegate.java:514: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
/Users/a/Documents/curwork/demo/d_stack/android/src/main/kotlin/io/flutter/embedding/android/DFlutterActivity.java:928: 错误: 无法将类 PlatformPlugin中的构造器 PlatformPlugin应用到给定类型;
        return new PlatformPlugin(getActivity(), flutterEngine.getPlatformChannel(), this);
               ^
  需要: Activity,PlatformChannel
  找到: Activity,PlatformChannel,DFlutterActivity
  原因: 实际参数列表和形式参数列表长度不同
/Users/a/Documents/curwork/demo/d_stack/android/src/main/kotlin/io/flutter/embedding/android/DFlutterActivity.java:1009: 错误: 找不到符号
                    metaData != null ? metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY) : false;
                                                           ^
  符号:   变量 HANDLE_DEEPLINKING_META_DATA_KEY
  位置: 类 DFlutterActivity
/Users/a/Documents/curwork/demo/d_stack/android/src/main/kotlin/io/flutter/embedding/android/DFlutterActivity.java:1054: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
注: 某些输入文件使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
注: 某些消息已经过简化; 请使用 -Xdiags:verbose 重新编译以获得完整输出
9 个错误

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':d_stack:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 7s
Exception: Gradle task assembleDebug failed with exit code 1

debug异常!

复用引擎不合适

class DFlutterViewController

- (FlutterEngine *)dStackFlutterEngine
{
    return [DStack sharedInstance].engine;
}

此处使用了同一个引擎, 每次从原生中弹出的flutter页面,
都是之前所显示的页面, 相当于原本的flutter页面修改了路由而已,不是独立页面..直接影响了原本页面的逻辑,
也就是相当于修改了initz route , 此处的引擎必须是要创建一个新的引擎, 同时Entrypoint 入口点

望能采纳

这个再原生的项目里面加入flutter模块

这个再原生的项目里面加入,flutter模块,flutter运行,不跳转原生,但是原生运行的可以跳转原生,返回root的不能返回最初的那个page1,只能返回page2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.