组件切换_Flutter Theme Widget(主题组件)简单自定义及切换

本文介绍了Flutter中的Theme Widget,用于在应用中设定和切换颜色、字体等主题风格。通过示例展示了如何实现主题组件的自定义和切换效果,包括导航栏颜色、标题字体和Icon样式等。提高Flutter学习效率,推荐官方中文学习资源:https://flutter-io.cn/ 和 https://flutterchina.club/docs。
摘要由CSDN通过智能技术生成
8292bd6861193cce1a931930a3c5102b.png

Theme

主题即在我们的应用程序中共享颜色和字体样式,比如导航栏颜色、标题字体、Icon样式等

实现

import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: ThemeTestRoute(), ); }}class ThemeTestRoute extends StatefulWidget { @override _ThemeTestRouteState createState() => new _ThemeTestRouteState();}class _ThemeTestRouteState extends State { Color _themeColor = Colors.teal; //当前路由主题色 @override Widget build(BuildContext context) { ThemeData themeData = Theme.of(context); return Theme( data: ThemeData( primarySwatch: _themeColor, //用于导航栏、FloatingActionButton的背景色等 iconTheme: IconThemeData(color: _themeColor) //用于Icon颜色 ), child: Scaffold( appBar: AppBar(title: Text("主题测试")), body: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ //第一行Icon使用主题中的iconTheme Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.favorite), Icon(Icons.airport_shuttle), Text(" 颜色跟随主题") ] ), //为第二行Icon自定义颜色(固定为黑色) Theme( data: themeData.copyWith( iconTheme: themeData.iconTheme.copyWith( color: Colors.black ), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.favorite), Icon(Icons.airport_shuttle), Text(" 颜色固定黑色") ] ), ), ], ), floatingActionButton: FloatingActionButton( onPressed: () => //切换主题 setState(() => _themeColor = _themeColor == Colors.teal ? Colors.blue : Colors.teal ), child: Icon(Icons.palette) ), ), ); }}

切换效果:

370768f95a049d0c4b4a3f9088ea9b50.png

046E7A8F9E9A4A3CEBEB7320BEBED4DB.png

86bd1675ebbdd04d2aa4d151b77a7275.png

DDDCA881D7232645024A2CA9D51BD6AD.png

summary

学习效率愈加下降,看来还是需要从官方文档啃着走,推荐一个官方中文Flutter网站:

https://flutter-io.cn/ 上面有许多中文学习资源:

cf40d807effb5fad3b05f52eb973ad18.png

image.png

当然中文文档(https://flutter-io.cn/docs)目前的开发几乎没有开始,只是翻译了个目录,所以中文文档还是可以看Flutter中文网:https://flutterchina.club/docs/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值