Flutter - Как установить двойное значение Blo c? - PullRequest
0 голосов
/ 19 января 2020

В моем приложении есть поле для ввода определенного значения в двойном формате, но это не работает.

Что я делаю не так?

Мой Blo c

 class BudgetBloc extends BlocBase {
   String _documentId;
   double _movimentos;

   BudgetBloc() {
     _movimentosController.listen((value) => _movimentos = value);
   }

   void setBudget(Budget budget) {
     _documentId = budget.documentId();
     setMovimentos(budget.movimentos);
   }

   var _movimentosController = BehaviorSubject<double>();
   Stream<double> get outMovimentos => _movimentosController.stream;

   void setMovimentos(double value) => _movimentosController.sink.add(value);

   bool insertOrUpdate() {
      var budget = Budget()
     ..movimentos = _movimentos;

     if (_documentId?.isEmpty ?? true) {
       _repository.add(budget);
     } else {
       _repository.update(_documentId, budget);
     }

    return true;
  }

   @override
   void dispose() {   
     _movimentosController.close();
     super.dispose();
   }
 }

Мой BudgetPage

 class BudgetPage extends StatefulWidget {

   BudgetPage(this.budget);
   final Budget budget;

   @override
   _BudgetPageState createState() => _BudgetPageState();
 }
 class _BudgetPageState extends State<BudgetPage> {

   TextEditingController _movimentosController;
   final _bloc = BudgetBloc();

   @override
   void initState() {
   _movimentosController =
      TextEditingController(text: widget.budget.movimentos.toString());
   super.initState();
  }

  @override
  void dispose() {
   _movimentosController.dispose();
  super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Add Movimento"),
      ),
      body: Container(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: ListView(
          children: <Widget>[

            Container(
              child: TextField(
                decoration: InputDecoration(labelText: "Movimento"),
                controller: _movimentosController,
                onChanged: _bloc.setMovimentos,
              ),
            ),

            Container(
              height: 20,
            ),

            RaisedButton(
              child: Text("Save"),
              onPressed: () {
                if (_bloc.insertOrUpdate()) {
                  Navigator.pop(context);
                }
              },
            )
          ],
        ),
      ),
    ),
  );
 }

 }

Спасибо

1 Ответ

1 голос
/ 19 января 2020

Функция (double) не может быть назначена типу параметра void Функция (String)

Ошибка говорит вам, что вы предоставляете String, когда он ожидает double.

Я бы попробовал передать double в BLo C, примерно так:

onChanged: (value) => _bloc.setMovimentos(double.parse(value)),
...