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()),
                              ),
                            ),
                          ),
                        ),
                      ),

0 ответов

Другие вопросы по тегам