Flutter
开发过程中用到的一些代码记录
沉浸式状态栏
void main() {
runApp(MyApp());
if (Platform.isAndroid) {
// 以下两行 设置android状态栏为透明的沉浸。写在组件渲染之后,是为了在渲染后进行set赋值,覆盖状态栏,写在渲染之前MaterialApp组件会覆盖掉这个值。
SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.transparent);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
}
}
修改状态栏字体颜色
- 使用
AnnotatedRegion
包裹Scaffold
,可以使得状态栏颜色改变,有dark
和light
两种
@override
Widget build(BuildContext context) {
return AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle.light,
child: Material(child:Scaffold(),),
);
}
右滑返回
iOS
自带右滑返回功能。在MaterialApp
中 给ThemeData
增加个属性:platform: TargetPlatform.iOS
即可
final RouteObserver<PageRoute> routeObserver = new RouteObserver<PageRoute>();
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'xxx',
navigatorObservers: [routeObserver],
debugShowCheckedModeBanner: false,
initialRoute: '/',
onGenerateRoute: onGenerateRoute,
theme: ThemeData(
platform: TargetPlatform.iOS,
primaryColor: Colors.white,
dividerColor: Color(0xffeeeeee),
scaffoldBackgroundColor: SQColor.paper,
textTheme: TextTheme(body1: TextStyle(color: SQColor.darkGray)),
),
);
}
}
点击穿透
HitTestBehavior.deferToChild
:只有有子Widget
通过了Hit-Test
,才接收一系列的事件,接收区域也会被限制在该子Widget
区域中。HitTestBehavior.opaque
:能够通过Hit-Test
,接收事件,且能阻止在它之前的Widget
(直观来看就是被它挡住的Widget
)接收事件。简单来说就是事件 不能透传。HitTestBehavior.translucent
:能够通过Hit-Test
,接收事件,且不会阻止它之前的Widget
(直观来看就是被它挡住的Widget
)接收事件。简单来说就是事件 能透传。
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
return false;
}
)
tab左右滑动
部分真机详情左右滑动太灵敏 导致详情上下滑动不好滑动。这个时候也可禁用详情 Tab
滑动
TabBarView(
physics: NeverScrollableScrollPhysics(), //禁止TabBarView滑动
children: <Widget>[
// ...
]
)
PageView(
controller: this._pageController,
children: this._pageList,
onPageChanged: (index) {
// ...
},
// 禁止pageView滑动
// physics: NeverScrollableScrollPhysics(),
)
页面缓存
页面切换回来保持不变,使用AutomaticKeepAliveClientMixin
class HomeListView extends StatefulWidget {
HomeListView({Key key}) : super(key: key);
@override
_HomeListViewState createState() => _HomeListViewState();
}
class _HomeListViewState extends State<HomeListView> with AutomaticKeepAliveClientMixin {
// ...
@override
bool get wantKeepAlive => true;
// ...
}
发表评论