flutter开发
吴庆森
这个作者很懒,什么都没留下…
展开
-
Flutter 2进阶(九):FijkPlayer播放视频与卡片效果
使用 FijkPlayer 播放视频,包括的功能:亮度调节,音量调节,长按2倍速播放,双击暂停/开始,全屏播放。大概的效果图:下载链接:CSDN :flutter_blbl.zip-Android文档类资源-CSDN下载GitHub:https://github.com/wuqingsen/FlutterLearnDemo用到的插件,网格布局,图片加载缓存淡入效果,视频播放器,音量和亮度控制器: flutter_staggered_grid_view: ^0.4.1 tr原创 2021-12-09 15:43:25 · 2729 阅读 · 1 评论 -
Flutter 2进阶(八):EventBus、轮播图与沉浸式状态栏
开发中,必须要用到的也就这三个小插件了。这里主要讲一下 EventBus,轮播图和沉浸式状态栏教程很多并且很简单。下面主要用上面三个实现的功能,b站广告图,沉浸式状态栏,以及点击左上角头像用 eventbus 进入我的页面,效果图如下:下载链接,建议去 CSDN 下载,不要积分,CSDN 是阶段性代码,GitHub 有时忘记传上去:CSDN :flutter_blbl.zip-Android文档类资源-CSDN下载GitHub:https://github.com/wuqingse.原创 2021-12-07 15:55:54 · 2307 阅读 · 0 评论 -
Flutter 2进阶(七):BaseWidget的封装
为了方便后面开发,简单了封装一下 BaseWidget ,将一些重复内容可以放进去。BaseWidget:import 'package:flutter/material.dart';abstract class BaseWidget extends StatefulWidget { @override BaseWidgetState createState() => getState(); BaseWidgetState getState();}abstract .原创 2021-12-07 14:31:58 · 2975 阅读 · 1 评论 -
Flutter 2进阶(六):回调函数的使用
我看了一下,关于 Flutter 的回调和 Android 中的有点区别。所以记录一下,下面是定义了一个有两个参数的回调://定义回调typedef MyCallBack = Function(String val1, String val2);//回调监听class MyCallBackListener { final MyCallBack myCallBack; MyCallBackListener({this.myCallBack});}设置我收到的回调:MyC原创 2021-12-03 11:04:00 · 6271 阅读 · 0 评论 -
Flutter 2进阶(五):json_serializable使用
后面请求网络用的是免费的 Bmob ,这里面生成实体类推荐用json_serializable 。添加依赖:environment: sdk: ">=2.15.0-116.0.dev <3.0.0"dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 json_annotation: ^4.4.0 #添加1dev_dependencies: flutter_test: .原创 2021-12-02 17:11:40 · 2603 阅读 · 0 评论 -
Flutter 2进阶(四):基于Navigator 2.0封装
Navigator 2.0 提供了一系列全新接口,可以实现将路由状态成为应用状态的一部分,新增的 API 如下:Page :表示 Navigator 路由栈中各个页面的不可变对象;Page 是个抽象类,通常使用他的派生类: MaterialPage 或 CupertinoPage;Router:用来配置要由 Navigator 展示的页面列表,通常改页面列表会根据系统的状态而改变;除了使用 Router 本身还可以使用 MaterialApp.router()来创建 Router;RouterD原创 2021-12-01 15:29:57 · 2255 阅读 · 0 评论 -
Flutter 2进阶(三):模仿哔哩哔哩登录注册
app 做什么都离不开强大的 B 站,模仿哔哩哔哩登录注册,效果图:一个简单的效果,输入密码完成图片闭眼,登录按钮可以点击并且高亮的效果;这里请求接口网络用的免费的Bmob,Toast 用的FlutterToast。源码:CSDN 下载(0积分):flutter_blbl.zip-Android文档类资源-CSDN下载GitHub:https://github.com/wuqingsen/FlutterLearnDemo...原创 2021-11-30 09:53:11 · 509 阅读 · 0 评论 -
Flutter 2进阶(二):Flutter空安全
从Flutter 2开始,Flutter便在配置中默认启用了空安全,防止崩溃。如果 sdk 大于 2.12.0 ,开启了空安全检查:environment:sdk: ">=2.12.0 <3.0.0" 如果想关闭,调到 2.12.0 以下即可: environment: sdk: ">=2.7.0 <3.0.0"创建的变量默认都是空安全的,如果允许为空,要加 ? ,如: String? url;在构造函数中变量不可空需要添加require.原创 2021-11-24 16:51:17 · 5655 阅读 · 0 评论 -
Flutter 2进阶(一):Flutter实用技巧
自动补全 widget,使用 flutter snippets ,在 Plugins 中安装插件,安装完成重启即可使用:快速创建 widget ,输入 stf 或 stl 回车即可快速创建;Flutter 保存自动格式化,Preferences 设置 Format code on save :Flutter 快速创建方法,选中嵌套的 widget ,右键,输入方法名即可:终台输入命令 flutter clean ,清空缓存;...原创 2021-11-24 16:35:21 · 1102 阅读 · 0 评论 -
Flutter开发(三十二):Flutter屏幕适配
当页面使用了 Scaffold 的 appBar 与 bottomNavigationBar 的页面不需要额外适配,框架里面已经自动适配了。但很多页面写的时候不会用到 Scanffold ,这样需要手动适配。适配不同的手机,关键是顶部和底部留有安全区域。第一种方案:利用 SafeArea 包裹页面,简单不够灵活。第二种方案:利用 MediaQuery.of(context).padding 获取屏幕四周 padding ,来手动适配,复杂但灵活。第一种示例代码:void mai原创 2021-11-24 11:57:24 · 1102 阅读 · 0 评论 -
Flutter开发(三十一):Flutter启动白屏
做 Android 开发,app 启动也有白屏,flutter 也不例外,优化这个和 Android 优化白屏是一样的处理:添加启动页。使用插件flutter_splash_screen: ^0.3.0:flutter_splash_screen | Flutter Packagegithub 参考这个:GitHub - crazycodeboy/flutter_splash_screen: A splash screen for flutter, hide when application l..原创 2021-11-24 11:23:32 · 1183 阅读 · 0 评论 -
Flutter开发(三十):Flutter简单app搭建
自学 flutter 接近一个月,只是学到了基础,控件,页面,请求网络等等。用所学写了一个简单 app ,里面包括了:主要框架搭建;滑动标题页;加载webview;瀑布流布局;以及各种基础的控件;效果图如下:...原创 2021-11-24 10:24:40 · 1348 阅读 · 0 评论 -
Flutter开发(二十九):Flutter热重启、热加载、调试与发布应用
1.Flutter热重启、热加载2.混合开发调试 dart 代码3.发布应用1.Flutter热重启、热加载Flutter自带热重启/热加载的功能,但是到了 Android 项目中集成 Flutter ,这个功能好像没用了。下面来打开这个功能。将设备连接到电脑上,关闭 APP(很关键),然后打开终端进入到对应项目文件夹运行:flutter attach运行成功提示等待连接:Waiting for a connection from Flutter on Mi 10原创 2021-11-05 17:23:06 · 2864 阅读 · 0 评论 -
Flutter开发(二十八):Flutter_1.12与Android混合开发
1. Android 页面跳转到 Flutter 页面两种方式及传值上一节看到无论跳转还是嵌入,速度都要一秒多,肉眼可见的慢,没有原生快很多。为了优化这个问题,flutter 提供了FlutterEngine 来进行预热/缓存,需要跳转的时候直接找到对应 id 进行跳转即可。1. Android 页面跳转到 Flutter 页面两种方式及传值前面一节说了两种方式:第一种作为 fragment 嵌入到原生页面中;第二种是作为一个新的页面 activity 跳转进入;下面讲的是.原创 2021-11-05 15:58:56 · 1467 阅读 · 0 评论 -
Flutter开发(二十七):Flutter_1.12与Android混合开发
Flutter 可以作为独立页面进入,如 Android 原生进入 Flutter ,或者Flutter 进入 Android 。还有的情况一个页面存在Flutter item 与Android 页面。目前有一个 Android 项目,然后在这个 Android 项目中导入 Flutter。...原创 2021-11-05 11:48:19 · 1630 阅读 · 0 评论 -
Flutter开发(二十六):列表下拉刷新上拉加载
1.下拉刷新官方提供了一个组件:RefreshIndicator ,可以实现下拉刷新,将它包裹在 ListView。里面有回调方法:onRefresh,松手会回调。示例代码:void main() { runApp(MyApp());}class MyApp extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState();}class _MyHomePa原创 2021-11-04 16:01:24 · 547 阅读 · 0 评论 -
Flutter开发(二十五):GridView实现网格布局
这个控件在 Android 中也有,具体使用:void main() { runApp(MyApp());}class MyApp extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState();}class _MyHomePageState extends State<MyApp> { List<String> NAMES = [原创 2021-11-04 15:39:30 · 287 阅读 · 0 评论 -
Flutter开发(二十四):ExpansionTile可展开列表
利用 ExpandionTile 可以实现可以展开收起的列表。这是里面的构造方法: const ExpansionTile({ Key? key, this.leading,//标题左侧展示 required this.title,//展示标题的widget this.subtitle, this.onExpansionChanged,//展开收起回调函数 this.children = const <Widget>[],//展开是显示原创 2021-11-04 15:28:17 · 1327 阅读 · 0 评论 -
Flutter开发(二十三):ListView垂直和水平滚动
ListView 作为一个常用组件,需要经常联系,下面是垂直滚动:void main() { runApp(MyApp());}class MyApp extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState();}class _MyHomePageState extends State<MyApp> { List<String>原创 2021-11-04 11:42:28 · 1535 阅读 · 0 评论 -
E/flutter (11319): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: MissingPluginEx
SharedPreferences 使用报错,如下:E/flutter (11319): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)我用的版本是shared_preferenc原创 2021-11-03 18:06:36 · 3246 阅读 · 0 评论 -
Flutter开发(二十二):Flutter本地数据存储
1.shared_perferences 简单介绍2.shared_perferences 简单使用3.shared_perferences 简单 demoshared_perferences 这个并不陌生,Android 也用到这个存储方式。1.shared_perferences 简单介绍它是一个简单异步存储插件,使用 key-value 来存储。2.shared_perferences 简单使用添加依赖,然后点击Pub get: shared_prefe.原创 2021-11-03 18:04:58 · 1592 阅读 · 0 评论 -
Flutter开发(二十二):Flutter中JSON转换
1.JSON 序列化方式2.JSON 序列化3.解析复杂 JSON4.在线转换 JSON TO Dart1.JSON 序列化方式手动序列化和插件:json_serializable和built_value2.JSON 序列化利用上一节的代码可以看出来,解析一个简单的 model 类,里面只有几个字段:...result = json.decode(response.body);CommonModel model = CommonModel.fromJson(re原创 2021-11-03 17:24:56 · 1558 阅读 · 0 评论 -
Flutter开发(二十一):Flutter中Future与FutureBuilder
Future与FutureBuilder原创 2021-11-03 16:45:57 · 1394 阅读 · 0 评论 -
Flutter开发(二十):Flutter网络请求Http
1.Http 的 get 请求2.Http 的 post 请求3.将 response 转换成 Dart 中的 object4.请求结果展示首先将 http 插件导入,添加依赖:http: ^0.12.0+1导入包:import 'package:http/http.dart' as http;1.Http 的 get 请求 Future<http.Response> fetchPost(){ return http.get('http原创 2021-11-02 09:37:45 · 1149 阅读 · 1 评论 -
Flutter开发(十九):Flutter自定义AppBar滚动渐变
将 ListView 中的 padding 移除。在ListView 中,即使控件在最上面,距离上面也有一部分距离,为了移除上面的距离,使用MediaQuery.removePadding 来操作。具体代码如下: @override Widget build(BuildContext context) { return Scaffold( body: MediaQuery.removePadding( removeTop: true, ...原创 2021-11-01 18:38:19 · 985 阅读 · 0 评论 -
Flutter开发(十八):Flutter轮播图Banner开发
实际开发中,广告轮播图是必不可少的,下面就用插件来实现一下。效果图如下:添加插件: flutter_swiper: ^1.1.6导入包:import 'package:flutter_swiper/flutter_swiper.dart';添加代码,代码中有注释,图片适配,自动轮播,设置指示器等:void main() { runApp(MyApp());}class MyApp extends StatelessWidget { const MyA..原创 2021-11-01 16:43:17 · 418 阅读 · 0 评论 -
Flutter开发(十七):Flutter首页导航的框架
首页框架搭建,类似于上一节的,底部导航,不过是规范了写法,效果图如下:首先创建了五个 dart 文件:tab_navigator.dart (总页面) 、home_page.dart (首页) 、my_page.dart (我的) 、search_page.dart (搜索)和 travel_page.dart(发现)。项目结构如下图:tab_navigator.dart 的代码:import 'package:flutter/material.dart';import 'packa原创 2021-11-01 16:13:26 · 666 阅读 · 0 评论 -
Flutter开发(十六):Flutter顶部导航、底部导航与侧拉菜单
1.APP 首页框架搭建2.轮播图 Banner 开发3.自定义 AppBar 滚动渐变1.APP 首页框架搭建实现导航需要用到 Scaffold 和 BottomNavigationBar ,PageView 和 PageController。Scaffold widget 是实现了基本的 material design 的布局结构。里面包括了常用的标题 appBar ,内容 body,侧拉 drawer。示例代码:void main() { runApp(MyApp原创 2021-11-01 11:55:12 · 2541 阅读 · 0 评论 -
Flutter开发(二):Flutter入门基础
注释:下面 RV 代表 React Native,下面命令行都是在终端输入。创建 Flutter 项目//创建rv项目create-react-native-app <projectname>//创建flutter项目flutter create <projectname> 或者打开 AndroidStudio ,选择 File - New - New Flutter Project...运行 Flutter 项目//运行rv项目re...原创 2021-10-31 23:29:39 · 231 阅读 · 0 评论 -
Flutter开发(十五):Flutter动画基础
1.哪些类型动画2.添加动画3.为动画添加监听器4.AnimatedWidget 与 AnimatedBuilder5.Hero动画1.哪些类型动画大概分为两类:基于 tween 和基于物理。tween 动画就是补间动画,定义开始点和结束点、时间线和定义转化时间和速度的曲线。基于物理的动画:就是模拟真实世界。比如扔个球,会做抛物线,然后弹了几下。2.添加动画几个常见类:Animation : 动画库核心,生成指导动画的值。CurvedAnimation原创 2021-10-31 22:37:43 · 738 阅读 · 0 评论 -
Flutter The argument type ‘Listenable‘ can‘t be assigned to the parameter type ‘Animation<double>
在该build方法的第一行,生成此分析器警告A value of type 'Listenable' can't be assigned to a variable of type 'Animation<double>'.Try changing the type of the variable, or casting the right-hand type to 'Animation<double>'.dart(invalid_assignment)应该修改为:原创 2021-10-31 21:14:31 · 1220 阅读 · 0 评论 -
Flutter LateInitializationError: Field ‘animationStatus‘ has not been initialized。
Flutter 开发遇到错误:LateInitializationError: Field 'animationStatus' has not been initialized。原因是在初始化之前使用了它,我解决这个问题方法是为 AnimationStatus 添加了一个初始状态。late AnimationStatus animationStatus = AnimationStatus.reverse;有 bug 的代码:void main() { runApp(MyApp()原创 2021-10-31 20:33:04 · 10830 阅读 · 0 评论 -
Flutter开发(十四):Flutter图片控件
1.ImageFlutter 中的图片控件是 Image ,支持下面几种类型的构造函数:new Image 从ImageProvider获取图片new Image.asset 使用key从AssetBundle获取图片new Image.network 从网络获取图片new Image.file 本地文件获取图片new Image.memory 从Uint8List获取图片支持的图片类型:JPEG, PNG...原创 2021-10-31 19:29:25 · 796 阅读 · 0 评论 -
flutter Cannot open file, path = ‘.../test.jpg‘ (OS Error: Permission denied, errno = 13)
开发 flutter 遇到没权限问题,刚学不熟搞了半天,报错信息:Cannot open file, path = '/sdcard/test.jpg' (OS Error: Permission denied, errno = 13)1. 在 AndroidManigfest.xml 添加需要的权限,AndroidManigfest.xml 的位置:首先在 manifest 添加权限: <!-- Permissions options for the `stora.原创 2021-10-31 11:28:09 · 5004 阅读 · 0 评论 -
Flutter开发(十三):Flutter项目
实例项目https://github.com/flutter/flutter/tree/master/exampleshttps://github.com/flutter/sampleshttps://github.com/nisrulz/flutter-exampleshttps://github.com/iampawan/FlutterExampleApps原创 2021-10-29 17:07:12 · 159 阅读 · 0 评论 -
Flutter开发(十二):Flutter调用硬件,插件,第三方服务和平台通知
1.调用硬件和第三方服务Flutter 中调用硬件和第三方服务都通过集成插件来完成别人总结的插件库:https://blog.csdn.net/qq_38875767/article/details/111030299https://www.jianshu.com/p/406672d4a0cd真水原创 2021-10-29 16:10:33 · 1629 阅读 · 0 评论 -
Flutter开发(十一):Flutter表单输入与富文本
1.获取用户输入用户输入用 TextField 或 TextFormField 实现,通过 TextEditingContriller 获得用户输入。class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flu原创 2021-10-29 15:51:58 · 937 阅读 · 0 评论 -
Flutter开发(十):Flutter主题与处理文字
1.Text 自定义字体设置字体只需要在文件夹中放置字体文件,并在 pubspec.yaml 中引用它。这种方式不常用,目前对中文无效,了解就可以,fonts: -family:MyCustomFont fonts: - asset: fonts/MyCustomFont.ttf - style: italic @override Widget build(BuildContext context) { return Scaffold(原创 2021-10-29 14:44:32 · 283 阅读 · 0 评论 -
Flutter开发(九):Flutter手势检测和触摸事件
1.给 wiget 添加点击事件前面的文章在 ListView 中已经添加过 item 点击处理,外层包裹 GestureDetector ,调用里面的 onTap() 方法。添加点击事件有两种方法:如果 widget 本身支持事件检测,比如 RaisedButton widget 里面有 onPressed 参数。另一种是 widget 不支持事件检测,外层包裹 GestureDetector ,调用里面的 onTap() 方法。第一种方法代码示例: @override原创 2021-10-29 14:17:04 · 751 阅读 · 0 评论 -
Flutter开发(八):Flutter线程与异步UI
1.异步代码在 Android 中,不开线程,所有代码都走主线程执行;在 Flutter 也是一样,不开线程,Dart 代码永远主线程执行。我们可以通过 async / await 来实现异步操作,比如网络请求: loadData() async { String url="https://xx"; http.Response response = await http.get(url); setState(() { widgets = json.deco原创 2021-10-29 12:06:57 · 1774 阅读 · 0 评论