Flutter - изменение панели приложений при длительном нажатии с помощью материала

Я пытаюсь делать такие вещи с Flutter: https://storage.googleapis.com/spec-host-backup/mio-design%2Fassets%2F0B3T7oTWa3HiFcHBDaTlreHdVZGc%2Fitem-selection-selecting-items.

var gestureTemp = GestureDetector(
    onLongPress: (){
      print('LONG PRESSED');
      //CHANGE APPBAR
    },
    child: Padding(
        padding: EdgeInsets.only(right:8),
        child: Chip(
            avatar: CircleAvatar(
                backgroundColor: Colors.grey.shade800,
                child: icon
            ),
            label: Text(space.label, style: TextStyle(fontSize: 12, color:Colors.grey.shade800))
    ),
  ));

Он обнаруживает долгое нажатие, но я не знаю, как изменить свою панель приложений ...

Любые идеи ?

РЕДАКТИРОВАТЬ: вот что я делаю

var appBar1 = AppBar(...);
var appBar2 = AppBar(...);
var appBar = appBar1;

Мой appBar отображается в моем Scaffold.

На моем GestureDetector:

onLongPress: (){
  print('LONG PRESSED');
  setState(() {
    appBar = appBar2;
  });
},

person Thomas Nicole    schedule 21.03.2019    source источник
comment
На каком шаге при смене панели приложений возникают проблемы? Анимация иконки, цвета? Замена на новую панель приложений?   -  person NiklasPor    schedule 21.03.2019
comment
Для меня лучше всего было бы изменить всю панель приложений, как вы думаете, возможно ли это?   -  person Thomas Nicole    schedule 21.03.2019
comment
На данный момент я создал две переменные appBar, моя первая - это моя обычная панель приложений, а вторая - моя панель приложений после длительного нажатия. Когда я делаю долгое нажатие, я вызываю setState, где меняю свою панель приложений на вторую, но ничего не меняется.   -  person Thomas Nicole    schedule 21.03.2019
comment
Было бы неплохо увидеть этот фрагмент кода. Ваш подход звучит как хорошая идея, но это будет только переключение панели приложений без анимации, верно?   -  person NiklasPor    schedule 21.03.2019
comment
Конечно, посмотрю анимацию позже. Я отредактировал свой пост, этого достаточно?   -  person Thomas Nicole    schedule 21.03.2019
comment
В ответ я приведу минимальный пример. Не вижу ошибки на вашей стороне, хотя: D   -  person NiklasPor    schedule 21.03.2019
comment
Ага ... Может позже: D   -  person Thomas Nicole    schedule 21.03.2019


Ответы (1)


Добро пожаловать в StackOverflow!

Описанный вами подход звучит совершенно правильно. Вот автономный пример, чтобы вы могли дважды проверить свой код:

Демонстрация переключения AppBar

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: MyPage());
  }
}

class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  static final AppBar _defaultBar = AppBar(
    title: Text('Inbox'),
    leading: Icon(Icons.menu),
    actions: <Widget>[Icon(Icons.search), Icon(Icons.more_vert)],
    backgroundColor: Colors.black,
  );

  static final AppBar _selectBar = AppBar(
    title: Text('1'),
    leading: Icon(Icons.close),
    actions: <Widget>[
      Icon(Icons.flag),
      Icon(Icons.delete),
      Icon(Icons.more_vert)
    ],
    backgroundColor: Colors.deepPurple,
  );

  AppBar _appBar = _defaultBar;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: _appBar,
      body: Center(
        child: RaisedButton(
          child: Text('Switch!'),
          onPressed: () {
            setState(() {
              _appBar = _appBar == _defaultBar
                  ? _selectBar
                  : _defaultBar;
            });
          },
        ),
      ),
    );
  }
}
person NiklasPor    schedule 21.03.2019
comment
Спасибо, Никлас! Я попробовал ваш код, он работает отлично, и благодаря ему я смог найти свою проблему. Я определяю свои переменные не в том месте ... Я тоже ценю переключатель: D - person Thomas Nicole; 21.03.2019
comment
Если у вас есть какие-либо открытые вопросы, я с нетерпением жду возможности помочь вам стать лучше;) Если вам понравится этот ответ, я был бы признателен за голос за ответ: D - person NiklasPor; 21.03.2019
comment
Я очень ценю это, спасибо! Что касается голоса за, я пробовал, но мне нужно как минимум 15 очков репутации ... Я делаю это, как только могу - person Thomas Nicole; 21.03.2019