Flutter开发中的Tips

2020-11-26  本文已影响0人  peterXpq

1、Container 默认是居中,可以设置方向

alignment: Alignment.centerLeft,

3、ListView 外面嵌套Expand

4、在Row 中 添加

Expanded(
child: SizedBox.shrink(),
),
可以使 后面的Widget 放在最后,相当于Android 的 右对齐


mainAxisAlignment: MainAxisAlignment.spaceBetween,
 可以让 Row 中的两个子布局 分别排布在两头

5、判断List 是否为空

List list=List();
list.isEmpty() 判断集合为空
list.isNotEmopty()判断集合不为空

6、Colum 垂直布局

水平方向 靠左对齐===》CrossAxisAligment.start

7.Dart 动态解析key-value

1. 原始数据为Map<String,dynamic> 类型
2.原始数据就是json字符串,需要转化为1的类型
下面贴出来要解析的数据:

8、GestureDetector 点击空白区域 没有点击效果;

解决办法:GestureDetector(
    behavior: HitTestBehavior.opaque,
    onTap: (){
      NavigatorUtils.gotoObjectDetail(context, data.objKey);
  }
 );

9.Colum 竖直布局 对齐方式

crossAxisAlignment: CrossAxisAlignment.start,

10.CustomScrollView 嵌套 ListView 如何让ListView区域不滚动?

    physics: NeverScrollableScrollPhysics()==> 不滚动
    BouncingScrollPhysics() ==>IOS 效果
    ClampingScrollPhysics() ==>Android 效果
    FixedExtentScrollPhysics () ==>固定范围内的滚动效果

11、字符串中要加空格,怎么加?

  String string ='哈哈\t你好啊'
  String name='${property.name+'\t'+男生}'

12、时间戳格式化?

第三方视频播放器

chewie: ^0.9.10

14、记录报错:

Cleartext HTTP traffic to 192.168.12.18 not permitted
原因:
Android P(9.0)及以上要求App内链接全部加密(https),使用明文链接会报以下错误:
Cleartext HTTP traffic to 192.168.12.18 not permitted
办法:
在安卓的清单文件中,添加如下一行:
android:usesCleartextTraffic="true"

15、TabBarView 每次切换都会重新走initState()

解决办法:
with AutomatickeepAliveClientMixin 
重写方法:
@override
bool get wantKeepAlive => true
也用在保持页面状态,当新开页面返回时,页面会刷新,也可用此方法

16.字符串比较

1、Comparable.compare(str1,str2)==0  表明相等
2、str1==str2 

17.用户点击展示“水波纹”效果 InkWell

18.Container 添加外部描边 和 圆角 ShapeDecration

Container(
  height: 30,
  decoration: ShapeDecoration(
  color: MyColors.color_1246FF,
  shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(7),)),
  margin: EdgeInsets.only(left: 10, right: 10, bottom: 10),
  child: Center(
    child: Text(
      '复制到剪切板',
      style: TextStyle(color: MyColors.white, fontSize: 16),
     ),
  ),
)

19.粘贴板操作

 1、复制内容到粘贴板
Clipboard.setData(ClipboardData(text: 'templateString'));

2、获取粘贴板的内容 (异步调用)
onTap: () async {
  print('获取粘贴板的数据');
  ClipboardData data =
    await Clipboard.getData(Clipboard.kTextPlain);
  if (data != null) {
        setState(() {
          this.barcode = data.text;
    });
  }
},

3、清除粘贴板的内容

因为不像Android那样,有clear 方法,所以只能赋值空字符串:
Clipboard.setData(ClipboardData(text: ''));

20、限制输入框为数字

TextField(
      inputFormatters: [
                       WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")),//只允许输入字母
      ],
 ),
 TextField(
      inputFormatters:[WhitelistingTextInputFormatter.digitsOnly],//只允许输入数字
 ),
TextField(
      inputFormatters: [
                        WhitelistingTextInputFormatter(RegExp("[0-9.]")),//只允许输入小数
                      ],
)
  keyboardType: TextInputType.number,/// 数字   结合上面 
  /// 不显示下面的横线
 decoration: InputDecoration(border: InputBorder.none),

21、as is

as  类型转换
is  当对象是相应类型时返回true;  相当于java => instance of 
is! 当对象不是相应类型时返回true

示例:
if(user is User){
    user.name='Flutter'
 }
/// 如果确定user 是User的实例,则可以通过as 直接简化代码
(user as User).name='Flutter';、

注意:上面两段代码并不相等,当user的值为null 或者不是User 对象,
第一段不会做任何事情,但第二段会报错;

22、退出栈中的多个路由

PopUtil

23、Eventbus 的应用 相互传值

24、控制显示的控件

bool isVisibily=true;
Offstage(
  offstage:isVisibily,
  child:Widget()
)
* 默认是不显示

26、GridView 图文上下排列 宽高的问题?
暂时还没解决办法,都是写死的宽高比例,不能像Android 那样,wrap_content ,高度自适应

28、调用相机 IOS 需要添加权限 勿忘

29、Future<int> 转化为 int

Future<int> Function()' can't be assigned to the parameter type 'num'
比如:Future<int> length =file.length;
num size = await length; 

30、上传文件,二进制传输

一般: 'application/x-www-form-urlencoded' 
要变为:需要使用multipart/form-data格式来上传文件
结论:已实现,后续补充Demo

32、解决SmartRefresher +ListView / GridView 图片闪烁的问题

1、首先 需要在主页面 继承 AutomaticKeepAliveClientMixin,
 复写: @override
bool get wantKeepAlive => true;
2、将Item 作为一个单独组件封装起来,并 重复上面的步骤 
3、展示图片的控件需要用 Cache的NetworkImage 

完成上面3步,在列表滚动的时候,可见item再次可见的时候图片不会重新加载,
打开新页面返回的时候图片也能保持住状态,不会重新加载了!

33、Hero 动画 包裹的组件不能是整个列表的Item,

1、如果全部包裹,返回当前页面会报页面越界的报错
2、正确的做法是 只包裹需要动画的组件,比如说只包裹图片

34、Flex 布局 中 Expand 如何添加间距(Margin)?

上一篇下一篇

猜你喜欢

热点阅读