1. 程式人生 > >Flutter更新Dialog彈出框裡面的UI

Flutter更新Dialog彈出框裡面的UI

最近在用Flutter做專案的時候發現一個問題,我在一個彈出框裡面加了一個Slider,但是我拖動的時候Slider沒反應,後來想到可能是因為SetState更新的是當前頁面的UI,而彈出框和當前介面屬於兩個不同的介面,所以使用setstate更新的是底部的介面,後來百度了一下找到了兩種解決方法,這裡記錄一下,給後來人一點幫助

使用StatefulBuilder包裹Dialog,builder裡面有兩個引數,第二個是StateSetter物件,需要更新的時候使用這個物件去更新

return StatefulBuilder(
  builder: (context, mSetState) {
    return AlertDialog(
      title: Text('設定節點數量'),
      content: SingleChildScrollView(
        child: new Column(
          children: <Widget>[
            new Container(
              child: new Slider(
                value: _currentPosition,
                label:
                    "$_currentPosition",
                divisions: 20,
                min: 0.0,
                max: 20.0,
                onChanged: (value) {
                  mSetState(() {
                    _currentPosition = value
                        .roundToDouble();
                  });
                },
              ),
            )
          ],
        ),
      ),
      actions: <Widget>[
        FlatButton(
          child: Text('取消'),
          onPressed: () {
            Navigator.of(context).pop();
          },
        ),
        FlatButton(
          child: Text('確定'),
          onPressed: () {},
        ),
      ],
    );
  },
)