Native Android App中的颤振,后按不起作用
Posted
技术标签:
【中文标题】Native Android App中的颤振,后按不起作用【英文标题】:Flutter in Native Android App, back pressed not working 【发布时间】:2020-12-07 13:57:54 【问题描述】:我阅读了很多关于此的主题,但没有任何效果,并且与我的上下文完全相同。
我正在尝试在原生 android 项目中添加颤动视图,我有一个原生 Activity 可以启动颤动片段。这个颤振片段包含 2 个视图(firstScreen 和 secondScreen)。 FirstScreen 在按下按钮时重定向到 SecondScreen,并且 secondScreen 在按下按钮时弹回第一个屏幕。到目前为止一切正常。
但是当我在第二个屏幕上时,我想在按下设备后退按钮时返回 firstScreen,但颤动 Fragment 已关闭,我又回到了本机 Activity。
当我单独运行flutter模块时,后面的过程看起来不错。
以下是一些截图:
这里有一些代码:
在原生 MainActivity 中
override fun startFlutterModule()
val newFlutterFragment: FlutterFragment = FlutterFragment.createDefault()
supportFragmentManager.beginTransaction()
.replace(
fragmentContainerId,
newFlutterFragment,
TAG_FLUTTER_FRAGMENT
)
.addToBackStack(TAG_FLUTTER_FRAGMENT)
.commit()
基本 Flutter 应用
void main() => runApp(MyApp());
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return new MaterialApp(
routes:
'/first': (context) => FirstScreen(),
'/second': (context) => SecondScreen(),
,
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FirstScreen(),
);
第一个 Flutter 屏幕
class FirstScreen extends StatefulWidget
@override
_FirstScreenState createState() => _FirstScreenState();
class _FirstScreenState extends State<FirstScreen>
@override
Widget build(BuildContext context)
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"First Screen",
style: TextStyle(
fontSize: 30.0,
fontWeight: FontWeight.w600,
),
),
Padding(
padding: EdgeInsets.all(10.0),
child: RaisedButton(
padding: EdgeInsets.symmetric(
horizontal: 20.0,
vertical: 10.0,
),
onPressed: ()
Navigator.pushNamed(context, '/second');
,
child: Text(
"Screen 2",
style: TextStyle(
color: Colors.white,
fontSize: 20.0,
),
),
),
)
],
),
),
);
第二个颤振屏幕
class SecondScreen extends StatefulWidget
@override
_SecondScreenState createState() => _SecondScreenState();
class _SecondScreenState extends State<SecondScreen>
@override
Widget build(BuildContext context)
return new WillPopScope(
onWillPop: () async
Navigator.pop(context);
return Future.value(false);
,
child: Scaffold(
backgroundColor: Colors.white,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"Second Screen",
style: TextStyle(
fontSize: 30.0,
fontWeight: FontWeight.w600,
),
),
Padding(
padding: EdgeInsets.all(10.0),
child: RaisedButton(
padding: EdgeInsets.symmetric(
horizontal: 20.0,
vertical: 10.0,
),
onPressed: ()
Navigator.pop(context);
,
child: Text(
"Screen 1",
style: TextStyle(
color: Colors.white,
fontSize: 20.0,
),
),
),
)
],
),
),
)
);
【问题讨论】:
【参考方案1】:从您的原生活动调用 FlutterFragment 的 onBackPressed() 方法。
override fun onBackPressed()
_flutterFragment.onBackPressed()
【讨论】:
以上是关于Native Android App中的颤振,后按不起作用的主要内容,如果未能解决你的问题,请参考以下文章
react-native android中的gradlew assembleRelease命令未生成app-release.apk
我如何将颤振项目迁移到 androidx:任务“:app:preDebugBuild”的执行失败。 > Android 依赖 'androidx.versionedparcelable