как внедрить функцию в другой класс во флаттере - PullRequest
0 голосов
/ 13 января 2020

Я хочу напечатать 'test' при нажатии MyButton

Я создал конструкции с функцией в своем классе, но не сработал

Пожалуйста, помогите мне вот мой код

Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'bla bla bla',
            ),
            MyButton((){print('test');}, 'my button')
          ],
        ),

Я сделал класс StatefulWidget, я назвал его MyButton

import 'package:flutter/material.dart';

class MyButton extends StatefulWidget {
  Function buttonFunction;
  String buttonName;
  MyButton(this.buttonFunction,this.buttonName);

  @override
  _MyButtonState createState() => _MyButtonState();
}

class _MyButtonState extends State<MyButton> {
  @override
  Widget build(BuildContext context) {
    String name=widget.buttonName;
    return Container(
      width: 200,
      child: RaisedButton(
        color: Colors.red,
        onPressed: () {
          widget.buttonFunction;
          print('clicked $name');
        },

        textColor: Colors.white,
        child: Text("$name",
          style: TextStyle(fontSize: 18,),
        ),
      ),
    );
  }
}

1 Ответ

0 голосов
/ 13 января 2020

Вам не хватает скобки "()" для вызова функции, вместо этого вы просто ссылаетесь на нее.

Вы также устанавливаете переменную в методе сборки, которая является неподходящим местом для объявления переменных, так как она будет многократно запускаться и повторно объявляться без необходимости и становиться дорогой. Если вы хотите получить доступ к свойству значения внутри String, вам просто нужно использовать `" String $ {widget.myStringVariable}. ".

Я изменил ваш код, чтобы отразить эти изменения:

class _MyButtonState extends State<MyButton> {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: 200,
      child: RaisedButton(
        color: Colors.red,
        onPressed: () {
          widget.buttonFunction();
          print('clicked $name');
        },
        textColor: Colors.white,
        child: Text("${widget.buttonName}",
          style: TextStyle(fontSize: 18,),
        ),
      ),
    );
  }
}
...