Flutter,如何使用 getx 刷新我的控制器和請求

蒼天石

我正在使用 getx 創建一個應用程序。我有簡單的 GET 請求,並將數據顯示到屏幕上。在詳細信息屏幕中,我放了一個按鈕來刷新請求,請求的響應是隨機出現的,因此每次用戶按下按鈕時,都會顯示不同的文本。我不知道該怎麼做。

我的控制器:

class JokeController extends GetxController {
  var isLoading = true.obs;
  var joke = Joke().obs;

  @override
  void onInit() {
    fetchJoke();
    super.onInit();
  }

  void fetchJoke() async {
    isLoading(true);
    try {
      var chosenCategory = GetStorage().read("chosenCategory");
      var _joke = await Requests.getJoke(chosenCategory);
      if (_joke != null) {
        joke.value = _joke;
      }
    } finally {
      isLoading(false);
    }
  }
}

我的請求:

static Future<Joke> getJoke(String chosenCategory) async {   
    try {
      var response =
          await client.get(Uri.parse(url)).timeout(Duration(seconds: 10));

      if (response.statusCode == 200) {
        Joke _joke = new Joke();
        var responseBody = response.body;
        return _joke.jokeFromJson(responseBody);
      }
    } catch (error) {
      return null;
    }
  }

在頁面 (Obx) 中:

Obx(() {
            if (jokeController.isLoading.value) {
              return Center(
                child: CircularProgressIndicator().reactive(),
              );
            }
            return Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Center(
                    child: Padding(
                  padding: EdgeInsets.only(
                      right: MediaQuery.of(context).size.width * .1,
                      left: MediaQuery.of(context).size.width * .1),
                  child: Text(
                    jokeController.joke.value.value,
                    textAlign: TextAlign.center,
                    style: TextStyle(
                        fontSize: MediaQuery.of(context).size.width * .06,
                        fontWeight: FontWeight.bold),
                  ),
                )),
                SizedBox(
                  height: MediaQuery.of(context).size.height * .2,
                ),
                Container(
                    alignment: Alignment.bottomCenter,
                    width: 250,
                    height: 60,
                    child: Opacity(
                        opacity: 0.88,
                        child: ElevatedButton(
                          style: ElevatedButton.styleFrom(
                              padding: EdgeInsets.zero,
                              shape: RoundedRectangleBorder(
                                  borderRadius: BorderRadius.circular(30)),
                              shadowColor: Colors.orange),
                          clipBehavior: Clip.antiAlias,
                          onPressed: () {
                            //Refresh the joke
                          },
                          child: Ink(
                            decoration: BoxDecoration(
                                gradient: LinearGradient(
                                    begin: Alignment.bottomCenter,
                                    end: Alignment.topCenter,
                                    colors: [
                                  Colors.orange,
                                  Colors.orange[200]
                                ])),
                            child: Container(
                              constraints:
                                  BoxConstraints(maxHeight: 300, minWidth: 50),
                              alignment: Alignment.center,
                              child: Text(
                                "SEE ANOTHER JOKE FROM THIS CATEGORY",
                                style: TextStyle(
                                    fontSize:
                                        MediaQuery.of(context).size.width * .03,
                                    fontWeight: FontWeight.bold),
                              ),
                            ),
                          ),
                        )))
              ],
            );
          })

到目前為止我在 onPressed 下嘗試過的:jokeController.joke.refresh(); 和 setState 和 Get.to(JokePage());

但這些都不起作用。此外,我從 GetStorage 獲取類別,當用戶單擊上一頁中的類別時,我會使用它。該類別不會改變。提前致謝。以及來自頁面的圖片:在此處輸入圖片說明

維沙爾·扎維里

您需要再次調用fetchJoke()按鈕按下事件的方法。你可以這樣做:

onPressed: () {
 jokeController.fetchJoke();//Refresh the joke
},

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Flutter 和 Getx:如何将参数从 UI 传递到 Getx 控制器?

我是否必須在我的 Flutter 應用程序中使用 Getx 控制器?

Flutter GetX 控制器获取空值而不是数据

在Flutter GetX中使用没有控制器的可观察变量

Flutter 和 getx:update() 不通知 GetBuilder

Flutter 和 Getx:可观察对象如何发出变化

Flutter 使用 Getx 更改图标按钮的主题和图标

如何使用 Getx 在 Flutter 中为特定列表项增加计数器?

使用 getX 抖动图像选择器

flutter getx web sockets - 要級聯到提供者和控制器的流數據

重新访问应用程序屏幕时,Flutter GetX 控制器不调用方法

如何使用 Getx 和 Auto Route 设置导航器?

如何在控制器内获取当前标签?- 颤振 GetX

使用 getx 控制器时,未为类型“Rx<某个类>”定义 getter“某个变量”

Flutter中的setState和GetX有什么区别?

GetX 和 ListView 问题

PreferredSize 和 GetX 用法

如何使用 getx 传递参数?

我应该使用Point.x还是Point.getX()?

如何使用 getx 在颤振中的一个控制器中获取另一个控制器的变量

如何在 Flutter 中使用 GetX 收听 FocusNode

如何使用 GetX 使 Flutter 等待數據加載

使用 Getx 管理 Flutter ListView.builder

Flutter Getx 本地存储数据

Flutter GetX RxList 分配问题

如何正确使用GetX与TextField和一些服务器端验证?

Fluter:如何使用Getx更改变量?

在我的场景中,哪个包更好 flutter_secure_storage 或 getx ?

Flutter GetX 从远程服务器初始化翻译源?