मैं अपने ऐप में एक स्पंदन वेब दृश्य का उपयोग करने की कोशिश कर रहा हूँ। हालांकि, यह काम कर रहा है, जिस पेज को मैं लॉन्च करने की कोशिश कर रहा हूं उसे लोड होने में कुछ समय लगता है। इसलिए, सामग्री दिखाए जाने से पहले उपयोगकर्ताओं को एक खाली पृष्ठ दिखाई देता है

मैं पृष्ठ सामग्री दिखाए जाने तक स्पिनर दिखाना जारी रखना चाहता हूं

यहां एक कोड स्निपेट है जिसे मैंने आजमाया है

 body: Stack(
        children: <Widget>[
          WebView(
            key: _key,
            initialUrl: widget.selectedUrl,
            javascriptMode: JavascriptMode.unrestricted,
            onPageFinished: (finish) {
              setState(() {
                isLoading = false;
              });
            },
          ),
          isLoading
              ? Center(
                  child: CircularProgressIndicator(),
                )
              : Stack(),
        ],
      ),

मैं स्पिनर देखता हूं लेकिन सामग्री दिखाए जाने से पहले यह गायब हो जाता है। तो, लगभग 5-8 सेकंड है जहां उपयोगकर्ता एक खाली कैनवास देखता है और कोई स्पिनर नहीं होता है

मैं स्पिनर को तब तक कैसे रख सकता हूं जब तक कि सभी सामग्री स्क्रीन पर दिखाई न दे?

धन्यवाद

डॉक्टर सारांश (सभी विवरण देखने के लिए, फ़्लटर डॉक्टर -v चलाएँ): [✓] फ़्लटर (चैनल स्थिर, 1.22.0, Mac OS X 10.15.6 19G2021 पर, लोकेल एन-यूएस)

[✓] एंड्रॉइड टूलचेन - एंड्रॉइड डिवाइसों के लिए विकसित (एंड्रॉइड एसडीके संस्करण २८.०.३) [✓] एक्सकोड - आईओएस और मैकओएस (एक्सकोड १२.०) के लिए विकसित [✓] एंड्रॉइड स्टूडियो (संस्करण ३.६) [✓] वीएस कोड (संस्करण १.४९. २) [✓] कनेक्टेड डिवाइस (१ उपलब्ध)

• कोई गड़बड़ी नहीं मिली!

  • अद्यतन।

जिस यूआरएल को मैं कॉल कर रहा हूं वह पेज दिखाने से पहले कुछ अतिरिक्त सत्यापन करता है। मैंने अपने कोड में एक टाइमर जोड़ा।

सुनिश्चित नहीं है कि यह सही तरीका है

 Future.delayed(const Duration(milliseconds: 9000), () {
                  setState(() {
                    isLoading = false;
                  });
                });
0
user2570135 6 अक्टूबर 2020, 21:42

1 उत्तर

सबसे बढ़िया उत्तर
// before build method
bool isLoading = true;

// somewhere in stateful calss
 Stack(
            children: [
              WebView(
                navigationDelegate: (NavigationRequest request) {
                  if (request.url
                      .startsWith('https://books-by-weight.herokuapp.com')) {
                    Navigator.pop(context);
                    // print('blocking navigation to $request}');
                    return NavigationDecision.prevent;
                  }
                  // print('allowing navigation to $request');
                  return NavigationDecision.navigate;
                },
                initialUrl: url
                javascriptMode: JavascriptMode.unrestricted,
                onWebViewCreated: (WebViewController webViewController) {
                  _controller.complete(webViewController);
                },
                onPageFinished: (finish) {
                  setState(() {
                    isLoading = false;
                  });
                },
              ),
              isLoading
                  ? Center(
                      child: Container(
                        height: 30,
                        width: 30,
                        child: CircularProgressIndicator(
                          backgroundColor: Colors.primaries[0],
                          strokeWidth: 3,
                        ),
                      ),
                    )
                  : Stack(),
            ],
          ),
0
Abhishek Ghaskata 6 अक्टूबर 2020, 21:55