Flutter使用小技巧一(持续更新)
Flutter使用小技巧三(持续更新...)
- Row 直接包裹 TextField 异常:BoxConstraints forces an infinite width
- Expanded、Flexible区别
- Android无法访问http
- IOS无法访问http
- 获取当前系统Locale
- ClipRRect 圆角无效
- 箭头函数不要写多行,否则报错
- StatefulWidget 构造传参数
- No MediaQuery ancestor could be found?
Row 直接包裹 TextField 异常:BoxConstraints forces an infinite width
//使用Flexible包裹
Row(
children: [
Flexible(
child: new TextField(),
),
],
),
Expanded、Flexible区别
Flexible
是一个控制Row
、Column
、Flex
等子组件如何布局的组件。Flexible
组件可以使Row
、Column
、Flex
等子组件在主轴方向有填充可用空间的能力(例如,Row
在水平方向,Column
在垂直方向),但是它与Expanded
组件不同,它不强制子组件填充可用空间Row
、Column
、Flex
会被Expanded
撑开,充满主轴可用空间。Expanded
文章图片
代码
body: new Row(
children: [
new RaisedButton(
onPressed: () {
print('点击红色按钮事件');
},
color: const Color(0xffcc0000),
child: new Text('红色按钮'),
),
new Expanded(
flex: 1,
child: new RaisedButton(
onPressed: () {
print('点击黄色按钮事件');
},
color: const Color(0xfff1c232),
child: new Text('黄色按钮'),
),
),
new RaisedButton(
onPressed: () {
print('点击粉色按钮事件');
},
color: const Color(0xffea9999),
child: new Text('粉色按钮'),
),
]
),
Flexible
文章图片
代码
body: new Row(
children: [
new RaisedButton(
onPressed: () {
print('点击红色按钮事件');
},
color: const Color(0xffcc0000),
child: new Text('红色按钮'),
),
new Flexible(
flex: 1,
child: new RaisedButton(
onPressed: () {
print('点击黄色按钮事件');
},
color: const Color(0xfff1c232),
child: new Text('黄色按钮'),
),
),
new RaisedButton(
onPressed: () {
print('点击粉色按钮事件');
},
color: const Color(0xffea9999),
child: new Text('粉色按钮'),
),
]
),
Android无法访问http android11以及以后为了安全Android系统禁用了http的网络请求
需进行如下配置
- 创建
network_security_config.xml
. (res/xml) - 配置
...
IOS无法访问http 在
./ios/Runner/Info.plist
文件中添加如下
...
NSAppTransportSecurity
NSAllowsArbitraryLoads
获取当前系统Locale
import 'dart:ui';
window.locale
ClipRRect 圆角无效 问题代码:
_item(index) {
return ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: Container(
margin: const EdgeInsets.all(8.0),
color: Colors.primaries[Random().nextInt(Colors.primaries.length)],
height: 120,
child: Center(
child: Text(
index.toString(),
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 18),
),
),
),
);
分析:由于
ClipRRect
内部被Container
设置了margin
导致的,我们将margin去除就会看到圆角,如果非要加个margin
则需要外层再包裹个Container
,并且color只能有最外层提供。_item(index) {
return Container(
margin: const EdgeInsets.all(8.0),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: Container(
color: Colors.primaries[Random().nextInt(Colors.primaries.length)],
height: 120,
child: Center(
child: Text(
index.toString(),
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 18),
),
),
),
),
);
}
箭头函数不要写多行,否则报错 StatefulWidget 构造传参数
class UserTextField extends StatefulWidget {
final TextEditingController? controller;
final Widget? icon;
final String? hintText;
final bool obscureText;
const UserTextField(
{Key? key,
this.controller,
this.icon,
this.hintText,
this.obscureText = false})
: super(key: key);
@override
//如果State构造加入参数会提示警告信息:Don't put any logic in createState
_UserTextFieldState createState() => _UserTextFieldState();
}
解决办法:
_UserTextFieldState
无需在构造中添加参数- 只需要使用
widget.xx
调用即可
class _UserTextFieldState extends State {
@override
Widget build(BuildContext context) {
return Container(
height: 56.0,
margin: const EdgeInsets.only(top: 20.0),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(7.0), color: Colors.white),
padding: const EdgeInsets.only(left: 20.0),
child: TextField(
controller: widget.controller,
maxLines: 1,
//是否是密码
obscureText: widget.obscureText,
style: const TextStyle(
fontSize: 17.0,
fontFamily: 'QuicksandMedium',
color: Color(0xFF4b4b4b)),
decoration: InputDecoration(
border: InputBorder.none,
icon: widget.icon,
hintText: widget.hintText,
),
),
);
}
}
No MediaQuery ancestor could be found? 【Flutter|Flutter使用小技巧三(持续更新)】No MediaQuery ancestor could be found?
void main() => runApp(const MaterialApp(home: HomePage()));
推荐阅读
- Flutter|Flutter Hero 实现共享元素转场动画
- flutter使用记录|flutter 问题记录
- Flutter|Flutter开发中的一些小技巧整理
- 程序员|Flutter 10天高仿大厂App及小技巧积累总结,被阿里面试官征服了
- Flutter|【Flutter】Android原生WebView(非Flutter WebView)与FlutterWeb交互
- 程序员|Flutter(实战技巧,最新阿里Android高级面试题及答案)
- Android开发|Flutter 小技巧之 MediaQuery 和 build 优化你不知道的秘密
- java|第十六课(Android打包发布)
- Android getActionBar() 返回null