Як встановити колір тла мого головного екрана в 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 і використовувати його на всіх віджетах верхнього рівня).
Nader Ghanbari

42

Ось один із способів, як я це знайшов. Я не знаю, чи є кращі способи, чи які компроміси.

Контейнер "намагається бути якомога більшим", повідомляє https://flutter.io/layout/ . Крім того, контейнер може приймати a decoration, який може бути BoxDecoration , який може мати a 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 (). У контейнері є прикраса та дочірній матеріал, який є центром тексту.

Подивіться це в дії тут:

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


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.