本帖是为了开发做的一个备忘,随时不定期更新。
获取设备宽高
1 2
| double width = MediaQuery.of(context).size.width; double height = MediaQuery.of(context).size.height;
|
开启android沉浸式
判断是否为安卓设备必须添加,要不然会导致ios崩溃。
1 2 3 4 5 6 7 8 9 10
| void main() { runApp(App()); if (Platform.isAndroid) { SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.transparent); SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); } }
|
AppBar标题居中和去掉AppBar下侧阴影
1 2 3 4 5 6 7
| Widget _tabbar(BuildContext context) { return AppBar( ... centerTitle: true, elevation: 0.0, ); }
|
有状态组件一定要使用createState
1 2 3 4 5 6 7 8 9 10
| class HomeScreen extends StatefulWidget { const HomeScreen();
@override _HomeScreenState createState() => _HomeScreenState(); }
class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateMixin { }
|
使用ios的动画交互 和 MaterialApp 主题颜色配置不生效的问题
检查是否存在子级MaterialApp。如果有子级MaterialApp请删除,保证全局只有一个MaterialApp,theme就会生效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class App extends StatelessWidget { final store = createStore();
@override Widget build(BuildContext context) { return StoreProvider<AppState>( store: createStore(), child: MaterialApp( theme: ThemeData( platform: TargetPlatform.iOS, primaryColor: Colors.red, accentColor: Colors.red, ), routes: <String, WidgetBuilder>{ '/': (BuildContext context) => HomeScreen(), }, ), ); } }
|
使用ListView.builder 出现无限加载的问题,和debug报错的问题。
报错是因为视窗builder的item加五个之后,超出了数据list的长度,造成了下标越界。
无限加载是因为,没有限制render长度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @override Widget build(BuildContext context) { return Container( child: ListView.builder( padding: const EdgeInsets.all(16.0), itemBuilder: (BuildContext context, int index) { print(index); if (index < _suggestions.length) { return _listViewItem('$index'); } }, ), ); }
|