как передать любой объект класса в класс с сохранением состояния во флаттере (тип genti c) - PullRequest
0 голосов
/ 07 августа 2020

У меня есть несколько классов с отслеживанием состояния, таких как доход, расходы, дебет, события и т. Д. c, и каждый класс имеет свой собственный набор атрибутов (int, double, string). У меня есть другой класс, который я хочу разделить среди всех с отслеживанием состояния классы, потому что код похож. вместо кодирования другого класса для доходов, расходов и c для выполнения конкретной c задачи, я хотел бы создать один класс, который является общим для всех классов

вот частичный код для моего общего класса


class CheckBoxAlertDialog extends StatefulWidget {
  CheckBoxAlertDialog({
    Key key,
    this.anyobjectype,
    this.database
  }) : super(key: key);

  final T anyobjectype;
  final AppDatabase database;

  @override
  CheckBoxAletDialogState createState() {
    return new CheckBoxAletDialogState();
  }
}

class CheckBoxAletDialogState extends State<CheckBoxAlertDialog> {

  @override
  Widget build(BuildContext context) {
      If(anyobjectype is type income)
          print(anyobjectype.amount)     //assume income class has type double income
      If(anyobjectype is type expense)
          print(anyobjectype.paid_amount)  //assume expense class has type double paid_amount
       If(anyobjectype is type event)
          print(anyobjectype.event_date)   //assume event class has type date event_date

       //and so on
      
   }
}

Я хочу иметь возможность вызывать CheckBoxAlertDialog и передавать любой объект класса доходов, расходов, дебета, событий. например, я хочу иметь возможность вызывать как следующие

income = new income();
CheckBoxAlertDialog(anyobjectype : income, database: database,);

expense = new expense();
CheckBoxAlertDialog(anyobjectype : expense, database: database,);

debit = new debit();
CheckBoxAlertDialog(anyobjectype : debit, database: database,);


в основном, я хочу иметь возможность передавать любой объект класса в CheckBoxAlertDialog и иметь доступ к типам данных класса в классе CheckBoxAlertDialog. см. функцию сборки в CheckBoxAlertDialog Я слышал, что тип данных geneti c может помочь, но я новичок в этом. Может ли кто-нибудь показать мне, как я могу передать любой объект класса в CheckBoxAlertDialog и получить доступ к типам данных класса в CheckBoxAlertDialog, как в примере выше? заранее спасибо

1 Ответ

0 голосов
/ 07 августа 2020

Попробуйте использовать InheritedWidget. Это позволяет вашим дочерним виджетам получать доступ к членам родительского класса. Проверьте документы по адресу: https://api.flutter.dev/flutter/widgets/InheritedWidget-class.html

Этот веб-сайт также весьма полезен: https://ericwindmill.com/articles/inherited_widget/

...