我使用flutter已经有一段时间了,最近使用Get来实现状态管理。我在首先打开加载对话框然后打开消息对话框时遇到问题。然后我想关闭加载对话框,但消息对话框是保持关闭的对话框。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class HomeController extends GetxController {
Future<void> openAndCloseLoadingDialog() async {
showDialog(
context: Get.overlayContext,
barrierDismissible: false,
builder: (_) => WillPopScope(
onWillPop: () async => false,
child: Center(
child: SizedBox(
width: 60,
height: 60,
child: CircularProgressIndicator(
strokeWidth: 10,
),
),
),
),
);
await Future.delayed(Duration(seconds: 3));
Get.dialog(
AlertDialog(
title: Text("This should not be closed automatically"),
content: Text("This should not be closed automatically"),
actions: <Widget>[
FlatButton(
child: Text("CLOSE"),
onPressed: () {
Get.back();
},
)
],
),
barrierDismissible: false,
); …Run Code Online (Sandbox Code Playgroud) 我正在开发适用于 iOS、Android 和 Web 的 Flutter 应用程序。我决定使用 GetX 包,因为它使事情变得更容易,但我对如何处理 Web URL/地址栏导航感到困惑。例如,我的一个屏幕显示有关事件的详细信息。通过应用程序导航到那里效果很好,但是如果我在浏览器中粘贴到该事件的链接会怎么样?我的 GetX EventController 管理一个_selectedEvent事件,这就是我知道要显示哪个事件的详细信息的方式。但是,如果我使用 URL 链接,我的_selectedEvent活动永远不会更新,详细信息屏幕也不会显示正确的活动。
目前,我在主页中设置_selectedEvent当用户单击事件时导航到详细信息屏幕。但是,如果用户通过浏览器中的地址栏导航,我无法更新_selectedEvent. 我认为我无法使用 GetX 中的任何状态管理器,因为我没有更新小部件,所以我不确定在哪里更新我的_selectedEvent.
我应该如何处理地址栏导航?
希望我的解释有意义。我还在努力学习Flutter。
我已经为我的 flutter 开发安装了 get_cli 。正如文档所说,我使用该命令get create page:home创建一个带有绑定、视图和控制器的主模块。默认情况下,它创建在 lib/app/modules/home文件夹中。如何在不同的文件夹下创建它,例如lib/app2/modules/home或lib/modules/home。
我使用 getx 作为我的 flutter 应用程序的状态管理。但是我在更新列表中的值时遇到了困难。所以我有一个参数为 isFollowing 的用户模型。当我点击一个按钮时,isFollowing 变量会改变,颜色也会更新。但它并没有发生。我使用 Obx 作为我的小部件,因为我已经在开始时注入了状态。获取数据并在前端显示它一切正常。但是当我想更改列表中的值时,它没有更新。我的最小可重复示例
家庭控制器
class HomeController extends GetxController {
var userslist = List<User>().obs;
@override
void onInit() {
fetchUsers();
super.onInit();
}
void fetchUsers() async {
var users= await ApiService().getapidata('${usersurl}feed');
if (users!= null) {
userslist.value= users;
}
}
}
Run Code Online (Sandbox Code Playgroud)
模型
class User {
User({
this.id,
this.user_name,
this.profile_picture,
this.isFollowing,
});
int id;
String user_name;
String profile_picture;
bool isFollowing;
factory User.fromJson(Map<String, dynamic> json) => User(
id: json["id"],
user_name: json["user_name"],
profile_picture: json["profile_picture"],
isFollowing: json["is_following"],
);
Run Code Online (Sandbox Code Playgroud)
看法
class HomeScreen …Run Code Online (Sandbox Code Playgroud) 在我的 Flutter 应用程序中,我使用 GetxController 作为每个视图的 viewModel:
\nimport \'package:flutter/material.dart\';\nimport \'package:get/get.dart\';\n\nimport \'track_activity_view_model.dart\';\n\n// Main widget of the view\nclass TrackActivityView extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return GetBuilder<TrackActivityViewModel>(\n init: TrackActivityViewModel(),\n builder: (viewModel) {\n return SafeArea(\n child: Scaffold(\n appBar: AppBar(title: Text(\'Registra un\\\'attivit\xc3\xa0\')),\n body: viewModel.serviceEnabled\n ? AskPermissionWidget()\n : TrackingWidget(viewModel),\n ));\n });\n }\n}\n\nclass AskPermissionWidget extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return GetBuilder<TrackActivityViewModel>(\n init: TrackActivityViewModel(),\n builder: (viewModel) {\n // Some code that use viewModel\n return Container();\n });\n }\n}\n\nclass TrackingWidget extends StatelessWidget {\n final …Run Code Online (Sandbox Code Playgroud) 我用来Get.snackbar()显示连接到 API 的过程。\n我不明白如何以编程方式关闭小吃栏?\n我有以下代码:
@override\n Future<List> getImportantData(String inputData) async {\n try {\n final token = basicApiAuthString;\n print("requesting API with the following request: $inputData");\n Get.snackbar(\n "Requesting very important data...",\n "",\n duration: 60.seconds, // it could be any reasonable time, but I set it lo-o-ong\n snackPosition: SnackPosition.BOTTOM,\n showProgressIndicator: true,\n isDismissible: true,\n backgroundColor: Colors.lightGreen,\n colorText: Colors.white,\n );\n List importantData = await _client.requestAPI(basicAuthString: token, body: inputData);\n .then((importantData) {\n // Here I need to dismiss the snackbar I am still showing to user\n …Run Code Online (Sandbox Code Playgroud) 应用程序卡在启动屏幕上有什么原因吗?我使用getx状态管理。如果 authToken 不为空,则应转到主页。但onInit在控制器类中没有调用。
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return GetMaterialApp(
initialRoute: '/splashScreen',
getPages: [
GetPage(name: '/splashScreen', page: () => SplashScreen(),binding: Bind()),
GetPage(
name: '/login', page: () => LoginPage(), binding:Bind()),
GetPage(
name: '/mainPage', page: () => MainPage(), binding:Bind())
],
debugShowCheckedModeBanner: false,
localizationsDelegates: const [
LocalizationDelegate(),
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''),
const Locale('zh', ''),
],
title: 'Sample',
theme: ThemeData(
accentIconTheme: …Run Code Online (Sandbox Code Playgroud) 管理应用程序生命周期状态的最佳方法是什么?
您会使用带有 WidgetsBindingObserver 的 getxservice 来做到这一点吗?
提前致谢。
我有以下view
import 'dart:async';
import 'package:get/get.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import '../../Controllers/mapview_controller.dart';
class MapViewerPage extends StatelessWidget {
MapViewerPage({Key? key}) : super(key: key);
final MapViewController mapcontroller = MapViewController();
final Completer<GoogleMapController> _controller = Completer();
final CameraPosition _initialCameraPosition = const CameraPosition(
target: LatLng(28.527582, 77.0688971),
zoom: 16,
);
final BitmapDescriptor defaultIcon =
BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed);
final List<Marker> allMarkers = [];
@override
Widget build(BuildContext context) {
return GetBuilder<MapViewController>(
init: mapcontroller,
builder: (controller) {
return SizedBox(
width: double.infinity,
height: double.infinity,
child: Obx(() => GoogleMap(
myLocationButtonEnabled: true,
markers:Set<Marker>.of(allMarkers),
mapType: …Run Code Online (Sandbox Code Playgroud) 我创建了 2 个类,第一个是:
class Mesure {
late String equipement;
late String number;
late String courant = "";
Mesure.init(List<String> values) {
equipement = values[0];
number = values[1];
courant = values[2];
}
}
Run Code Online (Sandbox Code Playgroud)
和数据库类:
class DataBase {
late int? id;
late Mesure? mesure;
late String? status;
DataBase.init(int id, Mesure mesure, String status) {
id = id;
mesure = mesure;
status = status;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我用一些值初始化了数据库:
Mesure mesure = Mesure.init(values);
DataBase test = DataBase.init(0, mesure, "status");
Run Code Online (Sandbox Code Playgroud)
我想将它存储在存储 getX 中:
final box = GetStorage(); …Run Code Online (Sandbox Code Playgroud)