この記事では、個々のモジュール/機能/ユーザーストーリーのグラフを整理し、それらを一元化し、それらの間の直接ナビゲーションを構築し、上部にプラグインを配置してSafeArgsを振りかける方法を学習します。
これで、マルチモジュールプロジェクトのナビゲーションコンポーネントに関する大きな記事の第3部になりました。上記の一言がわからない場合は、まずそれをよく理解しておくことをお勧めします。
このナビゲーションコンポーネントは何という獣です。
SafeArgsプラグインの仕組みと機能。
さて、あなたがすでにこのライブラリに精通しているなら、次の記事であなたに素晴らしいボーナスがあります-iOSのようなマルチスタックナビゲーションを整理するためのアプローチ。
まず、私が働いている会社(magora-systems.com)で、プロジェクトをモジュールに分割する方法を見てみましょう。
:appは、アプリケーションのメインモジュールおよびエントリポイントです。彼は、アプリケーションに参加しているすべてのモジュールについて知る必要があります。
:core-moduleには、基本クラス、モデル、エンティティ、DTO、拡張機能など、すべての基本的なものが含まれています。
ユーティリティモジュールは、主要なアプリケーションコンポーネントの機能をカプセル化するために使用されます。たとえば、ネットワーク、データベース、または同じナビゲーションを操作します。
機能モジュールには、フローであれ画面であれ、特定の機能/ユーザーストーリーの作業が含まれます。
, Safe Args .
, :
. , :
feature-.
Top-level .
.
, Top-level .
.
feature-
destination- , feature- . , Safe Args , , .
Top-level
— , , .
, .
, , global action.
, Top-level
, :
(:core)
− , . − , . , Lint-a, .
− , , .
(:app)
+ .
− .
− Safe args global action- feature- , .
, :app-, Top-level . …
:
: (:navigation), , - .
id action-. generated- , , id .
<item name="actionglobalnavsignin" type="id"/>
<item name="actionglobalnavsignup" type="id"/>
<item name="actionglobalnavhome" type="id"/>
<item name="actionglobalnavuserslist" type="id"/>
<item name="actionglobalnavuserdetails" type="id"/>
<item name="actionglobalnavon¨C11Cglobal¨C12Csettings" type="id"/>
<item name="action¨C13Cto_faq" type="id"/>
: Directions Args :app
Safe args global action- feature- , .
: generated-. -. Generated- build- , ( :app), :navigation- . : generateSafeArgs, , Args- Directions- R :app, .
ext {
navigationArgsPath = '/build/generated/source/navigation-args'
appNavigation = "${project(':app).projectDir.path}$navigationArgsPath"
navigationPath = "${project(':navigation').projectDir.path}$navigationArgsPath"
navigationPackage = “com.example.navigation”
}
tasks.whenTaskAdded { task ->
if (task.name.contains('generateSafeArgs')) {
task.doLast {
fileTree(appNavigation)
.filter { it.isFile() && it.name.contains("Directions") }
.forEach { file ->
if (file.exists()) {
def lines = file.readLines()
lines = lines.plus(2, "import $navigationPackage.R")
file.text = lines.join("\n")
}
}
}
move(file("$appNavigation"), file("$navigationPath"))
}
}
, , . - , , , .
— , sourceSet-s .
私はこの勝利にこだわるのではなく、それについて他に何ができるかを見ることにしました。このために、顧客が下部メニューのあるアプリケーションを望んでいて、各タブがそれを離れるときにその状態を保持するというプロジェクトは、これまでになく便利になりました。iOSのようなマルチスタックナビゲーションについての私の話の最後の部分が約であるのはこの決定についてです。