हैलो, मैं स्पंदन सीख रहा हूं और मैं एक साधारण ऐप बनाने के लिए एक किताब पर एक ट्यूटोरियल का अनुसरण कर रहा था। मैं जो ऐप बना रहा हूं उसमें लाइट और डार्क मोड हैं। लाइट और डार्क मोड के बीच स्विच करने वाले ऐप को टैप करते समय मुझे एक अपवाद मिल रहा है। मेरी main.dart फ़ाइल इस तरह दिखती है:

import 'dart:ui';

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

void main() => runApp(new AppWidget());

class AppWidget extends StatefulWidget {

  AppWidget(){
    debugPrint("AppWidget - constructor - " + hashCode.toString());
  }

  @override
  _AppWidgetState createState() {
    debugPrint("AppWidget - createState - " + hashCode.toString());
    return _AppWidgetState();
  }
}

class _AppWidgetState extends State<AppWidget>{

  bool _bright = false;

  _brightnessCallback(){
    setState(() {
      _bright = ! _bright;
    });
  }

  @override
  Widget build(BuildContext context) {

    debugPrint("_AppWidgetState - build - " + hashCode.toString());
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        brightness: _bright ? Brightness.light : Brightness.dark,
      ),
      home: FlowerWidget(
        imageSrc : _bright ? "assets/images/light.jpg" : "assets/images/dark.jpg",
        brightnessCallback: _brightnessCallback(),
      ),
    );
  }

}

class FlowerWidget extends StatefulWidget{
  final String imageSrc;
  final VoidCallback brightnessCallback;
  FlowerWidget({Key key, this.imageSrc, this.brightnessCallback}) : super(key: key){
    debugPrint("FlowerWidget - constructor - " + hashCode.toString());
  }

  @override
  State<StatefulWidget> createState() {
    debugPrint("FlowerWidget - createState - " +hashCode.toString()); return _FlowerWidgetState();
  }
}

class _FlowerWidgetState extends State<FlowerWidget> {
  double _blur=0;

  _FlowerWidgetState(){
    debugPrint("_FlowerWidgetState - constructor - " +hashCode.toString());
  }

  @override
  initState() {
    debugPrint("_FlowerWidgetState - initState - " +hashCode.toString()); 
    }

  @override
  void didChangeDependencies() {
    debugPrint(
    "_FlowerWidgetState - didChangeDependencies - " +hashCode.toString()); 
    }

  @override
  void didUpdateWidget(Widget oldWidget) {
    debugPrint("_FlowerWidgetState - didUpdateWidget - " +hashCode.toString());
    // The flower image has changed, so reset the blur.
    _blur = 0;
  }

  void _blurMore(){
    setState(() {
      _blur += 0.5;
    });
  }

  @override
  Widget build(BuildContext context) {
   debugPrint("_FlowerWidgetState - build - " +hashCode.toString());
   return Scaffold(
     appBar: new AppBar(
       title: new Text("Flowers"),
       actions: <Widget>[
         new IconButton(
           icon: new Icon(Icons.refresh),
           onPressed: (){
             widget.brightnessCallback();
           },
         )
       ],
     ),
     body: new Container(
       decoration: new BoxDecoration(
        color: Theme.of(context).backgroundColor,
        image: new DecorationImage(
          image: AssetImage(widget.imageSrc),
          fit: BoxFit.cover, 
        ),
       ),
       child: new BackdropFilter(
         filter: new ImageFilter.blur(sigmaX: _blur, sigmaY: _blur),
         child: new Container(
           decoration: new BoxDecoration(
             color: Colors.white.withOpacity(0.0)
           ),
         ),
       ),
     ),
     floatingActionButton: FloatingActionButton(
       onPressed: _blurMore,
       tooltip: 'Blur More',
       child: Icon(Icons.add),
     ),
   );
  }
}

debugprint के साथ कई फंक्शन हैं जो सिर्फ सीखने के उद्देश्य से हैं। मुझे जो अपवाद मिल रहा है वह इस तरह दिखता है:

════════ Exception caught by gesture ═══════════════════════════════════════════
The following NoSuchMethodError was thrown while handling a gesture:
The method 'call' was called on null.
Receiver: null
Tried calling: call()

जब मैं _FlowerWidgetState वर्ग की build विधि में रीफ्रेश आइकन दबाता हूं तो अपवाद फेंक दिया जाता है। मैं इस अपवाद को खत्म करने की कोशिश कर रहा हूं। अग्रिम में धन्यवाद।

0
Abdulaziz Yesuf 10 नवम्बर 2019, 13:26

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा इसलिए है क्योंकि आप फ्लॉवरविड्ज बनाते समय कॉलबैक फ़ंक्शन मान को कॉलबैक के संदर्भ में नहीं दे रहे हैं।

FlowerWidget( imageSrc : _bright ? "assets/images/light.jpg" : "assets/images/dark.jpg", brightnessCallback: _brightnessCallback(), )

तो, आपको क्या करना है बस इस तरह के ब्रैकेट के बिना फ़ंक्शन नाम पास करें

FlowerWidget( imageSrc : _bright ? "assets/images/light.jpg" : "assets/images/dark.jpg", brightnessCallback: _brightnessCallback, )

0
Elias Andualem 10 नवम्बर 2019, 11:09