我正在学习Flutter(和一般的编码),我似乎找不到我最新项目的问题。当我在模拟器中运行时,滑块形式很好,单击拇指和标签显示,但拇指不会在轨道上移动,因此不会调用onChanged事件。
import 'resources.dart';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
class ItemDetail extends StatefulWidget {
final Item item;
ItemDetail({Key key, @required this.item}) : super(key: key);
@override
_ItemDetailState createState() => new _ItemDetailState(item: item);
}
class _ItemDetailState extends State<ItemDetail> {
Item item;
_ItemDetailState({Key key, @required this.item});
@override
Widget build(BuildContext context) {
double margin = ((item.listPrice - item.stdUnitCost)/item.listPrice)*100;
return new Scaffold(
appBar: AppBar(
title: new Text('Item Detail'),
),
body: new Column(
children: <Widget>[
new Padding(padding: EdgeInsets.symmetric(vertical: 20.0)),
new Text(item.itemCode),
new Text(item.itemDescription),
new Text(item.itemExtendedDescription),
new Divider(height: 40.0,),
new Text('List Price: \$${item.listPrice}'),
new Text('Cost: \$${item.stdUnitCost}'),
item.itemType=='N'
? new Text('Non-Stock (${item.itemType})')
: new Text('Stock Item (${item.itemType})'),
new Text('Available: ${item.stockAvailable}'),
new Padding(padding: EdgeInsets.symmetric(vertical: 10.0)),
new Slider(
value: margin,
divisions: 20,
min: 0.0,
max: 100.0,
label: margin.round().toString(),
onChanged: (double value) {
setState(() {
margin = value;
});
},
)
],
),
);
}
}
8条答案
按热度按时间vql8enpb1#
margin
不是状态变量**。它是build
方法内部的局部变量。kulphzqa2#
对于其他人来这里,我有一个稍微不同的原因,滑块没有更新。我把
value
设为常数。确保该值是一个变量。这是:
不是这个:
balp4ylt3#
当我将变量放入构建函数时,我遇到了这个问题😩
将变量移到函数之外并得到了解😎
因为每次状态更改时,都会调用此构建方法并将变量设置回指定的值😝
i86rm4rw4#
这可能会有帮助!(我使用Statefulbuilder更新了值)
lsmd5eda5#
我认为变量margin不具有UI构建的范围。调试时,可以看到变量中的更改,但不呈现。我尝试了以下方法,并能够更新UI值。
yks3o0rb6#
我在给
Slider(value: tasksDetails.taskImportance.toDouble(), etc)
时遇到了问题我用
Slider((_currentImportance ?? tasksDetails.taskImportance).toDouble(), etc)
然后可以移动滑块。我不知道为什么这现在起作用。只能猜测与Denish的原因有关,原因:只有当它的状态发生变化时,小部件才会得到重建。所选滑块值在两种情况下均正确保存。
unguejic7#
我的第一个问题是Dinesh回答的。然后滑块不光滑。我只能轻轻敲一下让它动起来。我在iOS上,所以我将
Slider
小部件更改为Slider.adaptive
。这将滑块更改为CupertinoSlider
。复制和粘贴类,方便您的测试:
k2arahey8#
在我的例子中,问题是构建树在FutureBuilder中,滑块更新会在异步调用时卡住。将滑块移动到FutureBuilder小部件下的小部件解决了这个问题。