2.进入源码看看:
貌似都是静态常量,核心在unicode,如
0xe577
,还有就是字体(MaterialIcons
)
/// * design.google.com/icons
class Icons {
Icons._();
// Generated code: do not hand-edit.
// See https://github.com/flutter/flutter/wiki/Updating-Material-Design-Fonts
// BEGIN GENERATED
/// 360 — material icon named “360”.
static const IconData threesixty = IconData(0xe577, fontFamily: ‘MaterialIcons’);
/// 3d_rotation — material icon named “3d rotation”.
static const IconData threed_rotation = IconData(0xe84d, fontFamily: ‘MaterialIcons’);
/// 4k — material icon named “4k”.
static const IconData four_k = IconData(0xe072, fontFamily: ‘MaterialIcons’);
3.怎么才能自定义字体图标
玩前端的应该都知道:还是进入阿里图标神库:iconfont
4.根据Flutter内置的类,我写了一个自动代码生成器
虽然直接也能用,不够要记住图标的unicode码,算了,还是跟Flutter看齐吧
注意:为了简单使用:拷贝到的位置,命名,请务必和下面保持一致
!保持一致
!
把两个文件拷贝到对应处,icon_by_toly.dart
写好(在下面),右键运行就自动生成iconfont.dart
了
代码生成器:icon_by_toly.dart
import ‘dart:io’;
main() {
var result = “”"import ‘package:flutter/widgets.dart’;
//Power By 张风捷特烈— Generated file. Do not edit.
class TolyIcon {
TolyIcon._();
“”";
var fileCss = File.fromUri(Uri.parse(“${Uri.base}iconfont/iconfont.css”));
if (!fileCss.existsSync()) {
return;
}
var read = fileCss.readAsStringSync();
var split = read.split(“.icon-”);
split.forEach((str) {
if (str.contains(“before”)) {
var split = str.split(“:”);
result += “static const IconData " +
split[0].replaceAll(”-“, “_”) +
" = const IconData(” +
split[2].replaceAll(“”\“, “0x”).split(”“”)[0] +
“, fontFamily: “TolyIcon”);\n”;
}
});
result+=“}”;
fileCss.delete();
var fileOut = File.fromUri(Uri.parse(“${Uri.base}lib/iconfont.dart”));
fileOut.writeAsStringSync(result);
var config=“”"
fonts:
- family: TolyIcon
fonts: - asset: iconfont/iconfont.ttf
“”“;
var yaml = File.fromUri(Uri.parse(”${Uri.base}pubspec.yaml"));
if (yaml.readAsStringSync().contains(“TolyIcon”)) {
return;
}
yaml.writeAsString(config,mode: FileMode.append);
}
pubspec.yaml
的flutter标签下也会自动生成配置:
fonts:
- family: TolyIcon
fonts: - asset: iconfont/iconfont.ttf
Icon(TolyIcon.icon_spring_boot)//颜色可自行处理
友情提示:下载之前最好把图标名字改一下,不然之后找起来费劲
如果实在不想该,可以点击这里查看名字和图标的对应情况
二、综合小案例
1.初始代码:主页面:android_stack.dart
import ‘package:flutter/material.dart’;
class AndroidPage extends StatefulWidget {
@override
_AndroidPageState createState() => _AndroidPageState();
}
class _AndroidPageState extends State
with SingleTickerProviderStateMixin {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
var scaffold = Scaffold(
appBar: AppBar(
title: Text(“张风捷特烈”),
),
body: Container(),
floatingActionButton: FloatingActionButton(
onPressed: () {
},
tooltip: ‘Increment’,
child: Icon(Icons.add),
),
);
return scaffold;
}
}
2.拼接底部条
2.1:常量的准备:(为了方便使用或修改)
class ItemBean {
Color color;
IconData iconId;
String info;
ItemBean(this.color, this.iconId, this.info);
}
//底部栏图标信息
var iconLi=[
ItemBean(Color(0xff8FC552),TolyIcon.android,“Android”),
ItemBean(Color(0xff6BFB00),TolyIcon.icon_spring_boot,“SpringBoot”),
ItemBean(Color(0xff63DAFF),TolyIcon.react,“React”),
ItemBean(Color(0xffF3D861),TolyIcon.biji,“编程随笔”),
ItemBean(Color(0xff5CEBF2),TolyIcon.daima,“系列文章”)
];
2.2:底部栏:
//成员变量
int _curIndex = 0;
//底部栏
var bottomNavigationBar = BottomNavigationBar(
items: iconLi.map((item) {
return BottomNavigationBarItem(
title: Text(
item.info,
style: TextStyle(fontSize: 12, color: Colors.black),
),
icon: Icon(
item.iconId,
color: item.color,
),
backgroundColor: Color(0xffffffff));
}).toList(),
currentIndex: _curIndex,
onTap: _onTapBNB,
);
2.3:底部栏点击监听:_onTapBNB
//底部栏点击监听
void _onTapBNB(int position) {
_curIndex = position;
setState(() {});
}
3:页面条目:
第五天写了几个条目,现在拿来用(详细分析见第五天,这里不废话了)
静态填充 | 左侧滑栏 |
---|---|
![]() | ![]() |
3.1:左侧滑栏:left_draw.dart
class LeftDrawPage extends StatefulWidget {
@override
_LeftDrawPageState createState() => _LeftDrawPageState();
}
class _LeftDrawPageState extends State
with SingleTickerProviderStateMixin {
@override
Widget build(BuildContext context) {
//左边头像
var headImg3 = Image.asset(
“images/icon_90.png”,
width: 50,
height: 50,
);
//中间的信息
var center3 = Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
“张风捷特烈”,
style: bigStyle,
),
Row(
children: [
Icon(Icons.next_week, size: 15),
pd(Text(“创世神 | 无”), l: 5)
],
),
Row(
children: [
Icon(Icons.keyboard, size: 15),
pd(Text(“海的彼岸有我未曾见证的风采”), l: 5)
],
),
],
);
var rowLine3 = Row(
children: [
pda(headImg3, 5),
Expanded(child: pda(center3, 5)),
],
);
var test3 = Card(
child: Container(
height: 95,
color: Colors.white,
padding: EdgeInsets.all(5),
child: rowLine3));
return Drawer(
elevation: 5,
child: Container(
padding: EdgeInsets.only(top: 50),
alignment: AlignmentDirectional.topCenter,
color: Color(0xff99C6F9),
child: test3));
}
}
3.2:列表静态填充:home_list.dart
class HomeListPage extends StatefulWidget {
@override
_HomeListPageState createState() => _HomeListPageState();
}
class _HomeListPageState extends State {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
return renderItem(index);
},
);
}
renderItem(int index) {
-----------------测试4--------------------------------
var line1_4 = Row(
children: [
Image.asset(“images/icon_90.png”, width: 20, height: 20),
Expanded(
child: pd(Text(“张风捷特烈”), l: 5),
),
Text(
“Flutter/Dart”,
style: infoStyle,
)
],
);
var center_right = Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
“Flutter第4天–基础控件(下)+Flex布局详解”,
style: littelStyle,
maxLines: 2,
),
pd(
Text(
“1.2:优雅地查看:图片的适应模式–BoxFit1.3:优雅地查看:颜色混合模式–colorBlendMode”,
style: infoStyle,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
t: 5),
],
);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
最后
在此为大家准备了四节优质的Android高级进阶视频:
架构师项目实战——全球首批Android开发者对Android架构的见解
附相关架构及资料
往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
决问题。**
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算