10 votes

Flutter- Comment changer la couleur de ma barre d'applications en y ajoutant la fonction de recherche ?

J'essaie de changer la couleur de ma barre d'application mais je n'ai pas d'option pour le faire. Comme je suis un tutoriel vidéo, ils n'ont pas montré comment modifier la couleur. Je vous en prie, aidez-moi !

import 'package:flutter/material.dart';

class SearchList extends StatefulWidget {
  SearchList({ Key key }) : super(key: key);
  @override
  SearchListState createState() => new SearchListState();

}

class SearchListState extends State<SearchList>
{

  Widget appBarTitle = new Text("Search Product..", style: new TextStyle(color: Colors.white),);
  Icon actionIcon = new Icon(Icons.search, color: Colors.white);
  final key = new GlobalKey<ScaffoldState>();
  final TextEditingController searchQuery = new TextEditingController();
  List<String> _list;
  bool issearching;
  String _searchText = "";

  SearchListState() {
    searchQuery.addListener(() {
      if (searchQuery.text.isEmpty) {
        setState(() {
          issearching = false;
          _searchText = "";
        });
      }
      else {
        setState(() {
          issearching = true;
          _searchText = searchQuery.text;
        });
      }
    });
  }

  @override
  void initState() {
    super.initState();
    issearching = false;
    init();

  }

  void init() {
    _list = List();
    _list.add("shirts");
    _list.add("shoes");
    _list.add("jeans");
    _list.add("informals");
    _list.add("formals");
    _list.add("dresses");
    _list.add("accessories");

  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      key: key,
      appBar:

         buildBar(context),

       body: new ListView(
        padding: new EdgeInsets.symmetric(vertical: 8.0),
        children: issearching ? _buildSearchList() : _buildList(),
      ),
    );

  }

  List<ChildItem> _buildList() {
    return _list.map((contact) => new ChildItem(contact)).toList();
  }

  List<ChildItem> _buildSearchList() {
    if (_searchText.isEmpty) {
      return _list.map((contact) => new ChildItem(contact))
          .toList();
    }
    else {
      List<String> _searchList = List();
      for (int i = 0; i < _list.length; i++) {
        String  name = _list.elementAt(i);
        if (name.toLowerCase().contains(_searchText.toLowerCase())) {
          _searchList.add(name);
        }
      }
      return _searchList.map((contact) => new ChildItem(contact))
          .toList();
    }
  }

  Widget buildBar(BuildContext context) {
    return new AppBar(
        centerTitle: true,
        title: appBarTitle,
        actions: <Widget>[
          new IconButton(icon: actionIcon, onPressed: () {
            setState(() {
              if (this.actionIcon.icon == Icons.search) {
                this.actionIcon = new Icon(Icons.close, color: Colors.white,);
                this.appBarTitle = new TextField(
                  controller: searchQuery,
                  style: new TextStyle(
                    color: Colors.white,

                  ),
                  decoration: new InputDecoration(
                      prefixIcon: new Icon(Icons.search, color: Colors.white),
                      hintText: "Search...",
                      hintStyle: new TextStyle(color: Colors.white)
                  ),
                );
                _handleSearchStart();
              }
              else {
                _handleSearchEnd();
              }
            });
          },),
        ]
    );
  }

  void _handleSearchStart() {
    setState(() {
      issearching = true;
    });
  }

  void _handleSearchEnd() {
    setState(() {
      this.actionIcon = new Icon(Icons.search, color: Colors.white,);
      this.appBarTitle =
      new Text("Search Sample", style: new TextStyle(color: Colors.white),);
      issearching = false;
      searchQuery.clear();
    });
  }

}

class ChildItem extends StatelessWidget {
  final String name;
  ChildItem(this.name);
  @override
  Widget build(BuildContext context) {
    return new ListTile(title: new Text(this.name));
  }

}

Je voulais une couleur d'accentuation verte sur ma barre d'application mais j'obtiens le bleu par défaut de Flutter. Je n'arrive pas à trouver le bon endroit pour placer le themeData de mon appBar. Toute aide serait la bienvenue. Merci. Ce que je veux comme résultat

enter image description here

Ce que je reçois

enter image description here

9voto

Jose Tapizquent Points 101

Après avoir lu des tonnes de documentation, j'ai enfin trouvé la réponse.

Remarque : C'est la solution si vous utilisez un SearchDelegate pour afficher votre écran de recherche.

À l'intérieur de votre sous-classe SearchDelegate, remplacez appBarTheme

@override
ThemeData appBarTheme(BuildContext context) {
    return Theme.of(context);
}

Par défaut, la classe définit l'arrière-plan comme blanc, il suffit donc de le modifier pour pouvoir voir les couleurs de votre thème.

J'espère que cela vous aidera.

5voto

Akash Mahapatra Points 883

Vous pouvez essayer d'utiliser une classe qui étend une SearchDelegate .
Si vous souhaitez avoir un thème personnalisé, dans votre classe étendue "SearchDelegate", vous pouvez remplacer le "appBarTheme" comme ci-dessous :

class exampleClass extends SearchDelegate<String> {
  @override
  ThemeData appBarTheme(BuildContext context) {
    return ThemeData(
      primaryColor: Colors.greenAccent,
    );
  }
.
.
.
}// end of exampleClass

1voto

John Wick Points 58

Il existe une option connue sous le nom de Couleur de fond dans Appbar pour modifier la couleur de votre barre d'applications.

return new AppBar(
        backgroundColor: Colors.greenAccent,
        centerTitle: true,
        title: appBarTitle,
        actions: <Widget>[
         .....

Vous pouvez également définir les données du thème de votre application dans MaterialApp() comme ceci :

MaterialApp(
          theme: ThemeData(
             primarySwatch: Colors.red,
             brightness: Brightness.light,
             ...//other options 
          )

1voto

MD Khali Points 119

Changement de la couleur du widget de titre de la barre d'application :-.

import 'package:flutter/material.dart';

    class HomePage extends StatefulWidget {
      @override
      _HomePagePage createState() => _HomePagePage();
    }

    class _HomePagePage extends State<HomePage> {

      Icon searchBtn = new Icon(Icons.search);
      Widget appBarTitle = new Text('Invoices');

      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
            color: Colors.purpleAccent,
            debugShowCheckedModeBanner: false,
            home: new Scaffold(
              appBar: new AppBar(
                elevation: 0.0,
                  centerTitle: false,
                  title: appBarTitle,
                  flexibleSpace: Container( // for AppBar Title Color
                  decoration: BoxDecoration(
                      gradient: LinearGradient(begin: Alignment.topCenter, colors: [
                    Color(0xFF832685),
                    Color(0xFFC81379),
                    //Color(0xFFFAF2FB)
                  ])),
                ),
                //backgroundColor: Color(0xFF832685)
                  actions: <Widget>[
                    new IconButton(
                        icon: searchBtn,
                        onPressed: () {
                          setState(() {
                            if (this.searchBtn.icon == Icons.search) {
                              this.searchBtn = new Icon(Icons.close);
                              this.appBarTitle = new TextField(
                                autofocus: true,
                                cursorColor: Color(0xFFFAF2FB),
                                style: new TextStyle(
                                  color: Colors.white,
                                ),
                                decoration: new InputDecoration(
                                  //fillColor: Colors.white,
                                  border: InputBorder.none,
                                  // focusedBorder: OutlineInputBorder(
                                  // borderRadius: BorderRadius.all(Radius.circular(5.0)),
                                  // borderSide: BorderSide(color: Colors.white)),
                                  filled: true,
                                  prefixIcon:
                                      new Icon(Icons.search, color: Colors.white),
                                  hintText: "Search...",
                                  hintStyle: new TextStyle(color: Colors.white),
                                ),
                              );
                            } else {
                              this.searchBtn = new Icon(Icons.search);
                              this.appBarTitle = new Text('Invoices');
                            }
                          });
                        })
                  ]),

-1voto

Ahmed Points 784

Changement MaterialApp primaryColor par les données Theme pour toutes les applications.

new MaterialApp(
      theme: ThemeData(
        ...
      ),

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X