如何使用自定义类进行装饰?

Chr*_*ris 2 dart flutter

我想为我的 Flutter 应用程序中的每个页面使用背景图像。因此,我想要一个类,我可以用它来返回一个 BoxDecoration 以从我创建的每个新页面调用它。目前,我正在使用一个简单的全局函数backgroundImage(),它返回一个BoxDecoration. 有没有办法让我可以直接传递给自定义类decoration:而不是调用全局函数?

BoxDecoration backgroundImage() {
  return BoxDecoration(
    image: DecorationImage(
      image: AssetImage("images/background.png"),
      fit: BoxFit.cover,
    ),
  );
}

Run Code Online (Sandbox Code Playgroud)
class HomeScreen extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        decoration: backgroundImage(),
        child: null /* add child content here */,
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

Joã*_*res 5

在我看来,您想要的是一个可以导入和重用的变量。创建一个新类,在其中您只会返回一个带有一些自定义选项的 BoxDecoration 实例可能有点过头了。为什么不创建一个单独的文件,导入材料,用您的自定义声明一个变量并使用它?像这个例子:

自定义装饰文件重用:

import 'package:flutter/material.dart';

BoxDecoration baseBackgroundDecoration =
  BoxDecoration(
    image: DecorationImage(
      image: AssetImage("images/background.png"),
      fit: BoxFit.cover,
    ),
  );

Run Code Online (Sandbox Code Playgroud)

使用它:

import 'custom_decorations.dart';
Run Code Online (Sandbox Code Playgroud)

使用变量:

Container(
  decoration: baseBackgroundDecoration,
),
Run Code Online (Sandbox Code Playgroud)

不过,你最初的想法并没有错。您不会将它用作全局变量,而只是在需要时导入的文件,其中包含一个带有自定义装饰的类,如下所示:

import 'package:flutter/material.dart';

class CustomDecorations {
  BoxDecoration baseBackgroundDecoration(){
    return BoxDecoration(
      image: DecorationImage(
        image: AssetImage("images/background.png"),
        fit: BoxFit.cover,
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以通过以下方式之一使用它:

Container(
  decoration: CustomDecorations().baseBackgroundDecoration(),
),
Run Code Online (Sandbox Code Playgroud)

或者:

// Declare it
CustomDecorations customDecorations = CustomDecorations();

...

// Use it
Container(
  decoration: customDecorations.baseBackgroundDecoration(),
),
Run Code Online (Sandbox Code Playgroud)