flutter和uniapp哪个值得学?看看flutter实战项目

本文介绍了如何使用Flutter3.19.5和getx技术框架开发一款功能丰富的商业级短视频APP,包括全屏滑动、页面切换、商城等功能,并介绍了如何集成友盟SDK和字节跳动穿山甲广告。课程目标是提升混合工程能力和设计高性能应用架构。
摘要由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开发者!

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

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

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter是Google开发的一个跨平台UI开发框架,可以用来开发Android、iOS、Web、桌面等应用程序,而uniapp是DCloud开发的一款基于Vue.js的跨平台开发框架,可以用来开发微信小程序、H5、App等。 下面我们来详细分析一下Flutteruniapp的优缺点: 1. Flutter 优点: - 快速开发:Flutter框架提供了丰富的组件和工具,可以快速地开发出高质量的应用程序。 - 跨平台:Flutter支持Android、iOS、Web、桌面等多个平台,可以用同一套代码实现跨平台开发,减少开发成本。 - 自定义UI:Flutter提供了丰富的组件,支持自定义UI,可以让开发者轻松地实现自己的设计。 - 高性能:Flutter使用Dart语言开发,可以实现高性能的应用程序,而且Flutter框架内置了一些优化措施,可以进一步提高性能。 缺点: - 习成本高:由于Flutter是一个全新的框架,需要习Dart语言和Flutter框架的使用,习成本较高。 - 社区相对较小:相比其他流行的框架,Flutter的社区规模相对较小,可能会缺少一些必要的支持和资源。 下面实现一下Flutter的视频通话: Flutter的视频通话可以使用第三方库agora_rtc_engine来实现。首先在pubspec.yaml文件中添加依赖: ``` dependencies: agora_rtc_engine: ^4.0.5 ``` 然后在代码中使用以下代码来实现视频通话: ``` import 'package:agora_rtc_engine/agora_rtc_engine.dart'; // 初始化Agora引擎 AgoraRtcEngine.create('YOUR APP ID'); // 加入频道 AgoraRtcEngine.joinChannel(null, 'CHANNEL NAME', null, 0); // 开始预览本地视频 AgoraRtcEngine.enableVideo(); AgoraRtcEngine.startPreview(); // 创建一个渲染视图 Widget _renderLocalView() { return Texture( textureId: AgoraRtcEngine.localRenderer.textureId, ); } // 创建一个渲染视图 Widget _renderRemoteView() { return Texture( textureId: AgoraRtcEngine.remoteRenderer.textureId, ); } // 设置本地渲染视图 AgoraRtcEngine.setupLocalVideo( VideoCanvas(widget.localViewKey, VideoRenderMode.Fit)); // 设置远程渲染视图 AgoraRtcEngine.setupRemoteVideo( VideoCanvas(widget.remoteViewKey, VideoRenderMode.Fit, 0)); ``` 2. uniapp 优点: - 跨平台:uniapp可以开发微信小程序、H5、App等多个平台,可以用同一套代码实现跨平台开发,减少开发成本。 - 易上手:uniapp基于Vue.js框架开发,对于Vue.js开发者来说非常容易上手。 - 社区资源丰富:uniapp在国内拥有较大的用户群体,社区资源丰富,有大量的插件和组件可供使用。 缺点: - 性能相对较差:由于uniapp是基于WebView实现的,性能相对较差,特别是在处理复杂UI和大量数据时可能会出现卡顿现象。 - 兼容性问题:由于不同平台的浏览器内核不同,uniapp可能会出现一些兼容性问题,需要开发者进行调试和适配。 下面实现一下uniapp的视频通话: uniapp的视频通话可以使用第三方库uni-rtc来实现。首先在manifest.json文件中添加依赖: ``` "app-plus": { "modules": { "uni-rtc": { "version": "0.3.4", "provider": "uni-rtc" } } } ``` 然后在代码中使用以下代码来实现视频通话: ``` import uniRtc from '@uni-rtc/plugin'; // 初始化uni-rtc uniRtc.init('YOUR APP ID'); // 加入房间 uniRtc.joinRoom('CHANNEL NAME'); // 开始预览本地视频 uniRtc.startPreview('LOCAL VIEW ID'); // 创建一个渲染视图 <view class="remote-view" id="REMOTE VIEW ID"></view> // 设置远程渲染视图 uniRtc.subscribe('REMOTE VIEW ID'); // 设置本地音频和视频 uniRtc.enableLocalAudio(true); uniRtc.enableLocalVideo(true); ``` 总的来说,Flutteruniapp都有各自的优缺点,需要根据具体的项目需求和开发团队的技术水平来选择。如果需要开发高性能、复杂的应用程序,建议选择Flutter;如果需要快速开发微信小程序、H5等应用程序,建议选择uniapp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值