如何在颤动中设置滚动条颜色?

Posted

技术标签:

【中文标题】如何在颤动中设置滚动条颜色?【英文标题】:How to set Scrollbar colour in flutter? 【发布时间】:2019-09-08 16:17:56 【问题描述】:

我有一个普通的ListView,它被Scrollbar 类包裹,以在向下滚动时产生一个滚动条。但我想将 Scrollbar 颜色更改为白色,因为我有深色背景。

探索Scrollbar 类后,我可以看到它使用highlightColor 主题,如scrollbar.dart 中所示。

_themeColor = theme.highlightColor.withOpacity(1.0);

尝试将 Scrollbar 包装在 Theme 中,但仍然没有成功。

下面是我的代码 -

Theme(
  data: ThemeData(
    highlightColor: Colors.white, //Does not work
  ),
  child: Scrollbar(
    child: ListView(
      //Normal ListView code
    ),
  ),
)

感谢任何帮助。提前致谢。

【问题讨论】:

github.com/flutter/flutter/blob/master/packages/flutter/lib/src/… 正如我的问题中提到的,我确实已经检查了这个文件。我需要一种方法来更改滚动条的填充颜色。 当你的背景很暗时,它应该已经调整为灰白色 这个解决方案对我有用。但是,我使用copyWith 作为` Theme(data: Theme.of(context).copyWith(highlightColor: Colors.white), ...)` 【参考方案1】:

您可以改用 RawScrollbar 并将 thumbColor 设置为您喜欢的任何颜色。

child: RawScrollbar(
                    thumbColor: Colors.redAccent,
                    radius: Radius.circular(20),
                    thickness: 5,
                    child: //scrollable widget
                   )

【讨论】:

【参考方案2】:

滚动条使用高亮颜色.. 所以只需在 MaterialApp 的 Theme 内的 highlightColor 中添加您想要的滚动条颜色即可。

MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        //main color
        primaryColor: const Color(0xffFFC600),
        //main font
        fontFamily: 'Roboto-Medium',
        //swatch stretching
        primarySwatch: goldenThemeColor,
        visualDensity: VisualDensity.adaptivePlatformDensity,

        splashColor:  const Color(0xffFFC600),

        //color for scrollbar
        highlightColor: Color(0xffffc600)

      ),

      routes: 
        '/' : (context) => SplashScreen(),
        ...
      
      initialRoute: '/',
    )

【讨论】:

如果您在 CupertinoApp 中使用滚动条会怎样? 将滚动条主题添加到您的 ThemeData 类会更安全。在该类中,只需覆盖 thumbColor。【参考方案3】:

我是这样改的。

class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      debugShowCheckedModeBanner: false,

      theme: ThemeData.light().copyWith(
        scrollbarTheme: ScrollbarThemeData().copyWith(
          thumbColor: MaterialStateProperty.all(Colors.grey[500]),
        )
      ),
    );
  

【讨论】:

你知道这是否对性能有影响吗?【参考方案4】:

Flutter 现在提供了 scrollbarTheme,您可以使用它来设置全局滚动条主题并更改 thumbColor 属性,如下所示

 ScrollbarThemeData(
  interactive: true,
  isAlwaysShown: true,
  radius: const Radius.circular(10.0),
  thumbColor: MaterialStateProperty.all(
      DarkAppColors.primaryTextColor.withOpacity(0.4)),
  thickness: MaterialStateProperty.all(5.0),
  minThumbLength: 100,
),


  

【讨论】:

添加此代码后,我的 ios 模拟器以某种方式崩溃,丢失连接,仅在 iOS 模拟器上【参考方案5】:

您可以克隆您链接的文件并更改项目内的颜色,然后使用您克隆的编辑文件而不是使用 Scrollbar(),例如 MyScrollBar()

【讨论】:

这不是最佳解决方案,因为我最终会添加大量代码来更改几行代码。我想知道是否有办法直接设置Scrollbar的颜色。

以上是关于如何在颤动中设置滚动条颜色?的主要内容,如果未能解决你的问题,请参考以下文章

急求JAVA大神帮忙!!!如何在JAVA Swing中设置滚动条,并且让界面能够随滚动条移动?

怎么样在div+css中设置一个div的框并出现滚动条

如何在我的 winforms 应用程序中设置我的 datagrid 滚动条的位置?

HTML怎么在下拉框中设置滚动条

如何阻止 Gridview.builder 的滚动条在颤动中显示

如何获取网页滚动条滚动事件