Flutter에서 "젖빛 유리"효과를 어떻게하나요?


103

저는 Flutter 앱을 작성 중이며 iOS에서 흔히 볼 수있는 "젖빛 유리"효과를 사용 / 구현하고 싶습니다. 어떻게해야합니까?


1
그것을 읽고 - 나는 BackdropFilter &이며, ImageFilter를 사용하여 플러터에 흐림 효과를 만드는 방법을 보여주기 위해 기사를 쓰고 중간에
anticafe

blurrycontainer 패키지를 사용할 수 있습니다 .
Jon

답변:


177

BackdropFilter 위젯 을 사용 하여이 효과를 얻을 수 있습니다 .

스크린 샷

import 'dart:ui';
import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(home: new FrostedDemo()));
}

class FrostedDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Stack(
        children: <Widget>[
          new ConstrainedBox(
            constraints: const BoxConstraints.expand(),
            child: new FlutterLogo()
          ),
          new Center(
            child: new ClipRect(
              child: new BackdropFilter(
                filter: new ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
                child: new Container(
                  width: 200.0,
                  height: 200.0,
                  decoration: new BoxDecoration(
                    color: Colors.grey.shade200.withOpacity(0.5)
                  ),
                  child: new Center(
                    child: new Text(
                      'Frosted',
                      style: Theme.of(context).textTheme.display3
                    ),
                  ),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

프로스트 효과가 앱의 전체 너비 / 높이를 덮도록하려면 어떻게해야합니까?
Pieter 2017 년


2
또는 대화 상자의 모달 장벽으로 젖빛 유리 효과를 사용하려는 경우 BackdropFilter를 포함하도록 ModalBarrier 사본을 수정할 수 있습니다. github.com/flutter/flutter/blob/master/packages/flutter/lib/src/…
Collin Jackson

불행히도 흐림 효과는 iOS 장치에서 작동하지 않습니다 : github.com/flutter/flutter/issues/10284
Mark

3
IIRC, 위의 문제는 해결되었으며, 흐림 효과 : 이제 iOS 기기에서 작동
loganrussell48

14

'Frosted'의 정확한 의미를 모르겠다 고 생각합니다 (내 예제가 여기서 작동하지 않으면),

import 'package:flutter/material.dart';
import 'dart:ui' as ui;

void main() => runApp(
    MaterialApp(
        title: "Frosted glass",
        home: new HomePage()
    )
);

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Stack(
        fit: StackFit.expand,
        children: <Widget>[
          generateBluredImage(),
          new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              rectShapeContainer(),
            ],
          ),
        ],
      ),
    );
  }

  Widget generateBluredImage() {
    return new Container(
      decoration: new BoxDecoration(
        image: new DecorationImage(
          image: new AssetImage('assets/images/huxley-lsd.png'),
          fit: BoxFit.cover,
        ),
      ),
      //I blured the parent container to blur background image, you can get rid of this part
      child: new BackdropFilter(
        filter: new ui.ImageFilter.blur(sigmaX: 3.0, sigmaY: 3.0),
        child: new Container(
          //you can change opacity with color here(I used black) for background.
          decoration: new BoxDecoration(color: Colors.black.withOpacity(0.2)),
        ),
      ),
    );
  }

  Widget rectShapeContainer() {
    return Container(
      margin: const EdgeInsets.symmetric(horizontal: 40.0, vertical: 10.0),
      padding: const EdgeInsets.all(15.0),
      decoration: new BoxDecoration(
        //you can get rid of below line also
        borderRadius: new BorderRadius.circular(10.0),
        //below line is for rectangular shape
        shape: BoxShape.rectangle,
        //you can change opacity with color here(I used black) for rect
        color: Colors.black.withOpacity(0.5),
        //I added some shadow, but you can remove boxShadow also.
        boxShadow: <BoxShadow>[
          new BoxShadow(
            color: Colors.black26,
            blurRadius: 5.0,
            offset: new Offset(5.0, 5.0),
          ),
        ],
      ),
      child: new Column(
        children: <Widget>[
          new Text(
            'There\'s only one corner of the universe you can be certain of improving and that\'s your own self.',
            style: new TextStyle(
              color: Colors.white,
              fontSize: 20.0,
            ),
          ),
        ],
      ),
    );
  }
}

결과:

여기에 이미지 설명 입력

나는 이것이 누군가를 도울 수 있기를 바랍니다.


1
완전히 도움이되었습니다. '스택'옵션을 완전히 잊어 버렸습니다 ... 큰 감사합니다.
AhabLives

프로스팅이 부모 용기의 모양을 따르도록하려면 어떻게해야합니까? 원형 용기 내부에 추가 할 때 여전히 직사각형 표시
시간의 카키 마스터

@KakiMasterOfTime 나는 당신의 질문을 제대로받지 못했다고 생각합니다. 그러나 borderRadius를 제거하여 rectShape 컨테이너 모양을 원으로 만들면 작동합니다.
Blasanka

1
나는 인용구를 좋아한다 :-)
santanu bera

0
BackdropFilter(
  filter: ImageFilter.blur(sigmaX: _sigmaX, sigmaY: _sigmaY),
  child: Container(
    color: Colors.black.withOpacity(_opacity),
  ),
),
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.