मैं स्पंदन में "फ्रॉस्टेड ग्लास" प्रभाव कैसे करूं?


99

मैं एक स्पंदन ऐप लिख रहा हूं, और मैं "फ्रॉस्टेड ग्लास" प्रभाव का उपयोग / कार्यान्वयन करना चाहूंगा जो कि iOS पर सामान्य है। मैं यह कैसे करु?


1
मैं एक लेख लिखता हूं कि कैसे बैकड्रॉपफिल्टर और इमेजफिल्टर का उपयोग करके स्पंदन पर धब्बा प्रभाव बनाने के लिए - इसे मध्यम पर
एंटीकैफे

आप blurrycontainer पैकेज का उपयोग कर सकते हैं ।
जॉन

जवाबों:


172

आप इस आशय को प्राप्त करने के लिए 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
                    ),
                  ),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

मैं ऐप की संपूर्ण चौड़ाई / ऊंचाई को पाले सेओढ़ लिया प्रभाव कैसे बनाऊंगा?
पीटर


2
या, यदि आप संवादों के लिए मोडल बैरियर के रूप में पाले सेओढ़ लिया गिलास प्रभाव का उपयोग करने की कोशिश कर रहे हैं, तो आप बैकड्रॉफ़ल्टर को शामिल करने के लिए मोडलबैरियर की अपनी कॉपी को संशोधित कर सकते हैं। github.com/flutter/flutter/blob/master/packages/flutter/lib/src/…
कॉलिन जैक्सन

दुर्भाग्य से धब्बा प्रभाव iOS उपकरणों पर काम नहीं करता है: github.com/flutter/flutter/issues/10284
मार्क

3
iirc, उपरोक्त मुद्दे को हल कर दिया गया है और धब्बा प्रभाव iOS उपकरणों पर अब काम करता है :)
loganrussell48

11

मुझे लगता है कि मैं 'फ्रॉस्टेड' का सही अर्थ नहीं जानता (यदि मेरा उदाहरण यहाँ काम नहीं करता है),

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
पूरी तरह से मदद की। पूरी तरह से 'स्टैक' विकल्प के बारे में भूल गया ... बड़ा धन्यवाद।
अहाबाइव्स

आप एक माता-पिता के कंटेनर के आकार का पालन कैसे कर सकते हैं? यह अभी भी आयताकार दिखाता है जब एक गोलाकार आकार के कंटेनर के अंदर जोड़ा जाता है
काकी मास्टर ऑफ टाइम

@KakiMasterOfTime मुझे लगता है कि मुझे आपका सवाल ठीक से नहीं आया। लेकिन यदि आप बॉर्डररियस को हटाकर सर्कल के लिए रेक्टशेप कंटेनर शेप बनाते हैं तो यह काम करेगा।
ब्लास्कांक

1
मुझे बोली पसंद है :-)
santanu bera

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.