Pass a function with parameters to a VoidCallback

后端 未结 7 1737
情书的邮戳
情书的邮戳 2021-01-30 10:22

Is it possible to pass a Function with parameters to a VoidCallback?

for example something like this:

class MyClass {
  void doSomething(int i){

  }

           


        
相关标签:
7条回答
  • 2021-01-30 11:03

    create your own callback instead

    typedef void MyCallback(int foo);
    
    class MyClass {
      void doSomething(int i){
    
      }
    
      MyOtherClass myOtherClass = new MyOtherClass(doSomething);
    }
    
    
    class MyOtherClass {
      final MyCallback callback;
    
      MyOtherClass(this.callback);
    
    }
    
    0 讨论(0)
  • 2021-01-30 11:07

    Instead of VoidCallback, you can use ValueChanged<T>, here is an example:

    class MyClass {
      static void doSomething(int i) {}
    
      MyOtherClass myOtherClass = MyOtherClass(doSomething);
    }
    
    class MyOtherClass {
      final ValueChanged<int> callback;
    
      MyOtherClass(this.callback);
    }
    

    You can then call callback with any int value

    callback(10);
    
    0 讨论(0)
  • 2021-01-30 11:08

    The declaration of VoidCallback is

    typedef void VoidCallback();
    

    That is the type of functions that can be called with zero arguments and which does not return a useful value. That does not seem to be what you want. It's not entirely clear what you do want since the program isn't syntactically valid, but would this work for you:

    class MyClass { 
      static doSomething(int i) { /* ... */ }
      MyOtherClass myOtherClass = new MyOtherClass(doSomething);
    }
    class MyOtherClass {
      final void Function(int) callback;
      MyOtherClass(this.callback);
      void callCallaback() { callback(5); }
    }
    

    Here we define the type of the callback field to be the type of functions that can be called with one integer argument and which returns no useful value. The doSomething method has that type, so it can be assigned to callback.

    You could also use a typedef to name the function:

    typedef Int2VoidFunc = void Function(int);
    // or: typedef void Int2VoidFunc(int arg);
    class MyOtherClass {
      final Int2VoidFunc callback;
      MyOtherClass(this.callback);
      void callCallaback() { callback(5); }
    }
    

    The effect is exactly the same, it just allows you to use a shorter name for the function type, but that only really makes sense if you use it a lot.

    0 讨论(0)
  • 2021-01-30 11:10

    Flutter already has a typedef for this: ValueSetter.

    So you can pass an instance of ValueSetter<int> to your other class.

    0 讨论(0)
  • 2021-01-30 11:21

    Example in UI case. You may need create widget and pass click function.

    1.Create widget with function as paramiter in constructor.

    Container _cardButton({
      Function onClickAction,
    }) {
      return Container(
        width: 340,
        height: 90,
        child: InkWell(
          splashColor: Colors.blue.withAlpha(30),
          onTap: () {
            onClickAction();
          },
          child: Card(
            elevation: 5,
            child: somechild,
          ),
        ),
      );
    

    2. Implement widget to the three view and pass function like this

    _cardButton(
        onClickAction: () => {debugPrint("CLICKED")},
    ),
    
    0 讨论(0)
  • 2021-01-30 11:24

    1) Create typedef first in any constant class:

    typedef StringVoidFunc = void Function(String);
    

    2) Pass from calling function class one

    showAlertDialog(doSomething);
    

    3) Call back handle Function

    void doSomething(String i){
    Navigator.pop(context);
    setState(() {
    
    });
    

    }

    4) From where you want to fire call back from Class Two

        showAlertDialog(StringVoidFunc callback) {
         callback("delete");
    }
    
    0 讨论(0)
提交回复
热议问题