将 Flutter 集成到主机应用程序 ( docs ) 时,有几种方法可以做到,其中一种(最简单的)是通过FlutterActivity类在新 Activity 中打开 Flutter 。像这样:
// Java
hostActivity.startActivity(
FlutterActivity.withCachedEngine("my_engine_id").build(context)
);
Run Code Online (Sandbox Code Playgroud)
传统上,对于 Flutter 端的 Android 样式窗口,我们创建带有后退按钮的AppBar 。
此 AppBar后退按钮和 Android 系统后退按钮的行为必须相同:按下后退按钮时必须关闭(完成)前台活动。
当前系统后退按钮确实关闭了FlutterActivity,但是如何从 Flutters AppBar后退按钮模拟这种行为?
// Dart - Flutter side
...
child: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
// WHAT MUST BE HERE?
}),
...
Run Code Online (Sandbox Code Playgroud)
建立 Flutter 端和主机之间的 PS 平台通道 - 我可以从任何端调用任何代码
我用FragmentActivity我的几个碎片.当配置改变时(旋转时),系统会破坏并重新创建每个片段.
我尝试使用这个重新创建的片段
mFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_frame);
Run Code Online (Sandbox Code Playgroud)
并把它放到新的布局
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_frame, mFragment )
.commit();
Run Code Online (Sandbox Code Playgroud)
但遇到奇怪的行为:丢失了几个碎片.它们不会更多地显示在屏幕上.在他们的位置是空的.
虽然日志显示片段重新创建正常,但进一步显示片段再次被破坏,再次创建和销毁.
我为展示问题建立了更清晰,没有外壳的测试项目.
并且可以证明结果(插入图片的声誉不够)
活动开始图片
活动旋转图片
A,B,C,D是一个fragments
如你所见,配置改变后一些片段丢失(B,D)
告诉我我做错了什么
这是帮助的代码(编辑:将代码推送到gitHub以便更容易尝试)
https:// github.com/nailgilaziev/TestFragmentsRetain
Run Code Online (Sandbox Code Playgroud)
p/s抱歉链接
旋转设备后,这里记录猫
MainActivity: onPause Activity
MainActivity: onStop Activity
MainActivity: onDestroy Activity
A: onDestroyview
A: onDestroy
B: onDestroyview
B: onDestroy
C: onDestroyview
C: onDestroy
D: onDestroyview
D: onDestroy
MainActivity: onCreate Activity
A: onCreate
B: onCreate
C: onCreate
D: onCreate
MainActivity: replaced
MainActivity: onStart Activity
A: onCreateView
B: onCreateView
C: onCreateView
D: onCreateView
<--before …Run Code Online (Sandbox Code Playgroud) 许多本地移动聊天Messenger(例如电报,whatsapp等)都实现了这种包装行为:在没有足够的文本空间时,将时间标签包装到新的一行。
简单的聊天气泡由两部分组成:文本和时间标签。在简单的情况下,它们几乎位于同一基线上。即使文本是多行(基线与最后一行)。但是在某些情况下,当没有可用空间并且文本试图相交时,会在气泡底部添加一个缩进。
和2个视频:
多行https://youtu.be/eigLIHWaub8
单行https://youtu.be/9GMDFYwMqdU
如何在Flutter上实现它?