第四篇-用Flutter手撸一个抖音国内版,看看有多炫

Flutter 仿抖音 TikTok 上下滑动 播放视频 Flutter 仿抖音 TikTok 上下滑动 播放视频UI框架,视频播放使用 video_player。1.上下滑动自动播放切换视频,loading 封面图占位。2.全屏播放横竖屏切换。 阅读详情

前言

这次对布局进行优化,主要包含了首页tabview pageview 以及添加几个按钮的操作过程.主要使用到stack层叠布局,tabpview和pageview,tabview两个页面,一个关注,一个推荐,左右切换,pageview被包含在tabview里面.

布局优化

抖音的顶部appbar 是悬浮层叠展示,而flutter的层叠组件是stack, 因此最外面采用stack, 其次中间是tabview,分别是关注和推荐两个选项卡,关注在没有登录的时候会弹出一个提示需要认证登录的页面,这里加了两个页面,subscriptionScreen.dart,另外一个是loginScreen.dart

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

@override

 Widget build(BuildContext context) {

   return Scaffold(

     //backgroundColor: Colors.transparent,

     body: Stack(

       //fit: StackFit.expand,

       children: <Widget>[

         TabBarView(

           controller: _tabController,

           children: <Widget>[

             Subscription(),

             PageView(

               allowImplicitScrolling: true,

               controller: _pageController,

               children: <Widget>[

                 Trending(),

               ],

               onPageChanged: (int index) {

                 setState(() {

                   currentIndex = index;

                 });

               },

             ),

           ],

         ),

         Column(

           children: [

             AppBar(

               backgroundColor: Colors.transparent,

               elevation: 0,

               centerTitle: true,

               leading: IconButton(

                   icon: Icon(Icons.tv),

                   onPressed: () {

                     print('点击了直播按钮');

                   }),

               actions: <Widget>[

                 //导航栏右侧菜单

                 IconButton(

                     icon: Icon(Icons.search),

                     onPressed: () {

                       print('点击了搜索按钮');

                     }),

               ],

               title: TabBar(

                 indicator: UnderlineTabIndicator(

                     borderSide: BorderSide(width: 2.0, color: Colors.white),

                     insets: EdgeInsets.symmetric(horizontal: 18.0)),

                 labelStyle: TextStyle(fontSize: 18),

                 isScrollable: true,

                 controller: _tabController,

                 tabs: toptabs,

                 onTap: (index) {

                   print(index);

                 },

               ),

             )

           ],

         ),

       ],

     ),

     bottomNavigationBar: bottomItems(),

   );

 }

  

底部弹出提示认证页面

在 onTap 方法里

1

2

3

Scaffold.of(context).showBottomSheet<void>((BuildContext context) {

          return Login();

        });

BottomSheet 是一个底部滑出的组件

1

2

3

4

5

6

new BottomSheet(

    onClosing: () {},

    builder: (BuildContext context) {

        return new Text('aaa');

    },

),

通常很少直接使用 BottomSheet 而是使用 showModalBottomSheet。直接时候的时候看到的知识 builder 里的内容。

1

2

3

4

Future<T> showModalBottomSheet <T>({

    @required BuildContext context,

    @required WidgetBuilder builder

});

看一个示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

new MaterialButton(

    color: Colors.blue,

    child: new Text('点我'),

    onPressed: () {

        showModalBottomSheet(

            context: context,

            builder: (BuildContext context) {

                return new Container(

                    height: 300.0,

                    child: new Image.network(this.imgurl),

                );

            },

        ).then((val) {

            print(val);

        });

 

 具体详细介绍参考官网.

 

 

关注页面

 

 整个页面布局,左右都有边距,顶部也有边距,所有采用Container包含,边距使用padding: EdgeInsets.only(top: 150.0, left: 65.0, right: 65.0),  背景颜色 color: Color.fromRGBO(14, 15, 26, 1),依次image,另外使用sizebox占用空间,

其他的中间层都是居中,所以采用center都是居中,另外登录按钮是占满屏幕的,所以也采用SizeBox,并且把width:设置为double.infinity,这样就占满屏幕,button采用默认的RaisedButton,在button的onpressed事件调用showBottomSheet

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

import 'package:flutter/material.dart';

import 'package:flutter_app/Screens/loginScreen.dart';

 

class Subscription extends StatefulWidget {

  @override

  State<StatefulWidget> createState() => _SubscriptionState();

}

 

class _SubscriptionState extends State<Subscription>

    with TickerProviderStateMixin {

  final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();

  @override

  Widget build(BuildContext context) {

    return Container(

      padding: EdgeInsets.only(top: 150.0, left: 65.0, right: 65.0),

      color: Color.fromRGBO(14, 15, 26, 1),

      child: Column(

          crossAxisAlignment: CrossAxisAlignment.start,

          children: <Widget>[

            Image(image: AssetImage("assets/images/int_1581491273221.png")),

            SizedBox(height: 20),

            Center(

              child: Text(

                '你还没有登录',

                style: TextStyle(

                    color: Colors.white,

                    fontSize: 20.0,

                    fontWeight: FontWeight.w400),

              ),

            ),

            SizedBox(height: 10),

            Center(

              child: Text(

                '登录账号,查看你关注的精彩内容',

                style: TextStyle(

                    color: Color.fromRGBO(253, 253, 253, 0.6),

                    fontSize: 14.0,

                    fontWeight: FontWeight.w400),

              ),

            ),

            SizedBox(height: 20),

            SizedBox(

              width: double.infinity,

              child: RaisedButton(

                color: Color.fromRGBO(252, 1, 86, 1),

                child: Text(

                  '登录',

                  style: TextStyle(color: Colors.white),

                ),

                onPressed: () {

                  Scaffold.of(context)

                      .showBottomSheet<void>((BuildContext context) {

                    return Login();

                  });

                },

              ),

            ),

          ]),

    );

  }

}

 

登录页面

布局如下图:

 

 

这个页面整体布局顶部,左右都有边距,因此使用Container比较合适,设置背景颜色为color: Colors.white, 边距设置为padding:EdgeInsets.only(top: 25.0, left: 25.0, right: 25.0, bottom: 50.0),整体布局采用Column,因为是上下布局,因此Column 设置

crossAxisAlignment: CrossAxisAlignment.start,顶部的布局是左边一个clear图标按钮,右边一个帮助按钮,所以使用Row布局,并且设置Row的mainAxisAlignment: MainAxisAlignment.spaceBetween,这样就左右布局了,其他依次采用SizeBox占位,

中间则采用Center来展示文字控件,底部的登录部分因为包含标签 超链接,所有采用RichText比较合适,包含TextSpan即可.

全部代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

import 'package:flutter/gestures.dart';

import 'package:flutter/material.dart';

import 'package:url_launcher/url_launcher.dart';

 

class Login extends StatefulWidget {

  @override

  State<StatefulWidget> createState() => _LoginState();

}

 

class _LoginState extends State<Login> {

  TapGestureRecognizer _myTapGestureRecognizer;

  @override

  void initState() {

    super.initState();

    _myTapGestureRecognizer = TapGestureRecognizer()

      ..onTap = () {

        launch('https://open.douyin.com/platform');

      };

  }

 

  @override

  void dispose() {

    _myTapGestureRecognizer.dispose();

    super.dispose();

  }

 

  @override

  Widget build(BuildContext context) {

    return Container(

      color: Colors.white,

      padding:

          EdgeInsets.only(top: 25.0, left: 25.0, right: 25.0, bottom: 50.0),

      child: Column(

        crossAxisAlignment: CrossAxisAlignment.start,

        children: [

          Row(

            mainAxisAlignment: MainAxisAlignment.spaceBetween,

            children: [

              IconButton(

                icon: Icon(Icons.clear),

                onPressed: () {

                  Navigator.pop(context);

                },

                color: Colors.black,

              ),

              Text('帮助', style: TextStyle(color: Colors.black)),

            ],

          ),

          SizedBox(

            height: 150.0,

          ),

          Center(

            child: Text('180****2520',

                style: TextStyle(color: Colors.black, fontSize: 38)),

          ),

          Center(

            child: Text('认证服务由中国电信提供',

                style: TextStyle(

                    color: Color.fromRGBO(53, 53, 53, 1), fontSize: 12)),

          ),

          SizedBox(

            height: 50.0,

          ),

          SizedBox(

            width: double.infinity,

            child: RaisedButton(

              color: Color.fromRGBO(252, 1, 86, 1),

              child: Text(

                '本机号码一键登录',

                style: TextStyle(color: Colors.white),

              ),

              onPressed: () {

                showBottomSheet(

                    context: context, builder: (context) => Login());

              },

            ),

          ),

          SizedBox(

            height: 2.0,

          ),

          SizedBox(

            width: double.infinity,

            child: OutlineButton(

              color: Color.fromRGBO(252, 1, 86, 1),

              child: Text(

                '其他手机号码登录',

                style: TextStyle(color: Colors.black),

              ),

              onPressed: () {

                showBottomSheet(

                    context: context, builder: (context) => Login());

              },

            ),

          ),

          SizedBox(

            height: 5.0,

          ),

          Center(

              child: RichText(

            text: TextSpan(

              children: [

                TextSpan(

                  text: '登录即表明同意',

                  style: TextStyle(color: Color.fromRGBO(53, 53, 53, 0.8)),

                ),

                TextSpan(text: '  '),

                TextSpan(

                  text: '用户协议',

                  style: TextStyle(color: Color.fromRGBO(0, 164, 219, 0.8)),

                ),

                TextSpan(text: '  '),

                TextSpan(

                  text: '和',

                  style: TextStyle(color: Color.fromRGBO(53, 53, 53, 0.8)),

                ),

                TextSpan(text: '  '),

                TextSpan(

                  text: '隐私政策',

                  style: TextStyle(color: Color.fromRGBO(0, 164, 219, 0.8)),

                ),

              ],

            ),

          )),

          Center(

              child: RichText(

            text: TextSpan(

              children: [

                TextSpan(

                  text: '以及',

                  style: TextStyle(color: Color.fromRGBO(53, 53, 53, 0.8)),

                ),

                TextSpan(text: '  '),

                TextSpan(

                    text: '《中国电信认证服务条款》',

                    style: TextStyle(color: Color.fromRGBO(0, 164, 219, 0.8)),

                    recognizer: _myTapGestureRecognizer),

              ],

            ),

          )),

          Expanded(

              flex: 1,

              child: Center(

                  heightFactor: 25.0,

                  child: Text('其他方式登录',

                      style:

                          TextStyle(color: Color.fromRGBO(0, 164, 219, 0.8))))),

        ],

      ),

    );

  }

}

变更记录

本次变更主要体现在首页的选项卡设计,需要层叠展示,并且透明的采用appbar显示出顶部的关注、推荐按钮,另外新增了关注页,登录页,并且把底部按钮以及右边的按钮都加上了触发时间

 

接下来要完成的双击心形按钮点赞,评论页面,分享页面,这些都可以采用showmodalbottomsheet方法打开一个底部抽屉页面

 

还有底部的首页刷新,消息页面,拍短视频页面,消息页面,我的个人信息页面

 

结语

请继续关注本博客,其他页面持续更新完成,源码地址:https://github.com/WangCharlie/douyin,欢迎fork和star,谢谢!!!

【Flutter应用】Flutter精仿抖音开源 总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。需要的朋友可以私信我【资料】或者点这里免费领取。 阅读详情

相关推荐

开源Flutter3.19仿抖音实战(开发自己的抖音APP)

开源Flutter3.19仿抖音实战(开发自己的抖音APP),最近有空的时候用flutter3做了一个抖音的项目,方便大家学习,提供源码,有操作思路。原创开发基于flutter3.19.5+dart3.3.3+getx等技术开发仿抖音app实战项目。实现了类似抖音整屏丝滑式上下滑动视频、左右滑动切换页面模块

flutter开发app的博客 2898

flutter仿抖音首页面效果

本课程将使用 flutter 实现类似抖音首页面效果 通过 TabBar 与 TabBarView 结合使用 实现仿抖音APP首页面 关注 与推荐 页面左右滑动ui构建通过 PageView 来实现上下整屏切换效果使用 VideoPlayer组件实现视频播放功能通过 CircularProgressIndicator实现 有圆形背景样式的按钮浮在视频列表上方来实现控制视频的播放与暂停,并会综述一个 Align 在手机坐标系中的对齐方式通过 ClipOval、CachedNetworkImage 实现圆形头像通过 showModalBottomSheet 实现从页面底部上滑的弹框,结合 ListView 实现弹框显示评论列表功能通过 showModalBottomSheet 实现从页面底部上滑的弹框,结合 GridView 实现弹框显示九宫格列表功能

【拿走不谢】flutter3.19仿抖音实战短视频源码

flutter3.19.x仿抖音教你开发商业级APP接入字节跳动穿山甲广告//穿山甲广告 Android appid 必填//穿山甲广告 ios appid 必填//使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView 选填//appname 必填//是否允许sdk展示通知栏提示 选填//是否在锁屏场景支持展示广告落地页 选填//测试阶段打开,可以通过日志排查问题,上线时去除该调用 选太难。

flutter开发app的博客 2895

Flutter 从入门实践到开发一个APP之UI基础篇

本课程详细讲解 Flutter 中涉及到的视图组件,通过这门课程的学习使得大家能掌握使用 Flutter 来编写跨平台移动客户端应用中的基本布局视图。 本课程涉及到: * flutter 中 MaterialApp 使用精讲* flutter 中 Scaffold 使用精讲* flutter 中 Text 使用精讲* flutter 中 TextField 使用精讲* flutter 中 button 使用精讲* flutter 中 Row 使用精讲* flutter 中 Column 使用精讲* flutter 中 Container 使用精讲* flutter 中 Stack 使用精讲* flutter 中 Image 使用精讲* flutter 中 Checkbox 使用精讲* flutter 中 Switch 使用精讲* flutter 中 Radio 使用精讲* flutter 中 InkWell 使用精讲* flutter 中 CustomScrollView 使用精讲* flutter 中 ListView 使用精讲* flutter 中 GridView 使用精讲

【源码版】flutter3.19仿抖音实战企业级APP应用

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

flutter开发app的博客 1360

【Flutter应用】Flutter精仿抖音开源(1)

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的最后,互联网不存在所谓的寒冬,只是你没有努力罢了!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!**

2401_84149505的博客 1240

flutter图标按钮_第四篇-用Flutter手撸一个抖音国内版,看看有多炫

前言这次对布局进行优化,主要包含了首页tabview pageview 以及添加几个按钮的操作过程.主要使用到stack层叠布局,tabpview和pageview,tabview两个页面,一个关注,一个推荐,左右切换,pageview被包含在tabview里面.布局优化抖音的顶部appbar 是悬浮层叠展示,而flutter的层叠组件是stack, 因此最外面采用stack, 其次中间是tabv...

weixin_42508557的博客 352

原创开发Flutter3.19仿抖音实战,学不会我去刷厕所

最近有空的时候用flutter3做了一个抖音的项目,方便大家学习,提供源码,有操作思路。原创开发基于flutter3.19.5+dart3.3.3+getx等技术开发仿抖音app实战项目。实现了类似抖音整屏丝滑式上下滑动视频、左右滑动切换页面模块,包含商城、购物车、支付功能等模块。 同时接入了友盟SDK统计数据,用户下载安装,活跃量,次日留存等等。

flutter开发app的博客 2415

第二篇-用Flutter手撸一个抖音国内版,看看有多炫

前言 继上一篇使用Flutter开发的抖音国际版后再次撸一个国内版抖音,大部分功能已完成,主要是Flutter开发APP速度很爽, 先看下图 项目主要结构介绍 这次主要的改动在api.dart 及douyin.dart里,国内抖音的api是不同的,另外地址以及实体类也不一样。详细下面介绍. 抖音的实体类 主要是讲json转化为实体模型,然后绑定到view 层面,写这个实体类还是很耗费时间的,毕竟得先用爬网知识讲抖音的json拿到,并且根据json反向写实体类. 这个地址...

wclhack的专栏 7301

DIY音乐播放器:用VS1053模块+Arduino打造你的专属MP3播放器(附完整代码)

本文详细介绍了如何使用VS1053音频解码模块与Arduino开发板,从零开始构建一个功能完备的桌面级MP3播放器。内容涵盖硬件架构设计、SPI总线共享、底层驱动编写、双缓冲区数据流管理以及用户交互实现,并提供完整的代码示例与性能优化建议,帮助创客打造高度可定制的专属音乐播放设备。

weixin_29189003的博客 290

ICESat-2数据下载的两种方法

ICESat-2数据下载

weixin_46341898的博客 2902

用Flutter手撸一个抖音国际版 看看有多炫

肉眼品世界导读:本文为启明星技术架构师社群作者投稿,字节跳动选择了flutter作为混合开发的语言,Flutter “一出生”就以“UI 漂亮、像素级可控、性能流畅、可媲美原生性能”等...

weixin_45727359的博客 1518

KEPServerEX中,别名映射(Alias Mapping)数据标签重命名机制

目录核心机制应用场景配置步骤技术特性与参考内容的差异KEPServerEX中,别名映射(Alias Mapping) 是一种数据标签重命名机制,主要用于简化复杂标签路径的调用或实现跨系统兼容。其核心逻辑和功能如下:路径抽象 将设备层级结构中的完整标签路径(如 Channel1.Device1.Tag1)映射为简短别名(如 TempSensor1),降低客户端调用的复杂度。动态绑定 别名与实际标签实时关联,数据更新和读写操作通过别名直接传递到底层物理标签,无需修改客户端配置。多对一映射支持多个别名指向

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 1591

第三篇-用Flutter手撸一个抖音国内版,看看有多炫

前言 前一篇已经开发了大部分框架,包含视频上下滑动播放,这次将上次未完成的数据显示友好显示,以及底部音乐走马灯特效,另外优化了加载数据的bug,在dart语言里 & 会自动变成&amp; 也不知道这个bug啥时候修复哈. 本系列会持续更新,将各个模块及功能持续完善. 修复Dart语言 URL显示错误. 暂时只能这样替换了 1 url = url.replaceAll('&','&'), 1 2...

wclhack的专栏 672

fastjson1.2.83反序列化漏洞

【代码】fastjson1.2.83反序列化漏洞。

Coder的博客 1万+

RTAB-MAP实战:用Realsense D435i在ROS中搭建室内3D地图(附避坑指南)

本文详细介绍了如何在ROS环境下,使用Intel Realsense D435i深度相机和RTAB-MAP算法进行室内3D地图构建的完整实战流程。内容涵盖环境配置、核心节点数据流解析、关键参数调优、地图保存与重定位,并提供了实用的避坑指南,帮助机器人开发者和研究者快速实现稳定的视觉SLAM应用。

weixin_29095049的博客 492

flutter json转对象_用Flutter手撸一个抖音国际版 看看有多炫

肉眼品世界导读:本文为启明星技术架构师社群作者投稿,字节跳动选择了flutter作为混合开发的语言,Flutter “一出生”就以“UI 漂亮、像素级可控、性能流畅、可媲美原生性能”等特点吸引广大开发者的眼球,自渲染引擎甚至具备开发游戏的能力。更多优质内容请关注微信公众号“肉眼品世界”(ID:find_world_fine),深度价值体系传递技术日新月异,都是站在巨人肩膀上的思考,前端...

weixin_42508241的博客 266

海康网口相机不能被flexscan3d识别到MVS版本为4.6.1,flex为3.3.24在MVS中能够检测到,但是在flex中只能看到电脑自带相机,如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1048

第五篇- 抖音的强大对手来了,用Flutter手撸一个抖音国际版,看看有多炫

前言 由于中间几个月项目天天加班,导致没没时间更新,最近一段时间对前端进行了重构,加了很多页面,如登录、注册、关注、个人中心等,目前写这个纯属业余个人爱好,所以断断续续的继续在做… 前端地址:https://www.pgyer.com/dtok 后端服务器地址:http://47.95.209.198:8181/ 注释:由于本人的apple id无法打包ios、所以暂时只打包的android版本,ios版本正在解决账号问题 效果如下: 架构更新 之前技术采用flutter做的前端,后端api则对接的是

wclhack的专栏 3162

IP-Guard安全网关实例

企业相关情况: 1.OA系统,主要为日常工作使用,该系统IP为192.168.1.2,端口为8080; 2.文件共享服务器,用于存放日常工作资料和文档,该文件共享服务器的IP为192.168.1.1,其中\\192.168.1.1\private 目录中的存放着公司重要文档,不能随意外传; 3.安全网关已采用串联的方式联入网络,IP为192.168.2.6,所有机器访问OA系统和文件共享服务...

IP-Guard专栏 708

OAuth2.0集成SpringSecurity加JWT实现单点登录

单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统。也就是说只要登录一次单体系统就可以

Nicky's blog 9039

抖音的强大对手来了,用Flutter手撸一个抖音国际版,看看有多炫

前言由于中间几个月项目天天加班,导致没没时间更新,最近一段时间对前端进行了重构,加了很多页面,如登录、注册、关注、个人中心等,目前写这个纯属业余个人爱好,所以断断续续的继续在做.........

weixin_45727359的博客 512

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Flutter 用 PageView 仿抖音滑动页面,太炫酷了吧

接入字节跳动穿山甲广告//穿山甲广告 Android appid 必填//穿山甲广告 ios appid 必填//使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView 选填//appname 必填//是否允许sdk展示通知栏提示 选填//是否在锁屏场景支持展示广告落地页 选填//测试阶段打开,可以通过日志排查问题,上线时去除该调用 选太难//是否支持多进程,true支持 选填]);

it7899的博客 1531

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 第三篇-用Flutter手撸一个抖音国内版,看看有多炫
下一篇: 第五篇- 抖音的强大对手来了,用Flutter手撸一个抖音国际版,看看有多炫
wclhack
博客等级 码龄18年 15粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值