Как установить цвет фона основного экрана во Flutter?


88

Я изучаю Flutter и начинаю с самых основ. Я не использую MaterialApp. Какой хороший способ установить цвет фона всего экрана?

Вот что у меня есть на данный момент:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new Center(child: new Text("Hello, World!"));
  }
}

Некоторые из моих вопросов:

  • Какой основной способ установить цвет фона?
  • Что именно я смотрю на экране? Какой код «является» фоном? Есть ли что-нибудь для настройки цвета фона? Если нет, то какой простой и подходящий «простой фон» (чтобы раскрасить фон).

Спасибо за помощь!

Приведенный выше код создает черный экран с белым текстом: введите описание изображения здесь

Ответы:


76

Думаю, вы также можете использовать леску для белого фона. Вот какой-то фрагмент кода, который может помочь.

import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
  @override
    Widget build(BuildContext context) {

      return new MaterialApp(
        title: 'Testing',
        home: new Scaffold(
        //Here you can set what ever background color you need.
          backgroundColor: Colors.white,
        ),
      );
    }
}

Надеюсь, это поможет 😊.


Я хочу задать синий цвет для границы и желтый для цвета фона контейнера, как я могу это сделать?
Камлеш

73

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

просто установите scaffoldBackgroundColor: в ThemeData

 MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(scaffoldBackgroundColor: const Color(0xFFEFEFEF)),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );

4
Это то, что требуется для того, чтобы на всех страницах (в основном, в каркасах) был одинаковый цвет фона. Благодарю.
iCrus

1
Отличный ответ, особенно если вы используете маршрутизацию и навигацию (намного лучше, чем создание виджета более высокого порядка из Skaffold и использование его во всех виджетах верхнего уровня).
Надер Ганбари,

42

Вот один из способов, который я нашел. Я не знаю, есть ли способы лучше и каковы компромиссы.

Контейнер «старается быть как можно большим», согласно https://flutter.io/layout/ . Кроме того, Container может принимать a decoration, который может быть BoxDecoration , который может иметь color(который является цветом фона).

Вот образец, который действительно заполняет экран красным цветом и помещает "Hello, World!" в центр:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new Container(
      decoration: new BoxDecoration(color: Colors.red),
      child: new Center(
        child: new Text("Hello, World!"),
      ),
    );
  }
}

Обратите внимание, что контейнер возвращается функцией MyApp build (). Контейнер имеет украшение и дочерний элемент, который является центрированным текстом.

Посмотрите это в действии здесь:

введите описание изображения здесь


3
Контейнер - хороший выбор, если вы создаете простое приложение или приложение, в котором не используется дизайн материалов. Если вы создаете приложение Material, рассмотрите возможность использования ThemeData.dark (), если вам нужен темный фон на всех ваших холстах и ​​карточках. Вы также можете получить детальный контроль над цветами фона карты и холста, используя аргументы cardColor и canvasColor конструктора ThemeData. docs.flutter.io/flutter/material/ThemeData/ThemeData.html
Коллин Джексон,

1
как насчет настройки пользовательского RGB?
Нирав Мадария

Я хочу задать синий цвет для границы и желтый для цвета фона контейнера, как я могу это сделать?
Камлеш

Я не использую Scaffold, и это потрясающее решение. Благодарю.
Эдгар Фрос

27

Есть много способов сделать это, я перечислю несколько здесь.

  1. С помощью backgroundColor

    Scaffold(
      backgroundColor: Colors.black,
      body: Center(...),
    )
    
  2. Использование ContainerвSizedBox.expand

    Scaffold(
      body: SizedBox.expand(
        child: Container(
          color: Colors.black,
          child: Center(...)
        ),
      ),
    )
    
  3. С помощью Theme

    Theme(
      data: Theme.of(context).copyWith(scaffoldBackgroundColor: Colors.black),
      child: Scaffold(
        body: Center(...),
      ),
    )
    


4

На базовом примере Flutter вы можете установить с помощью backgroundColor: Colors.XScaffold

  @override
 Widget build(BuildContext context) {
   // This method is rerun every time setState is called, for instance as done
  // by the _incrementCounter method above.
   //
  // The Flutter framework has been optimized to make rerunning build methods
   // fast, so that you can just rebuild anything that needs updating rather
// than having to individually change instances of widgets.
return Scaffold(
  backgroundColor: Colors.blue,
  body: Center(
    // Center is a layout widget. It takes a single child and positions it
    // in the middle of the parent.
    child: Column(
      // Column is also layout widget. It takes a list of children and
      // arranges them vertically. By default, it sizes itself to fit its
      // children horizontally, and tries to be as tall as its parent.
      //
      // Invoke "debug painting" (press "p" in the console, choose the
      // "Toggle Debug Paint" action from the Flutter Inspector in Android
      // Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
      // to see the wireframe for each widget.
      //
      // Column has various properties to control how it sizes itself and
      // how it positions its children. Here we use mainAxisAlignment to
      // center the children vertically; the main axis here is the vertical
      // axis because Columns are vertical (the cross axis would be
      // horizontal).
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(
          'You have pushed the button this many times:',
        ),
        Text(
          '$_counter',
          style: Theme.of(context).textTheme.display1,
        ),
      ],
    ),
  ),
  floatingActionButton: FloatingActionButton(
    onPressed: _incrementCounter,
    tooltip: 'Increment',
    child: Icon(Icons.add_circle),
  ), // This trailing comma makes auto-formatting nicer for build methods.
);
}

4

вы должны вернуть виджет Scaffold и добавить свой виджет внутри Scaffold

сосать как этот код:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return Scaffold(
          backgroundColor: Colors.white,
          body: Center(child: new Text("Hello, World!"));
    );
  }
}

2

Я думаю, вам нужно использовать MaterialAppвиджет, а также использовать themeи установить primarySwatchнужный цвет. выглядит как код ниже,

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

1

и еще один способ изменить цвет фона:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(home: Scaffold(backgroundColor: Colors.pink,),);
  }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.