如果您难以理解以下段落,请查看我制作的流程图.
我目前正在制作一个有3个顶级目的地的笔记应用程序.其中一个顶级目标(NotesList)显示用户创建的注释列表.NotesList有一个过滤器按钮,它会打开一个带有FilterMenu目标的底部模态表.FilterMenu有一个搜索按钮,点击后,用一个搜索目的地替换工作表的内容,一个名为tags的按钮,点击后,用一个包含与所有注释相关的标签列表的片段替换工作表的内容(TagList)目的地).
蓝色的一切都是顶级目的地.紫色的所有东西都存在于模态表中.
FilterMenu,Search和TagList显示在模式表中.这意味着NotesList 包含这些片段,而不是由它们替换.它们存在于小于NotesList的屏幕区域中.如果我使用导航,片段将互相替换.
我可以使用两个NavHosts吗?一个用于顶级目的地,另一个用于模态表中的东西?如果是这样,我将如何实现它?如果没有,在这种情况下建议做什么?
android android-architecture-components android-architecture-navigation
我正在使用导航组件和片段作为我的个人目的地制作应用程序。我想知道如何实现这样的导航流程:
在Destination 2中,有一个菜单按钮,可以打开一个小菜单(不覆盖整个屏幕)。在菜单(Menu 1)里面,还有其他按钮点击,第二个菜单(Menu 2)取代了第一个。按后退按钮应该按如下方式移动我:
目的地 2(b) -> 目的地 2(a) -> 目的地 2 -> 目的地 1
我如何使用导航组件来实现这一点?为了清楚起见,菜单显示在目标 2 的顶部。因此,菜单和目标 2 中的内容都应该可见。
android android-architecture-components android-architecture-navigation
假设我有一个与此类似的导航图:
--------- ---------
| Home | ---->| Other |
--------- ---------
|
|
V
---------
| Login |
---------
Run Code Online (Sandbox Code Playgroud)
如果用户没有登录,我必须在他继续之前显示登录屏幕。根据文档,我检查用户是否在HomeFragment. 如果他不是,我打开LoginFragment. 到现在为止还挺好。
但是如果用户按回LoginFragment,我希望应用程序退出。但由于LoginFragment不是开始目的地,它会简单地打开HomeFragment,然后LoginFragment再次打开。
目前,我通过重写退出应用程序onBackPressed()在主机Activity和finish()该Activity如果当前目的地LoginFragment。
但这感觉很hackish。我想这一定是一个非常常见的导航场景。那么,是否有任何“惯用”的方式来做到这一点?
android android-architecture-components android-architecture-navigation
我正在使用 Bloc 模式并使用以下代码来定义我的状态:
import 'package:meta/meta.dart'
@immutable
abstract class UiState {}
class Loading extends UiState {}
class Success extends UiState {
Success(this.message);
final String message;
}
class Failure extends UiState {}
Run Code Online (Sandbox Code Playgroud)
我尝试使用 aUiState如下:
class MyWidget extends StatelessWidget {
const MyWidget({
Key key,
@required this.uiState,
}) : super(key: key);
final UiState uiState;
Widget build(BuildContext context) {
if (uiState is Success) {
return Text(uiState.message);
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是 VSCode 告诉我“没有为类 'UiState' 定义 getter 'message'”。
我以前使用过智能演员,他们确实有效。但在这种情况下,我无法弄清楚为什么它不起作用。
我的 pubspec 有以下内容:
environment:
sdk: …Run Code Online (Sandbox Code Playgroud) android ×3
android-architecture-components ×3
android-architecture-navigation ×3
dart ×1
flutter ×1