Flutter的Raw Autocomplete OptionsViewBuilder无法显示snackbar

问题描述 投票:0回答:1

我正在尝试使用flutter的Raw Autocomplete类来显示 由文本框的输入确定的许多属性(图片、名称和价格)。 通过点击一种产品进行选择时,用户应该通过以下方式获得反馈 小吃店消息。 显示和建议工作正常,但小吃店不行。

我尝试使用生成器(正如文档建议使上下文可用),但这似乎不起作用。 我不断收到此错误“使用不包含支架的上下文调用 Scaffold.of()”。 欢迎任何帮助。

RawAutocomplete<Product>(
          optionsBuilder: (TextEditingValue textEditingValue) {
            return myProducts!.where((Product option) {
              // Search based on User.toString, which includes both name and
              // email, even though the display string is just the name.
              return option
                  .toString()
                  .contains(textEditingValue.text.toLowerCase());
            });
          },
          displayStringForOption: _displayStringForOption,
          fieldViewBuilder: (BuildContext context,
              TextEditingController textEditingController,
              FocusNode focusNode,
              VoidCallback onFieldSubmitted) {
            return TextFormField(
              controller: textEditingController,
              focusNode: focusNode,
              onFieldSubmitted: (String value) {
                onFieldSubmitted();
              },
            );
          },
          optionsViewBuilder: (BuildContext context,
              AutocompleteOnSelected<Product> onSelected,
              Iterable<Product> options) {
            return Align(
              alignment: Alignment.topLeft,
              child: Material(
                elevation: 4.0,
                child: SizedBox(
                  height: 200.0,
                  child: ListView.builder(
                    padding: const EdgeInsets.all(8.0),
                    itemCount: options.length,
                    itemBuilder: (BuildContext context, int index) {
                      final Product option = options.elementAt(index);
                      return Builder(
                        builder: (BuildContext context) {
                          return GestureDetector(
                            onTap: () {
                              print(Scaffold.of(context).hasAppBar);
                              refreshList(
                                context,
                                operation: 'add',
                                option,
                              );
                            },
                            child: ListTile(
                              title: InkWell(
                                  child: Text(_displayStringForOption(option) +
                                      " Price Kes. ${option.price}")),
                              leading: Image.network(
                                "http://192.168.1.38/ci/uploads/${option.image}",
                                errorBuilder: (context, error, stackTrace) {
                                  return Container(
                                    child:
                                        Image.asset("assets/images/camera.png"),
                                  );
                                },
                              ),
                            ),
                          );
                        },
                      );
                    },
                  ),
                ),
              ),
            );
          },
        ),```
flutter autocomplete snackbar
1个回答
0
投票

这显示了颤振自动完成中的小吃栏

 RawAutocomplete<Product>(
    optionsBuilder: (TextEditingValue textEditingValue) {
      return myProducts!.where((Product option) {
        // Search based on User.toString, which includes both name and
        // email, even though the display string is just the name.
        return option.toString().contains(textEditingValue.text.toLowerCase());
      });
    },
    displayStringForOption: _displayStringForOption,
    fieldViewBuilder: (BuildContext context, TextEditingController textEditingController, FocusNode focusNode,
        VoidCallback onFieldSubmitted) {
      return TextFormField(
        controller: textEditingController,
        focusNode: focusNode,
        onFieldSubmitted: (String value) {
          onFieldSubmitted();
        },
      );
    },
    optionsViewBuilder:
        (BuildContext ctx, AutocompleteOnSelected<Product> onSelected, Iterable<Product> options) {  
      return Align(
        alignment: Alignment.topLeft,
        child: Material(
          elevation: 4.0,
          child: SizedBox(
            height: 200.0,
            child: ListView.builder(
              padding: const EdgeInsets.all(8.0),
              itemCount: options.length,
              itemBuilder: (BuildContext ct, int index) {//<---here
                final Product option = options.elementAt(index);
                return Builder(//<---here
                  builder: (BuildContext c) {
                    return GestureDetector(
                      onTap: () { 
                          ScaffoldMessenger.of(context).showSnackBar(
                           SnackBar(content: Text('${option.toString()} 
                           selected'), duration: const Duration(seconds: 3)));
                        refreshList(
                          context,
                          operation: 'add',
                          option,
                        );
                      },
                      child: ListTile(
                        title: InkWell(
                            child: Text(_displayStringForOption(option) + " Price Kes. ${option.price}")),
                        leading: Image.network(
                          "http://192.168.1.38/ci/uploads/${option.image}",
                          errorBuilder: (context, error, stackTrace) {
                            return Container(
                              child: Image.asset("assets/images/camera.png"),
                            );
                          },
                        ),
                      ),
                    );
                  },
                );
              },
            ),
          ),
        ),
      );
    },
  )
© www.soinside.com 2019 - 2024. All rights reserved.