Skip to content Skip to sidebar Skip to footer

Flutter - Textfield Auto Complete Suggestions From Sqlite

I am trying to create an autocomplete TextField. This one is working when I used the below hardcoded List. List suggestions = [ 'Apple', 'Actual', 'Actua

Solution 1:

Assuming that this code is within your DBManager class:

staticFuture<List<String>> selectItems() async {
 var db =await _openDB();
 final usersData =await db.query("albums");
 return usersData.map((Map<String, dynamic> row) {
   return row["albumname"] asString;
 }).toList();
}

You should use setState() to update the state of your Widget class:

List<String> _itemsList;

  void_loadItems() async {
    setState(() => _itemsList =  awaitDBManager.selectItems());
  }

Otherwise, your Container won't get notified of the asynchronous update of the data.

Also, it's important to call _loadItems(), in the Widget class, immediately after the layout has been loaded, to make sure that the data is fetched:

@overridevoidinitState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) =>_loadItems(context));
  }

Follows the full example code:

voidmain() {
  runApp(MaterialApp(home: HomeScreen(), title: 'Flutter Example'));
}

classHomeScreenextendsStatefulWidget {
  HomeScreen({Key key}) : super(key: key);

  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class_HomeScreenStateextendsState<HomeScreen> {
  List<String> _itemsList;

  @overridevoidinitState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) =>_loadItems(context));
  }

  void_loadItems() async {
    setState(() => _itemsList = awaitDBManager.selectItems());
  }

  @overrideWidgetbuild(BuildContext context) {
    returnScaffold(
      body: Center(
        child: Container(
          width: _width * 2,
          height: 50,
          padding: constEdgeInsets.symmetric(horizontal: 10),
          child: AutoCompleteTextField(
            controller: txtAlbumSuggest,
            suggestions: _itemsList,
            clearOnSubmit: false,
            style: TextStyle(color: Colors.black, fontSize: 15),
            decoration: InputDecoration(
                border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(20.5))),
            itemFilter: (item, query) {
              return item.toLowerCase().startsWith(query.toLowerCase());
            },
            itemSorter: (a, b) {
              return a.compareTo(b);
            },
            itemSubmitted: (item) {
              txtAlbumSuggest.text = item;
            },
            itemBuilder: (context, item) {
              returnContainer(
                padding: EdgeInsets.all(20.0),
                child: Row(
                  children: <Widget>[
                    Text(
                      item,
                      style: TextStyle(color: Colors.black),
                    )
                  ],
                ),
              );
            },
          ),
        ),
      ),
    );
  }
}

Post a Comment for "Flutter - Textfield Auto Complete Suggestions From Sqlite"