标签: flutter-futurebuilder

项目构建器在futurbuilder Flutter中没有被触发

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。请帮我解决。提前谢谢你

flutter flutter-layout flutter-futurebuilder

2
推荐指数
1
解决办法
507
查看次数

错误:必须返回非空值,因为返回类型“Widget”不允许为空

使用 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-futurebuilder

2
推荐指数
1
解决办法
8372
查看次数

Flutter 安全存储错误 Null 检查运算符用于 null 值

我正在尝试制作一个包含登录屏幕和主屏幕(目前只有两个屏幕)的 Flutter 应用程序。我也在使用 Flutter 安全存储和 Http 库。

\n

每当应用程序启动时,我希望应用程序检查两个属性(accessKey 和 accessId)是否存储在安全存储中。如果未找到 accessId,则会自动生成并使用 Uuid 库进行分配。而accessKey不是本地生成的,而是由API提供的。

\n

应用程序导航至:
\n1)。HomeScreen,如果 accessKey 存储在安全存储中并且身份验证成功。
\n2). SignInScreen,如果没有找到accessKey或者认证失败。

\n

我的问题是,每次执行读取操作时,安全存储都会抛出错误“对空值使用空检查运算符”。我已经初始化了存储变量,但这个问题仍然发生。

\n

这是我的安全存储类代码:

\n
import '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)

dart flutter flutter-futurebuilder

2
推荐指数
1
解决办法
3088
查看次数

在 FutureBuilder 中使用 GetX 构建列表 - UI 未更新

我正在创建一个待办事项列表(某种)应用程序。我有一个使用 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)

flutter flutter-futurebuilder flutter-getx

2
推荐指数
1
解决办法
2727
查看次数

Flutter FutureBuilder 不断地 Fireing 和重建。它会在每次重建时生成一个新的随机数 - 如何防止这种情况发生?

语境

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)

future setstate dart flutter flutter-futurebuilder

2
推荐指数
1
解决办法
398
查看次数

如何正确使用FutureBuilder中的setState?

我正在制作一个页面,其中包含一些相互交互的保管箱和一个 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)

checkbox setstate dart flutter flutter-futurebuilder

1
推荐指数
1
解决办法
5118
查看次数

为什么 snapshot.data.length 出现错误?

我正在尝试从 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)

dart flutter flutter-futurebuilder

1
推荐指数
2
解决办法
3611
查看次数

如何将 Future&lt;bool&gt; 中的“bool”值获取到字段变量中以供以后使用

我正在使用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)

future dart flutter flutter-futurebuilder

1
推荐指数
1
解决办法
3567
查看次数

Futurebuilder 内的导航

我正在尝试在 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 ”进行导航

routes flutter flutter-futurebuilder flutter-go-router

1
推荐指数
1
解决办法
1235
查看次数

如何在FutureBuilder中调用2个返回Future值的Future函数?

我正在开发一个复杂的 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

0
推荐指数
1
解决办法
858
查看次数