Изменить appBar при нажатии кнопки - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь изменить appBar при выборе сообщения. Я сделал два виджета, но я не могу достичь того, что мне нужно. Создан объект, который может быть доступен по всему коду. Попытался создать виджет с сохранением состояния для обеих панелей приложений. Мне нужно получить доступ к appBarChange по всему коду, так как я буду вызывать функцию из виджета, который я создал для тела.

var appchangevar = _HomeState();

Widget _defaultBar(BuildContext context){
  return AppBar(
    titleSpacing: 0,
    actions: <Widget>[
      IconButton(
        icon: Icon(Icons.search,
            color: Theme.of(context).iconTheme.color
        ),
        onPressed: () {},
      ),
    ],
  );
}


Widget _editingBar(BuildContext context){
  return AppBar(
    leading: IconButton(
      icon: Icon(LineIcons.times),
      color: Theme.of(context).iconTheme.color,
      onPressed: (){
        appchangevar.appBarChange();
      },
    ),
    actions: <Widget>[
      IconButton(
        icon: Icon(LineIcons.check
        ),
      ),
      IconButton(
        icon: Icon(LineIcons.envelope),
      ),
    ],
  );
}




class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {


  bool _messageSelected = true;

  void appBarChange(){
    setState(() {
      _messageSelected = !_messageSelected;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: _messageSelected ? _editingBar(context) : _defaultBar(context),

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

Вы можете передать функцию соответствующему виджету и изменить панель приложения на onTap.

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

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  MyAppState createState() => MyAppState();
}

class MyAppState extends State<MyApp> {
  bool _messageSelected = true;

  void appBarChange() {
    setState(() {
      _messageSelected = !_messageSelected;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: _messageSelected
            ? _defaultBar(context, appBarChange)
            : _editingBar(context, appBarChange),
      ),
    );
  }
}

Widget _defaultBar(BuildContext context, Function changeAppBar) {
  return AppBar(
    titleSpacing: 0,
    actions: <Widget>[
      IconButton(
        icon: Icon(Icons.search, color: Theme.of(context).iconTheme.color),
        onPressed: () {
          changeAppBar();
        },
      ),
    ],
  );
}

Widget _editingBar(BuildContext context, Function changeAppBar) {
  return AppBar(
    leading: IconButton(
      icon: Icon(Icons.comment),
      color: Theme.of(context).iconTheme.color,
      onPressed: () {
        changeAppBar();
      },
    ),
    actions: <Widget>[
      IconButton(
        onPressed: () {},
        icon: Icon(Icons.check),
      ),
      IconButton(
        onPressed: () {},
        icon: Icon(Icons.event),
      ),
    ],
  );
}
0 голосов
/ 28 апреля 2020

Следуйте приведенному ниже коду:

class MyApp extends StatelessWidget {

@override
Widget build(BuildContext context) {
 return MaterialApp(
    home: Scaffold(
       appBar: AppBar(
         title: Text('Change Text Dynamically on Button Click')
         ),
        body: Center(
          child: UpdateText()
          )
        )
      );
    }
  }

class UpdateText extends StatefulWidget {

  UpdateTextState createState() => UpdateTextState();

}

class UpdateTextState extends State {

 String textHolder = 'Old Sample Text...!!!';

 changeText() {

  setState(() {
   textHolder = 'New Sample Text...'; 
  });

}

@override
Widget build(BuildContext context) {
return Scaffold(
  body: Center(child: Column(
    children: <Widget>[
    Container(
      padding: EdgeInsets.fromLTRB(20, 20, 20, 20),
      child: Text('$textHolder', 
        style: TextStyle(fontSize: 21))),

    RaisedButton(
      onPressed: () => changeText(),
      child: Text('Click Here To Change Text Widget Text Dynamically'),
      textColor: Colors.white,
      color: Colors.green,
      padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
     ),  
   ]))
  );
 }
}

Это пример изменения простого виджета Text (), но вы можете управлять любым виджетом, поддерживаемым AppBar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...