Scaffold(body: FutureBuilder(
future: fetchTracks(),
builder: (BuildContext context, AsyncSnapshot snapshot){
if(snapshot.hasData)
{
ListView.builder(
scrollDirection: Axis.vertical,
itemExtent: 130.0,
physics: AlwaysScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: trackes.length,
itemBuilder: (BuildContext context, int index) {
print("test");
return makeCard(snapshot.data[index]);
},
).build(context);
}
else
{
return Center(child: new CircularProgressIndicator());
}
} ));
Run Code Online (Sandbox Code Playgroud)
当我调用此 Scaffold Future 构建时,将调用我的未来函数 fetchTracks() 并获取快照中的数据,但它不会进入 itemBuilder 函数。所以 futurebuilder 返回 NULL。请帮我解决。提前谢谢你
使用 FutureBuilder,我收到以下错误。
错误:参数类型“AsyncSnapshot”无法分配给参数类型“Position”。
指向线:return Map(snapshot);错误:必须返回非空值,因为返回类型“Widget”不允许为空。指向行:构建器:(上下文,快照)
主页.dart
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: FittedBox(
child: Text('something something'),
),
actions: <Widget>[
//irrelevant code for buttons etc
],
body: FutureBuilder <Position> (
future: _geolocatorService.getInitialLocation(),
builder: (BuildContext context, snapshot) {
if (snapshot.hasData) { //<- can confirm snapshot has data and can display it
// printed in terminal ex.: lat value, long,
// null,null
print(snapshot);
return Map(snapshot); //<-having trouble passing snapshot data as Position to
// this map
}
}
), …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个包含登录屏幕和主屏幕(目前只有两个屏幕)的 Flutter 应用程序。我也在使用 Flutter 安全存储和 Http 库。
\n每当应用程序启动时,我希望应用程序检查两个属性(accessKey 和 accessId)是否存储在安全存储中。如果未找到 accessId,则会自动生成并使用 Uuid 库进行分配。而accessKey不是本地生成的,而是由API提供的。
\n应用程序导航至:
\n1)。HomeScreen,如果 accessKey 存储在安全存储中并且身份验证成功。
\n2). SignInScreen,如果没有找到accessKey或者认证失败。
我的问题是,每次执行读取操作时,安全存储都会抛出错误“对空值使用空检查运算符”。我已经初始化了存储变量,但这个问题仍然发生。
\n这是我的安全存储类代码:
\nimport 'package:flutter_secure_storage/flutter_secure_storage.dart';\n\nclass FAS {\n static FlutterSecureStorage? _storage;\n\n static void init() {\n _storage = const FlutterSecureStorage(\n aOptions: AndroidOptions(encryptedSharedPreferences: true),\n );\n }\n\n static Future<String?> read(String key) async {\n return _storage!.read(key: key);\n }\n\n static Future<Map<String, String>> readAll() async {\n return _storage!.readAll();\n }\n\n static Future<void> write(String key, String value) async {\n await _storage!.write(key: key, value: …Run Code Online (Sandbox Code Playgroud) 我正在创建一个待办事项列表(某种)应用程序。我有一个使用 FutureBuilder 的视图,它调用一个函数从 SQLite 数据库中获取文章并显示为卡片。我有一个getx_controller.dart,其中包含可观察的列表:
class Controller extends GetxController {
// this is the list of items
var itemsList = <Item>[].obs;
}
Run Code Online (Sandbox Code Playgroud)
我有一个items_controller.dart
// function to delete an item based on item id
void deleteItem(id) {
final databaseHelper = DatabaseHelper();
// remove item at item.id position
databaseHelper.deleteItem(tableItems, id);
print('delete item with id $id');
this.loadAllItems();
}
Run Code Online (Sandbox Code Playgroud)
loadAllItems是查询数据库的函数
最后,list_builder.dart包含 FutureBuilder
final itemController = Get.put(ItemsController());
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Item>>(
future: itemController.loadAllItems(),
builder: (context, …Run Code Online (Sandbox Code Playgroud) 我FutureBuilder在 Flutter 中遇到一个问题,它会Future在每次小部件重建时重新创建它,从而导致我的应用程序出现意外行为。
具体来说,我有一个FutureBuilder获取随机数的方法,但每次触发重建(例如,通过按下按钮更新计数器)时,它都会生成一个新的随机数,而不是使用最初获取的值。
当我尝试通过按下按钮来更新计数器时,就会出现问题。每按一次不仅会更新计数器,还会重新生成 所显示的随机数FutureBuilder。我想保留第一个生成的随机数,除非明确刷新。
这是问题的视频表示:
这是演示该问题的完整可运行程序:
import 'package:flutter/material.dart';
import 'dart:math'; // For generating random numbers
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: 'FutureBuilder Example',
home: FutureBuilderExample(),
);
}
}
class FutureBuilderExample extends StatefulWidget {
const FutureBuilderExample({super.key});
@override
_FutureBuilderExampleState createState() => _FutureBuilderExampleState();
}
class _FutureBuilderExampleState extends State<FutureBuilderExample> {
int counter = 0; …Run Code Online (Sandbox Code Playgroud) 我正在制作一个页面,其中包含一些相互交互的保管箱和一个 Futurebuilder 包装的 ListView。
当 Dropbox 发生更改并单击复选框时,我会调用“setState”。但是,由于checkbox的onChanged中的setState,Futurebuilder不断被调用,ListView被重建。因此,当单击复选框时,整个列表视图都会闪烁,如下视频所示。
我想保留列表视图并仅更新复选框。有人可以帮助我吗?谢谢。
完整的代码是
class _StatefulDialogWidgetState extends State<StatefulDialogWidget> {
....
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Dropdown's
Dropdown(0, widget.ReceiveArgs, _lListOfDepthList),
Dropdown(1, widget.ReceiveArgs, _lListOfDepthList),
Dropdown(2, widget.ReceiveArgs, _lListOfDepthList),
Dropdown(3, widget.ReceiveArgs, _lListOfDepthList),
Dropdown(4, widget.ReceiveArgs, _lListOfDepthList),
// Listview with FutureBuilder
AptListview(),
],
);
}
Run Code Online (Sandbox Code Playgroud)
列表视图代码
Widget AptListview() {
return FutureBuilder<List<String>>(
future: AptNameListView(widget.ReceiveArgs),
builder: (context, snapshot) {
if (_bLastDepth == false) {
return Text("Select Address");
} else {
if (snapshot.hasData == false || snapshot.data.isEmpty …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 API 解析数据。为此,我使用 FutureBuilder 在 ListView 中列出所有解析的数据。
我已经执行了无效检查,snapshot.data但我继续在段中收到此错误snapshot.data.length,它说,The property 'length' can't be unconditionally accessed because the receiver can be 'null'. Try making the access conditional (using '?.') or adding a null check to the target ('!').
我在本节中也有类似的错误snapshot.data[i],其中写着The method '[]' can't be unconditionally invoked because the receiver can be 'null'. Try making the call conditional (using '?.') or adding a null check to the target ('!').
这是我的代码部分:
body: Container(
child: FutureBuilder(
future: getData('hello'), …Run Code Online (Sandbox Code Playgroud) 我正在使用flutter_blue蓝牙服务的包。我想检查设备是否具有蓝牙功能。方法isAvailable好像可以。但是,它返回一个 Future<bool>,我试图将其放入变量中,如下所示:
import 'package:flutter_blue/flutter_blue.dart';
class BT_Base {
final FlutterBlue _fb = FlutterBlue.instance;
bool BTAvailable = true; // as a default placeholder
BT_Base () {
BTAvailable = _fixAvail();
}
_fixAvail () async {
return await _fb.isAvailable;
}
...
Run Code Online (Sandbox Code Playgroud)
我尝试从中获取未来价值并将其存储到BTAvailable. 随后,我使用固定BTAvailable字段来获取要传递到的适当的 Widget,如下所示:
class BTDevicePrompt extends StatelessWidget {
@override
Widget build(BuildContext context) {
BT_Base bt = BT_Base();
var btDeviceRes = bt.scan();
if(!bt.BTAvailable) return Text('Bluetooth unavailable on device...');
else if (btDeviceRes.isEmpty) return Text('No Bluetooth devices in …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 futurebuilder 中登录后进行导航。api 请求成功完成,但测试时导航出错。帮助我如何正确使用 futurebuilder。
child: ElevatedButton(
onPressed: () {
// Validate returns true if the form is valid, or false otherwise.
if (_mobileKey.currentState!.validate()) {
FutureBuilder<Loginuser>(
future: loginuser(mobileController.text.toString(),
passwordController.text.toString()),
builder: (context, snapshot) {
if (snapshot.hasData) {
context.go('/Home');
return Text(snapshot.data!.message);
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
// By default, show a loading spinner.
return const CircularProgressIndicator();
},
);
}
context.go('/Home');
},
child: const Text('Submit')),
Run Code Online (Sandbox Code Playgroud)
我试过这个它不起作用。我使用“ go_router: ^5.2.4 ”进行导航
我正在开发一个复杂的 Web 应用程序,其中我有时需要从后端 API 获取数据。有时,我需要在 Future Builder 中调用 2 个 future 函数来使用它们的值。然而,它使代码变得混乱,因为对于每个 FutureBuilder,我需要检查它是否有数据并返回小部件。看起来像这样。
return FutureBuilder<object>(
future: func1(),
builder:(context, AsyncSnapshot<object> snapshot1){
if(snapshot1.hasData){
return FutureBuilder<object>(
future: func2(),
builder:(context, AsyncSnapshot<object> snapshot2){
if(snapshot2.hasData){
return widget;
}else{
return CircularProgressIndicator();
}
}
),
}else{
return CircularProgressIndicator();
}
}
);
Run Code Online (Sandbox Code Playgroud)
还有其他更简单的方法吗?我只能使用一个 FutureBuilder,这样我就不必每次都返回小部件,即(CircularProgressIndicator)。谢谢。
flutter flutter-layout flutter-web flutter-bloc flutter-futurebuilder
flutter ×10
dart ×5
future ×2
setstate ×2
checkbox ×1
flutter-bloc ×1
flutter-getx ×1
flutter-web ×1
routes ×1