Ant D
Ant D

Reputation: 2683

Flutter scoped_model : Is it possible to pass data to a field of a model class?

Is it possible to pass data to a field of a model class? Say from an onPressed method. It doesn't accept a onPressed function with parameters, 'onPressed: model.setNumber(25),' Or is there any way of doing this? Is Redux related to this type of passing data around?

I have provided the code below:

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

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
 Widget build(BuildContext context) {
    return new ScopedModel<CounterModel>(
      model: new CounterModel(),
      child: new MaterialApp(
        title: 'Flutter Demo',
        theme: new ThemeData(
          primarySwatch: Colors.green,
        ),
        home: new CounterHome('Scoped Model Demo'),
      ),
    );
  }
}

class CounterModel extends Model {
  int myNumber = 0;

  void setNumber(int number) {

    myNumber = number;

    notifyListeners();
  }
}

class CounterHome extends StatelessWidget {
  final String title;

  CounterHome(this.title);

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(title),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Text(
                  'The new number is:',
                ),

            new ScopedModelDescendant<CounterModel>(
              builder: (context, child, model) => new Text(
                  model.myNumber.toString(),
                  style: Theme.of(context).textTheme.display1),
            ),
          ],
        ),
      ),

      floatingActionButton: new ScopedModelDescendant<CounterModel>(
        builder: (context, child, model) => new FloatingActionButton(
          onPressed: model.setNumber(25), //THIS GIVES AN ERROR
          tooltip: 'new number',
          child: new Icon(Icons.add),
        ),
      ),
    );
  }
}

Upvotes: 1

Views: 1096

Answers (1)

R&#233;mi Rousselet
R&#233;mi Rousselet

Reputation: 277467

You can wrap your onPressed inside a closure like the following :

 onPressed: () => model.setNumber(25),

Upvotes: 4

Related Questions