Dismissible
Flutter中的小部件可让您
onDismissed: (direction) {....}
告诉您它在关闭后被拖动的方向。我如何获取当前拖动小部件的方向(或增量)?
我尝试将其包装在GestureDectecor()
具有onHorizontalDragStart:
etc的容器中,但似乎阻止了Dismissible的工作(即,您无法拖动它)
我有一个Dismissible
小部件列表如下:
Dismissible(
direction: DismissDirection.endToStart,
key: Key(widget.data[i]),
onDismissed: (direction) {
widget.onRemoveRequest(i, widget.data[i]);
},
background: Container(
color: Colors.red,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 20.0),
child: Text(
"Delete",
textAlign: TextAlign.right,
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w500,
fontSize: 16.0,
),
),
),
],
),
),
child: CustomTextField(
padding: const EdgeInsets.only(left: 30.0, right: 30.0),
hintText: widget.newEntryHint,
text: widget.data[i],
keyboardType: TextInputType.multiline,
onChanged: (val) {
widget.onChanged(i, val);
},
),
)
Run Code Online (Sandbox Code Playgroud)
除了删除匹配的对象时,它按预期工作。
注意:widget.onRemoveRequest
从源数据中删除指定索引处的对象,widget.data
。
widget.data
是一个 …
这是一个复杂的问题,但我会尽力解释它。
我的项目使用 sqflite 数据库。这个特定的页面根据数据库中的数据返回一个 Dismissible 小部件列表。这是我读取数据的方式:
class TaskListState extends State<TaskList> {
DBProvider dbProvider = new DBProvider();
Future<List<Task>> allTasks;
@override
void initState() {
allTasks = dbProvider.getAllTasks();
super.initState();
}
void update(){
setState(() {
allTasks = dbProvider.getAllTasks();
});
}
//build
}
Run Code Online (Sandbox Code Playgroud)
TaskList 小部件返回一个带有 FutureBuilder 的页面,该页面使用数据库中的数据构建一个 ListView.builder。ListView 构建 Dismissible 小部件。关闭 Dismissible 小部件会更新数据库中的一行并再次读取数据以更新列表。
TaskListState 的构建方法
@override
Widget build(BuildContext context) {
return ListView(
physics: const AlwaysScrollableScrollPhysics(),
children: <Widget>[
//other widgets such as a title for the list
),
FutureBuilder(
future: allTasks,
builder: (context, snapshot){
if(snapshot.hasError){
return …
Run Code Online (Sandbox Code Playgroud) 我正在使用一个名为flutter_slidable 的库。下面是我的 fetchItems 方法
static Future<List<Item>> fetchItems(String url) async {
try {
// pub spec yaml http:
// import 'package:http/http.dart' as http;
final response = await http.get(
Uri.parse(
url),
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer tltsp6dmnbif01jy9xfo9ssn4620u89xhuwcm5t3",
}) /*.timeout(const Duration(seconds: Config.responseTimeOutInSeconds))*/;
final List<Item> itemsList;
if (response.statusCode == 200) {
itemsList = json
.decode(response.body)
// In event of failure return line below
//.cast<Map<String, dynamic>>()
.map<Item>((json) => Item.fromJson(json))
.toList();
} else if (response.statusCode == 401) {
itemsList = [];
} else …
Run Code Online (Sandbox Code Playgroud)