Flutter pageview切换指示器的实现代码

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Flutter pageview切换指示器的实现代码脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

PageView 是一个滑动视图列表,它也是继承至 CustomScrollView 的。

在 PageView 里有三个构造函数:

  • PageView - 创建一个可滚动列表。
  • PageView.builder - 创建一个滚动列表,指定数量。
  • PageView.custom - 创建一个可滚动的列表,自定义子项。

效果

Flutter pageview切换指示器的实现代码

代码

 // Copyright 2017, the Flutter PRoject authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file.  import 'dart:math'; import 'package:flutter/@R_512_2144@rial.dart';  void main() {  runApp(new MyApp()); }  class MyApp extends statelessWidget {  @override  Widget build(BuildContext context) {   return new MaterialApp(    tITle: 'Flutter Demo',    home: new MyHomePage(),    debugShowCheckedModeBanner: false,   );  } }  /// An indicator showing the currently selected page of a PageController class DotsIndicator extends AnimatedWidget {  DotsIndicator({   this.controller,   this.itemCount,   this.onPageSelected,   this.color: Colors.white,  }) : suPEr(listenable: controller);   /// The PageController that this DotsIndicator is representing.  final PageController controller;   /// The number of items managed by the PageController  final int itemCount;   /// Called when a dot is tapped  final ValueChanged<int> onPageSelected;   /// The color of the dots.  ///  /// defaults to `Colors.white`.  final Color color;   // The base size of the dots  static const double _kDotSize = 8.0;   // The increase in the size of the selected dot  static const double _kMaxZoom = 2.0;   // The distance between the center of each dot  static const double _kDotSpacing = 25.0;   Widget _buildDot(int index) {   double selectedness = Curves.easeOut.transform(    max(     0.0,     1.0 - ((controller.page &#63;? controller.initialPage) - index).abs(),    ),   );   double zoom = 1.0 + (_kMaxZoom - 1.0) * selectedness;   return new Container(    width: _kDotSpacing,    child: new Center(     child: new Material(      color: color,      type: MaterialType.circle,      child: new Container(       width: _kDotSize * zoom,       height: _kDotSize * zoom,       child: new InkWell(        onTap: () => onPageSelected(index),       ),      ),     ),    ),   );  }   Widget build(BuildContext context) {   return new Row(    mainAxisAlignment: MainAxisAlignment.center,    children: new List<Widget>.generate(itemCount, _buildDot),   );  } }  class MyHomePage extends StatefulWidget {  @override  State createstate() => new MyHomePageState(); }  class MyHomePageState extends State<;myHomePage> {   final _controller = new PageController();   static const _kDuration = const Duration(milliseconds: 300);   static const _kCurve = Curves.ease;   final _kArrowColor = Colors.black.withOpacity(0.8);   final List<Widget> _pages = <Widget>[   new ConstrainedBox(    constraints: const BoxConstraints.expand(),    child: new FlutterLOGo(colors: Colors.blue),   ),   new ConstrainedBox(    constraints: const BoxConstraints.expand(),    child: new FlutterLogo(style: FlutterLogoStyle.stacked, colors: Colors.red),   ),   new ConstrainedBox(    constraints: const BoxConstraints.expand(),    child: new FlutterLogo(style: FlutterLogoStyle.horizontal, colors: Colors.green),   ),  ];   @override  Widget build(BuildContext context) {   return new Scaffold(    body: new IconTheme(     data: new IconThemeData(color: _kArrowColor),     child: new Stack(      children: <Widget>[       new PageView.builder(        physics: new AlwaysScrollableScrollPhysics(),        controller: _controller,        itemBuilder: (BuildContext context, int index) {         return _pages[index % _pages.length];        },       ),       new Positioned(        bottom: 0.0,        left: 0.0,        right: 0.0,        child: new Container(         color: Colors.grey[800].withOpacity(0.5),         padding: const EdgeInsets.all(20.0),         child: new Center(          child: new DotsIndicator(           controller: _controller,           itemCount: _pages.length,           onPageSelected: (int page) {            _controller.animateToPage(             page,             duration: _kDuration,             curve: _kCurve,            );           },          ),         ),        ),       ),      ],     ),    ),   );  } }  

PageView 有以下常用属性:

  • childrenDelegate → SliverChildDelegate - 子项列表。
  • controller → PageController - 控制台。
  • onPageChanged → ValueChanged - 索引改变时触发。
  • pageSnapping → bool - 设置为 false 以禁用页面捕捉,对自定义滚动行为很有用。
  • physics → ScrollPhysics - 页面视图如何响应用户输入,即滚动的动画表现。
  • reverse → bool - 是否方向
  • scrollDirection → Axis - 视图滚动的方向。
android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Flutter pageview切换指示器的实现代码全部内容,希望文章能够帮你解决Flutter pageview切换指示器的实现代码所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。