flutter 使用GetX通过参数发送数据

js5cn81o  于 2023-01-31  发布在  Flutter
关注(0)|答案(3)|浏览(337)

在flutter中使用GetX(或其他任何方式)发送带参数的数据是一个好的实践吗?我的意思是它对性能和内存容量有好处吗?...就像这个例子:

Get.toNamed(AppPages.servicesDetails, arguments: [service]);

当(服务)仅包含来自API的一个产品的数据时:如(ID、名称、信息、图像...等)。
并在服务详细信息页面中:

final s = Get.arguments[0];
  @override
  Widget build(BuildContext context) {
    return  Scaffold(
      body:  Center(child: Text(s.name),),
rdrgkggo

rdrgkggo1#

也可以使用参数。

var  data = {
      "email" : "test@gmail.com",
      "message" : "hi!"
   };
  Get.toNamed(YourRouteName.name, parameters: data);

从另一个页面获取也是这样的。

print(Get.parameters['email']);

同样在Getx上,你可以像在文档编写时传递数据的url链接一样传递它。
https://github.com/jonataslaw/getx/blob/master/documentation/en_US/route_management.md
如果你想传递整个项目数据,你也可以从列表传递一个模型,如果有onTap函数,虽然你需要再次解码它
例如

MyCardItemFromList(
 name: list[index].name,
 ontapFunction: () => Get.toNamed(
   YourRouuteName.name,
   parameters: {
       /// Lets assume this is the item selected also it's own item data
       "itembyIndex": jsonEncode(list[index]),
    }
 ),
),

来自控制器

class MyXampleController extends GetxController{

//declare the model
final Rx<Model> model = Model().obs;

 @override
  void onInit() {
    convertToDecode();
    super.onInit();
  } 
  convertToDecode(){
    final decode = jsonDecode(Get.parameters['itembyIndex']) 
    final passToModel = Model.fromJson(decode);
    model(passToModel);
    // or if you are using getBuilder
    // try do it like this
    // model.value = passToModel;
     // update();
    // don't forget to call update() since it's needed from getbuilder;
   
  }
}

现在,从用户界面调用数据将是这样的

final controller = Get.put(MyXampleController());
///// this will be the data we got from the item
controller.model.value.name
zsbz8rwp

zsbz8rwp2#

您可以简单地使用参数

Get.toNamed(
      '/my-route',
      arguments: "Hello",
    );

在第二个屏幕上,您可以执行

final title = Get.arguments as String;
omtl5h9j

omtl5h9j3#

还有另一种访问其他页面上的值的方法
通过访问控制器

ControllerName obj = Get.find();

obj.function();

obj.variable;

obj.anythingYouWantToAccess;

像在当前控制器上一样使用它(& U)

注:您要访问的控制器B以简单的文字打开,它应该是上一个屏幕。

相关问题