SnackBar无论是用法还是功能使用几乎都跟原生Android一样 ,唯一有一点需要留意的是在Scaffold.of(context).showSnackBar()
中传递的context
必须不能是Scaffold
下面的Context
原因解释
因为Scaffold.of()
方法需要从Widget树中去找到Scaffold的Context,所以如果直接在Scaffold中使用showSnackBar,需要在外面包裹上Builder Widget,这个Builder不做任何的其他操作,只不过把Widget树往下移了一层而已。
SnackBar的效果图,你会发现跟原生Android如出一辙。
示例代码
import 'package:flutter/material.dart';
class SnackBarTest extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SnackBar示例'),
),
body: Center(
child: Text(
'SnackBar示例',
style: TextStyle(fontSize: 28.0),
),
),
floatingActionButton: new Builder(builder: (BuildContext context) {
return new FloatingActionButton(
child: const Icon(Icons.add),
onPressed: () {
//点击回调事件 弹出一句提示语句
Scaffold.of(context).showSnackBar(new SnackBar(
content: new Text("显示SnackBar"),
));
},
shape: new CircleBorder(),
);
}),
floatingActionButtonLocation:
FloatingActionButtonLocation.endFloat, //居中放置 位置可以设置成左中右
);
}
}