Flutter常用代码

Flutter开发过程中用到的一些代码记录

沉浸式状态栏

void main() { runApp(MyApp()); if (Platform.isAndroid) { // 以下两行 设置android状态栏为透明的沉浸。写在组件渲染之后,是为了在渲染后进行set赋值,覆盖状态栏,写在渲染之前MaterialApp组件会覆盖掉这个值。 SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.transparent); SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); } }

修改状态栏字体颜色

  • 使用AnnotatedRegion包裹Scaffold,可以使得状态栏颜色改变,有darklight两种
@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; // ... }

创作不易,若本文对你有帮助,欢迎打赏支持作者!

 分享给好友: