Flutter - Как переместить кнопку значка изменения уведомлений со страницы настроек на панель приложений?
Я хотел бы перейти с моей кнопки уведомлений с экрана настроек на свою панель приложений, я также мог бы создать подходящую кнопку со значком, которая меняет значок на уведомления, когда вы нажимаете на нее.
Это моя иконка, которую я хотел бы добавить на свою панель приложений.
child: ClipOval(
child: Material(
color: Color(0xFF282C39),
child: InkWell(
splashColor: Colors.blue,
child: SizedBox(
width: 32,
height: 32,
child: Icon(
_notificationsEnabled ? Icons.notifications_active : Icons.notifications,
size: 20,
color: Colors.white)),
onTap: () {
setState(() {
_notificationsEnabled = !_notificationsEnabled;
_updateNotifications(_notificationsEnabled);
});
},
),
),
),
К сожалению, мне трудно правильно интегрировать функцию ""? Я скопировал строки своей страницы настроек и попытался их адаптировать, но в конечном итоге потерпел неудачу из-за "
Нижний код моей страницы настроек .... Я дошел до того, что он работает, я просто не могу здесь и в верхней части кнопки включить "
/// Checks are notifications enabled
Future<void> _areNotificationsEnabled() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
_notificationsEnabled =
prefs.getBool('isPushNotificationEnabled') ?? true;
});
}
/// Enables or disables notifications
Future<void> _updateNotifications(bool enabled) async {
Magazin.of(context)!.setSubscription(enabled);
}
}
Это заголовок моей страницы настроек ...
class SettingsScreen extends StatefulWidget {
@override
_SettingsScreenState createState() => _SettingsScreenState();
}
class _SettingsScreenState extends State<SettingsScreen> {
bool _notificationsEnabled = false;
@override
void initState() {
super.initState();
_areNotificationsEnabled();
}
И эта строка находится на моей странице настроек в разделе панели приложений, я думаю, я могу понять, что эта часть все еще актуальна, но я не интегрирую ее в код моей панели приложений ...
appBar: MagazinAppBar(
actions: [],
),
Это головная часть моего кода приложения, вплоть до того момента, когда я наконец хочу вставить кнопку ... вместо экрана настроек кнопка со значком включения / выключения уведомлений должна быть в конце ...
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
import '../MagazinIcons.dart';
import '../config.dart';
import '../helpers/search.dart';
import '../main.dart';
import '../screens/settings_screen.dart';
class MagazinAppBar extends StatelessWidget implements PreferredSizeWidget {
final SearchDemoSearchDelegate _searchDelegate = SearchDemoSearchDelegate();
final String title;
final bool centerTitle;
final double elevation;
final PreferredSizeWidget? bottom;
final List<Widget> actions;
MagazinAppBar(
{this.title = Config.appTitle,
this.centerTitle = true,
this.elevation = 2.0,
this.bottom,
required this.actions})
: preferredSize = Size.fromHeight(
kToolbarHeight + (bottom?.preferredSize.height ?? 115)),
super();
@override
final Size preferredSize;
@override
Widget build(BuildContext context) {
bool isDark = Theme.of(context).brightness == Brightness.dark;
return PreferredSize(
preferredSize: Size.fromHeight(300),
child: Container(
height: 300,
child: Stack(
children: <Widget>[
Container(
color: Color(0xFF34445D),
height: 190,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 50,
child: Image.asset('images/appbarlogo.png'),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.only(right: 40),
child: ClipOval(
child: Material(
color: Color(0xFF282C39),
child: InkWell(
splashColor: Colors.blue,
child: SizedBox(width: 32, height: 32, child: Icon(Icons.settings, size: 20, color: Colors.white)),
onTap: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => SettingsScreen()),
),
),
),
),
),