flutter开发实战-底部bottomNavigationBar➕PageView

这篇具有很好参考价值的文章主要介绍了flutter开发实战-底部bottomNavigationBar➕PageView。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

flutter开发实战-底部bottomNavigationBar

tabbar在app中非常常见,底部BottomNavigationBar属性

flutter开发实战-底部bottomNavigationBar➕PageView,flutter,flutter开发实战,移动开发,flutter,Tabbar,PageView
flutter开发实战-底部bottomNavigationBar➕PageView,flutter,flutter开发实战,移动开发,flutter,Tabbar,PageView

一、BottomNavigationBar属性

BottomNavigationBar组件的常用属性:

  • type:tabbar样式,默认为白色不显示;
  • fixedColor:tabbar选中颜色;
  • currentIndex:当前选中的Item的index
  • selectedFontSize:选中的title的size (默认14.0)
  • unselectedFontSize:未选中的title的size (默认12.0)
  • backgroundColor:背景色
  • iconSize:icon图片的size (默认是24.0)
  • items

二、代码实现

这里我代码进行了拆分。

2.1、main_sub_pages.dart代码

main_sub_pages.dart

List<Widget> mainPages = <Widget>[
  HomePage(),
  QrScanEntryPage(),
  MinePage(),
];


List<String> mainRouterNames = <String>[
  RouterName.home,
  RouterName.scanEntry,
  RouterName.mine,
];

2.2、main_tab_navigator.dart代码

main_tab_navigator.dart

// 在MainTabNavigator中,使用到了PageView.builder

PageView 是一个非常重要的组件,因为在移动端开发中很常用,比如大多数 App 都包含 Tab 换页效果、图片轮动以及抖音上下滑页切换视频功能等等

class MainTabNavigator extends StatefulWidget {
  const MainTabNavigator({Key? key}) : super(key: key);

  
  State<MainTabNavigator> createState() => _MainTabNavigatorState();
}

class _MainTabNavigatorState extends State<MainTabNavigator> {
  PageController _pageController = PageController();
  int _selectedIndex = 0;
  late DateTime _lastPressed;

  List<Widget> subMainPages = [];

  
  void initState() {
    // 检查app更新
    checkAppUpdate();

    // 设置默认的
    subMainPages = mainPages;

    super.initState();
  }

  void checkAppUpdate() {

  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomInset: false,
      body: WillPopScope(
        onWillPop: () async {
          if (_lastPressed == null ||
              DateTime.now().difference(_lastPressed) > Duration(seconds: 1)) {
            //两次点击间隔超过1秒则重新计时
            _lastPressed = DateTime.now();
            return false;
          }
          return true;
        },
        child: PageView.builder(
          itemBuilder: (BuildContext context, int index) {
            return KeepAliveWrapper(
                child: subMainPages[index], keepAlive: true);
          },
          itemCount: subMainPages.length,
          controller: _pageController,
          physics: NeverScrollableScrollPhysics(),
          onPageChanged: (index) {
            setState(() {
              _selectedIndex = index;
            });
          },
        ),
      ),
      bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.fixed,
        items: <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            icon: Icon(Icons.home_outlined),
            label: S.of(context).home,
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.qr_code_scanner_outlined),
            label: S.of(context).qrScan,
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.nature_outlined),
            label: S.of(context).mine,
          ),
        ],
        currentIndex: _selectedIndex,
        onTap: (index) {
          _pageController.jumpToPage(index);
        },
      ),
    );
  }
}

2.2、main_page.dart代码

main_page.dart

class MainPage extends StatefulWidget {
  const MainPage({Key? key}) : super(key: key);

  
  State<MainPage> createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  
  Widget build(BuildContext context) {
    return Scaffold(
      body: MainTabContainer(),
    );
  }
}

class MainTabContainer extends StatefulWidget {
  const MainTabContainer({Key? key}) : super(key: key);

  
  State<MainTabContainer> createState() => _MainTabContainerState();
}

class _MainTabContainerState extends State<MainTabContainer> {
  
  Widget build(BuildContext context) {
    return MainTabNavigator();
  }
}

2.3、在App入口页面设置

return MaterialApp(
      theme: ThemeData(
        fontFamily: "PingFang SC",
        primarySwatch: themeModel.theme,
      ),
      navigatorKey: OneContext().key,
      debugShowCheckedModeBanner: false,
      supportedLocales: S.delegate.supportedLocales,
      locale: localeModel.getLocale(),
      initialRoute: RouterName.main,	// 默认main
      onGenerateRoute: RouterManager.generateRoute,
);

这里在router_manager配置main

class RouterManager {
  // ignore: missing_return
  static Route<dynamic> generateRoute(RouteSettings settings) {
    LoggerManager().debug("generateRoute: ${settings}, name:${settings.name}");
    switch (settings.name) {

      case RouterName.agreement:
        {
          return NoAnimRouteBuilder(const ProtocolAgreementPage());
        }
        break;


      case RouterName.main:
        {
          return NoAnimRouteBuilder(const MainPage());
        }
        break;

      default:
        return MainTabNavigator();
    }
  }
}

至此实现了flutter开发实战-底部bottomNavigationBar➕PageView,tabbar切换效果

三、小结

flutter开发实战-底部bottomNavigationBar➕PageView,tabbar切换效果,配置MaterialApp的onGenerateRoute与initialRoute。

学习记录,每天不停进步。文章来源地址https://www.toymoban.com/news/detail-545831.html

到了这里,关于flutter开发实战-底部bottomNavigationBar➕PageView的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter PageView 参数介绍及使用

    PageView 可以用于创建水平滑动的页面,通常用于实现图片轮播、引导页、以及其他需要切换页面的场景。在本文中,我们将深入探讨 Flutter PageView 的参数,并演示如何使用它来构建交互性强大的页面。 首先,让我们来了解一下 PageView 的基本使用方法。在 Flutter 中,PageView 是

    2024年01月20日
    浏览(33)
  • Flutter开发 键盘弹起导致底部溢出问题

            flutter版本:3.7.12         表现:登录页为从上往下Column布局,但是内容不足以撑满一整屏(约70%),键盘弹起的时候导致底部溢出,查了一下资料,都说给Scaffold加上属性 加上后确实不会再出现溢出表现,但是同时页面也没有随着键盘的弹起而弹起,导致一些小屏

    2024年01月17日
    浏览(53)
  • Flutter 使用pageview无缝隙自动轮播教程

    导入要使用的轮播图片 声明变量 然后在initState里面初始化一下 在dispose里面去掉 最后在你需要的地方加入下面代码就行了

    2024年02月07日
    浏览(40)
  • 小程序开发实战案例之三 | 小程序底部导航栏如何设置

    小程序中最常见的功能就是底部导航栏了,今天就来看一下怎么设置一个好看的导航栏~这里我们使用的是支付宝官方小程序 IDE 做示范。   一般的小程序会有四个 tab,我们这次也是配置四个 tab 的导航栏。 首先,我们先创建四个页面:   tab 最多可以设置五个,参考 👉

    2024年02月05日
    浏览(60)
  • flutter开发实战-多语言flutter intl

    flutter开发实战-多语言flutter intl 之前做的应用中有用到多语言,一直没有整理,这里整理一下多语言设置流程。 使用的是Android studio 使用Android studio安装flutter_intl 插件,更新或者安装flutter_intl 插件后会提示重新启动IDE。 如图所示: 在Android Studio中菜单Tools找到flutter intl创建

    2024年02月13日
    浏览(40)
  • flutter开发实战-inappwebview实现flutter与Javascript方法调用

    flutter开发实战-inappwebview实现flutter与Javascript方法调用 在使用inappwebview时候,需要flutter端与JS进行交互,调用相应的方法,在inappwebview中的JavaScript Handlers。 要添加JavaScript Handlers,可以使用InAppWebViewController.addJavaScriptHandler方法,在该方法中定义handlerName和JavaScript端调用它时要

    2024年02月03日
    浏览(43)
  • flutter开发实战-webview插件flutter_inappwebview使用

    flutter开发实战-webview插件flutter_inappwebview使用 在开发过程中,经常遇到需要使用WebView,Webview需要调用原生的插件来实现。常见的flutter的webview插件是webview_flutter,flutter_inappwebview。之前整理了一下webview_flutter,查看https://blog.csdn.net/gloryFlow/article/details/131683122 这里我们使用fl

    2024年02月07日
    浏览(48)
  • flutter开发实战-MethodChannel实现flutter与iOS双向通信

    flutter开发实战-MethodChannel实现flutter与iOS双向通信 最近开发中需要iOS与flutter实现通信,这里使用的MethodChannel 如果需要flutter与Android实现双向通信,请看 https://blog.csdn.net/gloryFlow/article/details/132218837 这部分与https://blog.csdn.net/gloryFlow/article/details/132218837中的一致,这里实现一下

    2024年02月13日
    浏览(51)
  • flutter开发实战-图片保存到相册

    flutter开发实战-图片保存到相册。保存相册使用的是image_gallery_saver插件 在pubspec.yaml中引入插件 使用image_gallery_saver将图片保存到相册 flutter开发实战-图片保存到相册。保存相册使用的是image_gallery_saver插件。 学习记录,每天不停进步。

    2024年02月15日
    浏览(59)
  • flutter开发实战-Theme主题切换

    flutter开发实战-Theme主题切换 之前做的应用中有用到Theme主题切换,一直没有整理,这里整理一下。 使用的是Android studio // 提供五套可选主题色 在Main.dart入口的MaterialApp 当主题切换后,Provider会通知到对应的页面Build,就会显示对应的主题。 主题切换页面 flutter开发实战-Them

    2024年02月16日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包