質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.59%

flutterでscoped modelで作成されたclassの中のメソッドをコールしたい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 830

luckyclock

score 63

b.dart内のonPressedの処理内でa.dart内Deviceクラスのtestメソッドを実行したいのですが、
どうすればよいのかわかりません。
DeviceクラスはBlueModelクラス内で宣言されています。

a.dart

class Device extends BluetoothDevice {

  Device({this.connection, @required this.id, this.name})
      : super(id: id, name: name);

  void test(){
  }
}

class BlueModel extends Model {
  FlutterBlue _blue = FlutterBlue.instance;
  Map<DeviceIdentifier, Device> _devices = {};
  Device currentDevice;
  TabController tabController;

  BlueModel({@required this.tabController}) : assert(tabController != null);

  bool _loading = false;

  Map<DeviceIdentifier, Device> get devices => _devices;

  static BlueModel of(BuildContext context) =>
      ScopedModel.of<BlueModel>(context);

  bool get loading => _loading;

  Future<void> scan() async {
    _loading = true;
    notifyListeners();

    var scannedResult = Map<DeviceIdentifier, Device>();

    await for (ScanResult result in _blue.scan(timeout: Duration(seconds: 2))) {
      var dev = result.device;
      if (dev.name.contains('ZEAL')) {
        scannedResult[dev.id] = Device(id: dev.id, name: dev.name);
      }
    }

    _devices.forEach((id, dev) {
      if (scannedResult[id] == null && !_devices[id].connected)
        _devices.remove(id);
    });

    scannedResult.forEach((id, dev) {
      if (_devices[id] == null) _devices[id] = dev;
    });

    _loading = false;
    notifyListeners();
  }

  void connect(Device d) async {
    d.currentState = BluetoothDeviceState.connecting;
    notifyListeners();
    var deviceState = await d.state;
    print('Device State: $deviceState');
    if (_devices[d.id].connection == null &&
        deviceState != BluetoothDeviceState.connected) {
      _devices[d.id].connection = _blue.connect(d).listen((s) {
        print('Current State: ${d.currentState}');
        if (s == BluetoothDeviceState.connected) {
          d.initiate(notifyListeners);
        }
      });
    } else {
      d.currentState = BluetoothDeviceState.connecting;
      notifyListeners();
      await Future.delayed(Duration(milliseconds: 500));
      d.currentState = BluetoothDeviceState.disconnected;
      notifyListeners();
    }
  }

  void disconect(Device d) {
    d.dispose();
    if (d.id == currentDevice.id) currentDevice = null;
    notifyListeners();
  }

  void select(Device d) async {
    print('Checking...');

    if (!d.connected) return;

    if (currentDevice != null && d.id != currentDevice.id) {
      print('Stop current device');
      currentDevice.stopReadWeight();
      currentDevice.stopListen();
    }

    print('Checked!!!');

    if (!d.listening) {
      print('Start listening');
      currentDevice = d;
      currentDevice.startListen(notifyListeners);
      currentDevice.startReadWeight();
    }

    tabController.animateTo(1);
  }
}

b.dart

class BasicFunctions extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Wrap(
            alignment: WrapAlignment.spaceAround,
            runSpacing: 20.0,           
            children: <Widget>[
              ControlButton(
                text: 'aaa',
                onPressed: () {
                  //このonPressedの中でDeviceクラスのtestメソッドを実行したい
                },
              ),
            ],
          );
  }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る