簡體   English   中英

Flutter Container 具有兩種不同的不透明度

[英]Flutter Container with two different opacity

我想制作具有兩種不同不透明度的容器,以使屏幕更專注於某些圖像,我使用了堆棧和容器,是否可以制作這樣的東西?

在此處輸入圖片說明

這是我的代碼示例,

Stack(
        children: <Widget>[
          Image(),
          Container(
            height: double.infinity,
            width: double.infinity,
            color: Colors.black.withOpacity(0.4),
          ),

先謝謝各位了

我不確定這是一個很好的解決方案。 它會解決問題。

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(home: FirstPage()));

class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Demo")),
      body: Stack(
        fit: StackFit.expand,
        children: <Widget>[
          Image.network(
            "https://images.pexels.com/photos/414612/pexels-photo-414612.jpeg",
            fit: BoxFit.cover,
          ),
          CustomPaint(
            painter: MyPainter(),
          )
        ],
      ),
    );
  }
}

class MyPainter extends CustomPainter {
  final Color color;
  final double opacity;

  ///ratio of max(height, width)
  final double radius;

  MyPainter({
    Color color,
    double radius = 0.3,
    this.opacity = 0.4,
  })  : assert(opacity != null && opacity >= 0.0 && opacity <= 1.0),
        color = color ?? Colors.black,
        radius = radius ?? 0.3;

  @override
  void paint(Canvas canvas, Size size) {
    var rect = Offset.zero & size;
    var gradient = RadialGradient(
      center: Alignment.center,
      radius: radius,
      colors: [const Color(0x0000000), color.withOpacity(opacity)],
      stops: [1.0, 1.0],
    );
    canvas.drawRect(
      rect,
      Paint()..shader = gradient.createShader(rect),
    );
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    return false;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM