ویجت NestedScrollView
ویجت NestedScrollView جهت پیاده سازی قابلیت پیمایش تودرتو استفاده می شود و پرکاربردترین حالت استفاده از آن مربوط به زمانی است که شما مایل هستید در صورت اسکرول عمودی ، AppBar برنامه مخفی شده و فقط قسمت TabBar نمایش داده شود . این در حالی است که ممکن است هم زمان شما از یک ListView نیز در صفحه خود استفاده کرده باشید . در واقع ویجت NestedScrollView ضمانت می کند که اسکرول کلی صفحه که باعث مخفی شدن AppBar شده است با اسکرول اجزاء صفحه ( مثلا ListView ) تداخلی نداشته باشد و به درستی کار کند .
قطعه کد زیر نمونه ای از پیاده سازی این ویجت را نمایش می دهد :
class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin { TabController tabController; @override void initState() { // TODO: implement initState super.initState(); tabController = new TabController(initialIndex: 1, length: 4, vsync: this); } @override Widget build(BuildContext context) { return Scaffold( body: NestedScrollView( headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return <Widget>[ new SliverAppBar( pinned: true, floating: true, title: Text('واتساپ'), elevation: 5, bottom: TabBar( controller: tabController, indicatorColor: Colors.white, // رنگ حالت انتخاب زیر هر تب tabs: <Widget>[ Tab( icon: Icon(Icons.camera_alt), ), Tab( text: 'چت ها', ), Tab( text: 'وضعیت', ), Tab( text: 'تماس ها', ), ], ), actions: <Widget>[ IconButton( icon: Icon(Icons.search), onPressed: () { print('searchIcon'); }, ), IconButton( icon: Icon(Icons.more_vert), onPressed: () { print('moreIcon'); }, ) ], ) ]; }, body: TabBarView( controller: tabController, children: <Widget>[ CameraScreen(), ChatScreen(), StatusScreen(), CallScreen() ], )), floatingActionButton: FloatingActionButton( child: Icon(Icons.chat), onPressed: () { print('Floating Click'); }, ), ); } }
همانطور که در کد فوق نیز مشخص است ، زمانی که از ویجت NestedScrollView استفاده می نمایید ، خصوصیت AppBar مربوط به ویجت Scaffold را حذف و در بدنه ویجت NestedScrollView خصوصیت headerSliverBuilder را با ویجت SliverAppBar مقدار دهی می نمایید . در این صورت است که ویجت NestedScrollView می تواند بر روی حالت نمایش AppBar نظارت داشته باشد .
خروجی کد فوق به شکل زیر دیده می شود :
جهت کسب اطلاعات بیشتر از این آدرس به سایت اصلی فلاتر مراجعه نمایید .
امیدوارم این مطلب برای شما مفید باشد .