网站规划的原则是什么,为什么网站建设要值班,哪个网站的域名便宜,建设电子商务网站的预期收益上效果#xff1a; 有些不能理解官方例子里的动画为什么没有效果#xff0c;有可能是我写法不对 后续如果有动画效果修复了#xff0c;再更新这篇#xff0c;没有动画效果#xff0c;总觉得感受的丝滑效果差了很多
上代码#xff1a;
import package:flutter/material.…上效果 有些不能理解官方例子里的动画为什么没有效果有可能是我写法不对 后续如果有动画效果修复了再更新这篇没有动画效果总觉得感受的丝滑效果差了很多
上代码
import package:flutter/material.dart;
import package:flutter/foundation.dart;
import package:logging/logging.dart;const TAG OfficePageViewDemo;class OfficePageViewDemo extends StatelessWidget {const OfficePageViewDemo({super.key});overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text(PageView Demo!),),body: PageViewDemo(),),);}
}class PageViewDemo extends StatefulWidget {const PageViewDemo({super.key});overridecreateState() _PageViewDemoState();
}class _PageViewDemoState extends StatePageViewDemowith TickerProviderStateMixin {late PageController _pageViewController;late TabController _tabController;int _currentPageIndex 0;overridevoid initState() {super.initState();_pageViewController PageController();_tabController TabController(length: 3, vsync: this);}overridevoid dispose() {super.dispose();_pageViewController.dispose();_tabController.dispose();}overrideWidget build(BuildContext context) {final TextTheme textTheme Theme.of(context).textTheme;return Stack(alignment: Alignment.bottomCenter,children: [PageView(controller: _pageViewController,onPageChanged: _handlePageViewChanged,children: [Center(child: Text(First Page,style: textTheme.titleLarge,),),Center(child: Text(Second Page,style: textTheme.titleLarge,),),Center(child: Text(Third Page,style: textTheme.titleLarge,),),],),PageIndicator(tabController: _tabController,currentPageIndex: _currentPageIndex,onUpdateCurrentPageIndex: _updateCurrentPageIndex,isOnDesktopAndWeb: _isOnDesktopAndWeb,)],);}void _handlePageViewChanged(int currentPageIndex) {Logger(TAG).info(_handlePageViewChanged called! currentPageIndex$currentPageIndex);if (!_isOnDesktopAndWeb) {return;}_tabController.index currentPageIndex;setState(() {_currentPageIndex currentPageIndex;});}void _updateCurrentPageIndex(int index) {Logger(TAG).info(_updateCurrentPageIndex called! index$index);_tabController.index index;_pageViewController.animateToPage(index,duration: const Duration(microseconds: 400 * 2), curve: Curves.linear);}bool get _isOnDesktopAndWeb {if (kIsWeb) {return true;}switch (defaultTargetPlatform) {case TargetPlatform.macOS:case TargetPlatform.linux:case TargetPlatform.windows:return true;case TargetPlatform.android:case TargetPlatform.iOS:case TargetPlatform.fuchsia:return false;}}
}class PageIndicator extends StatelessWidget {const PageIndicator({super.key,required this.tabController,required this.currentPageIndex,required this.onUpdateCurrentPageIndex,required this.isOnDesktopAndWeb});final int currentPageIndex;final TabController tabController;final void Function(int) onUpdateCurrentPageIndex;final bool isOnDesktopAndWeb;overrideWidget build(BuildContext context) {if (!isOnDesktopAndWeb) {return const SizedBox();}final ColorScheme colorScheme Theme.of(context).colorScheme;return Padding(padding: const EdgeInsets.all(8.0),child: Row(mainAxisAlignment: MainAxisAlignment.center,children: [IconButton(splashRadius: 16.0,padding: EdgeInsets.zero,onPressed: () {if (currentPageIndex 0){}else{onUpdateCurrentPageIndex(currentPageIndex - 1)}},icon: const Icon(Icons.arrow_left_rounded,size: 32.0,)),TabPageSelector(controller: tabController,color: colorScheme.surface,selectedColor: colorScheme.primary,),IconButton(splashRadius: 16.0,padding: EdgeInsets.zero,onPressed: () {if (currentPageIndex 2){}else{onUpdateCurrentPageIndex(currentPageIndex 1)}},icon: const Icon(Icons.arrow_right_rounded,size: 32.0,)),],),);}
}
事实就是官方代码不过有点细微差别 有解决动画效果的回复一下蛤
还差一个拖动边界框改变 widget 的宽高效果
END