Flutter 2024路线规划——全网最全的flutter图文教程

本文介绍了如何使用Flutter3.19.5和getx技术开发一款仿抖音的商业级APP,涵盖了混合工程、插件增强、业务架构设计、数据统计与性能优化,以及如何接入广告如穿山甲广告。教程详细讲解了关键功能实现和代码示例,助你提升技术水平,成为企业热门工程师。
摘要由CSDN通过智能技术生成

  flutter3.19仿抖音实战短视频企业级APP

近年来各大公司对Flutter技能的要求越来越高,有些专门提供培训并设立岗位,但掌握Flutter高阶技能的人才寥寥无几,市面上干货Flutter高阶课程少之又少,导致Flutter高阶人才缺口大。为此我们专门为大家设计了这门课程,助力你早日成为企业抢手的新一代工程师。

全新Flutter原创基于flutter3.19.5+dart3.3.3+getx等技术开发仿抖音app实战项目。实现了类似抖音整屏丝滑式上下滑动视频、左右滑动切换页面模块,商城、购物车、支付功能等模块。
同时接入了友盟SDK统计数据。 

由于文件比较大,这里只是将部分截图出来,如果你觉得这些内容对你有帮助:

【扫描下方卡片即可免费领取!!!】

学习目标

第一章 混合工程
Flutter工程体系
混合工程改造实战
混合工程与持续集成
快速完成混合工程搭建
使用混合栈框架开发

第二章 能力增强
基于原生能力的插件扩展
基于外接纹理的同层渲染
多媒体能力扩展实践
富文本能力应用实践

第三章 业务架构设计
应用框架设计实践
轻量级动态化渲染引擎的设计
面向切面编程的设计实践
高性能的动态模板渲染实践

第四章 数据统计与性能
数据统计框架的设计
性能稳定性监控方案的设计
高可用框架的设计与实践
跨端方案性能对比实践

第五章 企业级应用实战
基于Flutter的端结构演进与创新
Flutter与FaaS云端一体化架构

flutter运用技术
编辑器:vscode
技术框架:flutter3.19.5+dart3.3.3
路由/状态插件:get: ^4.6.6
网络数据:dio: ^5.3.3
缓存服务:shared_preferences: ^2.2.1
图片预览插件:photo_view: ^0.14.0
刷新加载:easy_refresh^3.3.4
toast轻提示:toast^0.3.0
视频播放器:video_player: ^2.8.3
视频播放器: chewie: ^1.7.5 

实现启动页与自定义开屏广告,可换成穿山甲广告实现收益:

flutter3.19.x仿抖音教你开发商业级APP

接入字节跳动穿山甲广告

await FlutterUnionad.register(
        androidAppId: "5098580",
        //穿山甲广告 Android appid 必填
        iosAppId: "5098580",
        //穿山甲广告 ios appid 必填
        useTextureView: true,
        //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView 选填
        appName: "unionad_test",
        //appname 必填
        allowShowNotify: true,
        //是否允许sdk展示通知栏提示 选填
        allowShowPageWhenScreenLock: true,
        //是否在锁屏场景支持展示广告落地页 选填
        debug: true,
        //测试阶段打开,可以通过日志排查问题,上线时去除该调用 选太难
        supportMultiProcess: true,
        //是否支持多进程,true支持 选填
        directDownloadNetworkType: [
          FlutterUnionad.NetCode.NETWORK_STATE_2G,
          FlutterUnionad.NetCode.NETWORK_STATE_3G,
          FlutterUnionad.NetCode.NETWORK_STATE_4G,
          FlutterUnionad.NetCode.NETWORK_STATE_WIFI
        ]); //允许直接下载的网络状态集合 选填//允许直接下载的网络状态集合 选填
flutter3.19.x+getx实现了类似抖音全屏上下滑动、左右切换页面效果:

使用 bottomNavigationBar 组件实现底部导航页面模块切换

flutter3.19.x+getx仿抖音教你开发商业级AP

flutter3.19.x+getx仿抖音教你开发商业级AP

视频页面布局,使用了 Stack 组件定位实现页面布局。

return Scaffold(
      backgroundColor: Colors.black,
      body: SafeArea(
        child: GetBuilder<VideoController>(builder: (c) {
          return controller.isLoading
              ? const Center(child: CircularProgressIndicator())
              : controller.videos.isEmpty
                  ? Center(
                      child: Column(
                      mainAxisSize: MainAxisSize.min,
                      children: [
                        const Padding(
                          padding: EdgeInsets.only(bottom: 8.0),
                          child: Text("暂无数据"),
                        ),
                        ElevatedButton(
                          style: ButtonStyle(backgroundColor: MaterialStateProperty.all(Colors.red)),
                          onPressed: controller.initLoad,
                          child: const Text("刷新"),
                        ),
                      ],
                    ))
                  : PageView.builder(
                      controller: PageController(
                        initialPage: controller.currentIndex,
                        viewportFraction: 1,
                      ),
                      itemCount: controller.videos.length,
                      onPageChanged: (index) {
                        controller.changeVideo(index);
                      },
                      scrollDirection: Axis.vertical,
                      itemBuilder: (context, index) {
                        return videoCard(controller.videos[index]);
                      },
                    );
        }),
      ),

 使用TabBar组件和PageView组件实现顶部菜单和页面联动切换效果

Obx(
      () => Scaffold(
        body: IndexedStack(
          index: homeController.currentIndex.value,
          children: [
            IndexPage(),
            homeController.currentIndex.value == 1 ? VideoPage() : Container(),
            Container(),
            MessagePage(),
            MinePage(),
          ],
        ),
        bottomNavigationBar: Theme(
          data: Theme.of(context).copyWith(
            splashColor: Colors.transparent,
            highlightColor: Colors.transparent,
          ),
          child: BottomNavigationBar(
            elevation: 0,
            iconSize: 24,
            backgroundColor: homeController.currentIndex.value == 1 ? Colors.black : Colors.white,
            selectedItemColor: homeController.currentIndex.value == 1 ? Colors.white : Colors.black,
            unselectedItemColor: const Color(0xff999999),
            type: BottomNavigationBarType.fixed,
            currentIndex: homeController.currentIndex.value,
            unselectedFontSize: 16,
            selectedFontSize: 18,
            items: const [
              BottomNavigationBarItem(
                icon: SizedBox.shrink(),
                label: "首页",
              ),
              BottomNavigationBarItem(
                icon: SizedBox.shrink(),
                label: "视频",
              ),
              BottomNavigationBarItem(
                icon: Icon(
                  Icons.add_box,
                  size: 32,
                  color: Colors.red,
                ),
                label: "",
              ),
              BottomNavigationBarItem(
                icon: SizedBox.shrink(),
                label: "消息",
              ),
              BottomNavigationBarItem(
                icon: SizedBox.shrink(),
                label: "我",
              ),
            ],
            onTap: (index) {
              homeController.onChangePage(index);
            },
          ),
        ),
      ),
    );
GetBuilder<VideoController>(builder: (c) {
          return controller.isLoading
              ? const Center(child: CircularProgressIndicator())
              : controller.videos.isEmpty
                  ? Center(
                      child: Column(
                      mainAxisSize: MainAxisSize.min,
                      children: [
                        const Padding(
                          padding: EdgeInsets.only(bottom: 8.0),
                          child: Text("暂无数据"),
                        ),
                        ElevatedButton(
                          style: ButtonStyle(backgroundColor: MaterialStateProperty.all(Colors.red)),
                          onPressed: controller.initLoad,
                          child: const Text("刷新"),
                        ),
                      ],
                    ))
                  : PageView.builder(
                      controller: PageController(
                        initialPage: controller.currentIndex,
                        viewportFraction: 1,
                      ),
                      itemCount: controller.videos.length,
                      onPageChanged: (index) {
                        controller.changeVideo(index);
                      },
                      scrollDirection: Axis.vertical,
                      itemBuilder: (context, index) {
                        return videoCard(controller.videos[index]);
                      },
                    );

flutter3.19.x+getx仿抖音教你开发商业级AP

 

 

常言道,学而不思则罔,思而不学则殆。在学习flutter时也应该多多思考,积极消化自己不会的知识,这也能强化我们的技术水平,帮助我们更好适应快节奏的开发进程,成为一名更有竞争力的Android开发者!

由于文件比较大,这里只是将部分截图出来,如果你觉得这些内容对你有帮助:

【扫描下方卡片即可免费领取!!!】

flutter中文网

flutter开发手册

  • 31
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值