0

我有一个应用程序需要使用范围模型作为最简单的状态管理(可能是),我有一个动态范围滑块(内部循环),它从数据库接收它的值,当我移动任何幻灯片以使用范围模型更新移动滑块的值(更新到服务器和 UI 中),因为我是使用范围模型的新手,所以我需要帮助。从服务器接收值的类:

class Values {
   int id;
   double quantity ;
   Values(this.id , this.qantity);

未来方法:

List _values = [];
Future getValue() async{
  var url ="xxxxxx/api/quantities.php?id=$id";
  var response = await http.get(url);
  var data = jsonDecode(response.body);
  for (var x in data){
     Values myValue = Values(x['id'],x['quantity']);
     _values.add(myValue);
  }
  return _values;
}

使用 ListView builder 的 future builder 中的滑块:

ListView.builder(
     itemCount: snapshot.data.length,
     itemBuilder: (contect, index) {
        return Slider(
           max: 100,
           min: 0,
           value:snapshot.data[index].quantity,
           onChanged: (val) {
               //I need to use scope model state management here , but I don't know
           }
        );
})

一切都正确,只是我不知道如何在这里使用状态管理,我该怎么做,最好的问候

4

1 回答 1

1

使用GetX是因为它是一种简化的反应式状态管理解决方案。

代码将是这样的

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

class ValuesController extends GetxController {

  List<Values> values = new List<Values>().obs;
  void set(int id , double val) {

    this.values.forEach((element) {
      if(element.id == id)
        element.quantity =val;
    });

  }
  void setList(List<Values> values)
  {
    this.values = values;
  }

}

class Values {
  int id;
  double quantity;

  Values(this.id, this.quantity);

}

class state
{
  final Vcontroller = Get.put(ValuesController());
  get()
  {


    List<Values> _values = [];
    Future getValue() async{
      var url ="xxxxxx/api/quantities.php?id=$id";
      var response = await http.get(url);
      var data = jsonDecode(response.body);
      for (var x in data){
        Values myValue = Values(x['id'],x['quantity']);
        _values.add(myValue);
      }
      Vcontroller.setList(_values);
      return _values;
    }
  }

  final ValuesController Vctrl = Get.find();
  build()
  {


    return Obx(()=>F());

  }
  F()
  {
    List<Values> values = Vctrl.values;
    return  ListView.builder(
        itemCount: values.length,
        itemBuilder: (contect, index) {
          return Slider(
              max: 100,
              min: 0,
              value: values[index].quantity,
              onChanged: (val) {
                //I need to use scope model state management here , but I don't know
              }
          );
        });
  }
}
于 2020-10-21T12:18:04.063 回答