• flutter 局部主题


    如果我们想在应用程序的一部分中覆盖应用程序的全局的主题,我们可以将要覆盖得部分封装在一个ThemeWidget中。

    有两种方法可以解决这个问题:创建特有的ThemeData或扩展父主题。

    1.创建特有的ThemeData

    如果我们不想继承任何应用程序的颜色或字体样式,我们可以通过new ThemeData()创建一个实例并将其传递给Theme Widget。

    new Theme(
      // Create a unique theme with "new ThemeData"
      data: new ThemeData(
        accentColor: Colors.yellow,
      ),
      child: new FloatingActionButton(
        onPressed: () {},
        child: new Icon(Icons.add),
      ),
    );

    2.扩展父主题

    扩展父主题时无需覆盖所有的主题属性,我们可以通过使用copyWith方法来实现。

    new Theme(
      // Find and Extend the parent theme using "copyWith". Please see the next 
      // section for more info on `Theme.of`.
      data: Theme.of(context).copyWith(accentColor: Colors.yellow),
      child: new FloatingActionButton(
        onPressed: null,
        child: new Icon(Icons.add),
      ),
    );

    具体代入例子:

    import 'package:flutter/foundation.dart';
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(new MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final appName = 'Custom Themes';
    
        return new MaterialApp(
          title: appName,
          theme: new ThemeData(
            brightness: Brightness.dark,
            primaryColor: Colors.lightBlue[800],
            accentColor: Colors.cyan[600],
          ),
          home: new MyHomePage(
            title: appName,
          ),
        );
      }
    }
    
    class MyHomePage extends StatelessWidget {
      final String title;
    
      MyHomePage({Key key, @required this.title}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text(title),
          ),
          body: new Center(
            child: new Container(
              color: Theme.of(context).accentColor,
              child: new Text(
                'Text with a background color',
                style: Theme.of(context).textTheme.title,
              ),
            ),
          ),
          floatingActionButton: new Theme(
            data: Theme.of(context).copyWith(accentColor: Colors.yellow),
            child: new FloatingActionButton(
              onPressed: null,
              child: new Icon(Icons.add),
            ),
          ),
        );
      }
    }
  • 相关阅读:
    个人总结05
    微软拼音的用户体验
    个人总结04
    典型用户和用户场景模式
    个人总结03
    个人总结02
    构建之法阅读笔记06
    个人总结01
    学习进度条——第七周
    WebApi学习总结系列第五篇(消息处理管道)
  • 原文地址:https://www.cnblogs.com/gaozhang12345/p/11991514.html
Copyright © 2020-2023  润新知