首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤动-带SafeArea的系统条颜色

颤动-带SafeArea的系统条颜色
EN

Stack Overflow用户
提问于 2019-03-20 05:49:11
回答 5查看 8.4K关注 0票数 9

我正在尝试为flutter应用程序添加带有彩色系统栏的SafeArea小部件,但不知何故,它们总是变黑。

代码语言:javascript
复制
  @override
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(
      SystemUiOverlayStyle.light.copyWith(
        systemNavigationBarIconBrightness: Brightness.dark,
        systemNavigationBarColor: kSurfaceColor,
        statusBarIconBrightness: Brightness.dark,
        statusBarColor: Colors.red, // Note RED here
      ),
    );

    return SafeArea(
      child: Scaffold(
        backgroundColor: kWhiteColor,
        appBar: _buildAppBar(context), // Title and Avatar are built here
        body: _buildBody(), // This function just returns blank Container for now
        floatingActionButton: _buildFAB(context),
        floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
      ),
    );
  }

这就是我所看到的

如果我将SafeArea包装在Container中,并将color属性设置为白色,则可以正常工作,但系统栏图标也会变为白色

EN

回答 5

Stack Overflow用户

发布于 2020-09-17 22:52:05

基于@david-carrilho的回答,我创建了这个简单的小部件

代码语言:javascript
复制
import 'package:flutter/material.dart';

class ColoredSafeArea extends StatelessWidget {
  final Widget child;
  final Color color;

  const ColoredSafeArea({Key key, @required this.child, this.color})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      color: color ?? Theme.of(context).colorScheme.primaryVariant,
      child: SafeArea(
        child: child,
      ),
    );
  }
}

然后,无论我在哪里使用SafeArea,我都会使用我的小包装器小部件ColoredSafeArea

代码语言:javascript
复制
class MyExampleView extends StatelessWidget {
  const MyExampleView({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return ColoredSafeArea(
      child: Center(
        child: Text('Nice color bar'),
      ),
    );
  }
}

这样做的原因是因为它在你的内容后面创建了一个指定颜色的容器,然后SafeArea只是根据设备添加了必要的填充。

票数 8
EN

Stack Overflow用户

发布于 2020-01-15 05:47:39

代码语言:javascript
复制
Container(
   color ...
      ),
      child: SafeArea(
        child: Scaffold(
          body: 
            AnnotatedRegion<SystemUiOverlayStyle>(
               value: SystemUiOverlayStyle.light,
               child: ...
票数 6
EN

Stack Overflow用户

发布于 2021-09-23 08:12:45

用下面的代码替换你的叠加样式,这样就行了

代码语言:javascript
复制
SystemChrome.setSystemUIOverlayStyle(
  SystemUiOverlayStyle.dark.copyWith(statusBarColor: Colors.white));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55250493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档