人生处万类,知识最为贤。这篇文章主要讲述颤动 - 接收通知时更改appbar图标相关的知识,希望能为你提供帮助。
我正在使用FirebaseMessaging在我的应用上推送通知。
所以我可以使用以下代码处理这些通知:
firebaseMessaging.configure(
onLaunch: (Map<
String, dynamic>
msg) {
print("onLaunch called");
}, onResume: (Map<
String, dynamic>
msg) {
print("onResume called");
}, onMessage: (Map<
String, dynamic>
msg) {
print("onMessage called : " + msg.toString());
});
当我收到通知时,我想在我的appbar中的我的图标上显示这个小'1'
文章图片
我的问题是:我不知道如何在我的appbar上为所有页面动态更改我的铃声图标(我不能在我的appbar中调用setState)
答案我认为解决您的问题非常简单,您只需要使用有状态类和自定义图标:
Widget myAppBarIcon(){
return Container(
width: 30,
height: 30,
child: Stack(
children: [
Icon(
Icons.notifications,
color: Colors.black,
size: 30,
),
Container(
width: 30,
height: 30,
alignment: Alignment.topRight,
margin: EdgeInsets.only(top: 5),
child: Container(
width: 15,
height: 15,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Color(0xffc32c37),
border: Border.all(color: Colors.white, width: 1)),
child: Padding(
padding: const EdgeInsets.all(0.0),
child: Center(
child: Text(
_counter.toString(),
style: TextStyle(fontSize: 10),
),
),
),
),
),
],
),
);
}
之后您可以在应用栏上添加此图标(引导或操作)。正如您所看到的,当我开始一个新的Flutter项目时,我用作触发示例代码的任何触摸时,Text值会发生变化,它包含一个方法来计算触摸浮动按钮并更改状态的次数:
void _incrementCounter() {
setState(() {
_counter++;
});
}
我希望这可以帮助你
this is my example
另一答案你可以创建IconData类型的变量并改变它的值。通过下面的例子,你会对此有更多的了解。
import'package:flutter / material.dart';
void main() =>
runApp(MyHome());
class MyHome extends StatefulWidget {
@override
_MyHomeState createState() =>
_MyHomeState();
}class _MyHomeState extends State<
MyHome>
{IconData _iconData= https://www.songbingjia.com/android/Icons.notifications;
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primaryColor: Color(0xffFF5555),
),
home: Scaffold(
appBar: new AppBar(
title: new Text("Title"),
actions: <
Widget>
[
Icon(_iconData)
],
),
body: Center(
child: new Text("Demo")
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.check_circle_outline),
onPressed: (){
if(_iconData =https://www.songbingjia.com/android/= Icons.notifications){
setState(() {
_iconData = Icons.notifications_active;
});
}else{
setState(() {
_iconData = Icons.notifications;
});
}
}
),
),
);
}
}
另一答案您必须创建自定义drawable并将其设置为Appbar图标,您必须将数字绘制为自定义drawable中的文本。这已在以下链接中为您完成。
How to make an icon in the action bar with the number of notification?
另一答案通知徽章背后的基本理念
【颤动 - 接收通知时更改appbar图标】使用Stack和Positioned小部件,我们可以将Text小部件堆叠在IconButton上以显示通知标记。
appBar: AppBar(
leading: IconButton(
icon: Icon(
_backIcon(),
color: Colors.black,
),
alignment: Alignment.centerLeft,
tooltip: 'Back',
onPressed: () {},
),
title: Text(
"Title",
style: TextStyle(
color: Colors.black,
),
),
backgroundColor: Colors.white,
actions: <
Widget>
[
IconButton(
tooltip: 'Search',
icon: const Icon(
Icons.search,
color: Colors.black,
),
onPressed: _toggle,
),
new Padding(
padding: const EdgeInsets.all(10.0),
child: new Container(
height: 150.0,
width: 30.0,
child: new GestureDetector(
onTap: () {
},
child: Stack(
children: <
Widget>
[
new IconButton(
icon: new Icon(
Icons.shopping_cart,
color: Colors.black,
),
onPressed: () {}),
ItemCount == 0
? new Container()
: new Positioned(
child: new Stack(
children: <
Widget>
[
new Icon(Icons.brightness_1,
size: 20.0, color: Colors.orange.shade500),
new Positioned(
top: 4.0,
right: 5.0,
child: new Center(
child: new Text(
ItemCount.toString(),
style: new TextStyle(
color: Colors.white,
fontSize: 11.0,
fontWeight: FontWeight.w500),
),
)),
],
)),
],
),
),
),
)
],
),
推荐阅读
- 如何摆脱问题'二进制XML文件第8行(二进制XML文件第8行:使用XYPlot时会膨胀类com.androidplot.xy.XYPlot类])
- 如何在visual studio解决方案中查看app.config或web.config中对键的所有引用/调用()
- 我无法在Visual Studio 2017中创建android密钥库
- 如何以编程方式从Android上的渐变中获取颜色列表
- 在C#winform app上运行时CRUD ConnectionStrings
- React App无法正确呈现
- 如何在UL中迭代使用appendChild和片段LI()
- HTML5开发人员最常犯的5个错误(新手指南)
- Web开发人员最常犯的10个错误(开发人员教程)