IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter自适应瀑布流,android设计模式面试题 -> 正文阅读

[移动开发]Flutter自适应瀑布流,android设计模式面试题

ff_annotation_route_library: any

http_client_helper: any

intl: any

like_button: any

loading_more_list: any

pull_to_refresh_notification: any

url_launcher: any

1.图片自适应:

Widget image = Stack(

children: [

ExtendedImage.network(

item.imageUrl,

shape: BoxShape.rectangle,

//clearMemoryCacheWhenDispose: true,

border: Border.all(color: Colors.grey.withOpacity(0.4), width: 1.0),

borderRadius: const BorderRadius.all(

Radius.circular(10.0),

),

loadStateChanged: (ExtendedImageState value) {

if (value.extendedImageLoadState == LoadState.loading) {

Widget loadingWidget = Container(

alignment: Alignment.center,

color: Colors.grey.withOpacity(0.8),

child: CircularProgressIndicator(

strokeWidth: 2.0,

valueColor:

AlwaysStoppedAnimation(Theme.of?.primaryColor),

),

);

if (!konwSized) {

//todo: not work in web

loadingWidget = AspectRatio(

aspectRatio: 1.0,

child: loadingWidget,

);

}

return loadingWidget;

} else if (value.extendedImageLoadState == LoadState.completed) {

item.imageRawSize = Size(

value.extendedImageInfo.image.width.toDouble(),

value.extendedImageInfo.image.height.toDouble());

}

return null;

},

),

Positioned(

top: 5.0,

right: 5.0,

child: Container(

padding: const EdgeInsets.all(3.0),

decoration: BoxDecoration(

color: Colors.grey.withOpacity(0.6),

border: Border.all(color: Colors.grey.withOpacity(0.4), width: 1.0),

borderRadius: const BorderRadius.all(

Radius.circular(5.0),

),

),

child: Text(

‘${index + 1}’,

textAlign: TextAlign.center,

style: const TextStyle(fontSize: fontSize, color: Colors.white),

),

),

)

],

);

if (konwSized) {

image = AspectRatio(

aspectRatio: item.imageSize.width / item.imageSize.height,

child: image,

);

} else if (item.imageRawSize != null) {

image = AspectRatio(

aspectRatio: item.imageRawSize.width / item.imageRawSize.height,

child: image,

);

}

return Column(

crossAxisAlignment: CrossAxisAlignment.start,

children: [

image,

const SizedBox(

height: 5.0,

),

buildTagsWidget(item),

const SizedBox(

height: 5.0,

),

buildBottomWidget(item),

],

);

}

2.自适应标签:

Widget buildTagsWidget(

TuChongItem item, {

int maxNum = 6,

}) {

const double fontSize = 12.0;

return Wrap(

runSpacing: 5.0,

spacing: 5.0,

children: item.tags.take(maxNum).map((String tag) {

final Color
color = item.tagColors[item.tags.indexOf(tag)];

return Container(

padding: const EdgeInsets.all(3.0),

decoration: BoxDecoration(

color: color,

border: Border.all(color: Colors.grey.withOpacity(0.4), width: 1.0),

borderRadius: const BorderRadius.all(

Radius.circular(5.0),

),

),

child: Text(

tag,

textAlign: TextAlign.start,

style: TextStyle(

fontSize: fontSize,

color: color.computeLuminance() < 0.5

? Colors.white
Colors.black),

),

);

}).toList());

}

3.上拉刷新和下拉加载

class PullToRefreshHeader extends StatelessWidget {

const PullToRefreshHeader(this.info, this.lastRefreshTime, {this.color});

final PullToRefreshScrollNotificationInfo info;

final DateTime lastRefreshTime;

final Color color;

@override

Widget build(BuildContext context) {

if (info == null) {

return Container();

}

String text = ‘’;

if (info.mode == RefreshIndicatorMode.armed) {

text = ‘Release to refresh’;

} else if (info.mode == RefreshIndicatorMode.refresh ||

info.mode == RefreshIndicatorMode.snap) {

text = ‘Loading…’;

} else if (info.mode == RefreshIndicatorMode.done) {

text = ‘Refresh completed.’;

} else if (info.mode == RefreshIndicatorMode.drag) {

text = ‘Pull to refresh’;

} else if (info.mode == RefreshIndicatorMode.canceled) {

text = ‘Cancel refresh’;

}

final TextStyle ts = const TextStyle(

color: Colors.grey,

).copyWith(fontSize: 13);

final double dragOffset = info?.dragOffset ?? 0.0;

final DateTime time = lastRefreshTime ?? DateTime.now();

final double top = -hideHeight + dragOffset;

return Container(

height: dragOffset,

color: color ?? Colors.transparent,

//padding: EdgeInsets.only(top: dragOffset / 3),

//padding: EdgeInsets.only(bottom: 5.0),

child: Stack(

children: [

Positioned(

left: 0.0,

right: 0.0,

top: top,

child: Row(

mainAxisAlignment: MainAxisAlignment.center,

crossAxisAlignment: CrossAxisAlignment.center,

children: [

Expanded(

child: Container(

alignment: Alignment.centerRight,

child: RefreshImage(top),

margin: const EdgeInsets.only(right: 12.0),

),

),

Stack(

children: [

Positioned(

left: 0.0,

right: 0.0,

top: top,

child: Row(

mainAxisAlignment: MainAxisAlignment.center,

crossAxisAlignment: CrossAxisAlignment.center,

children: [

Expanded(

child: Container(

alignment: Alignment.centerRight,

child: RefreshImage(top),

margin: const EdgeInsets.only(right: 12.0),

),

),

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:43:51  更:2022-02-01 20:43:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:31:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码