skip to Main Content

Flutter Error

I tried a couple of ways but I thik so that I am missing a particular method or function here.

2

Answers


  1. You may use FutureBuilder.

    Since you did not include full code, you have to adapt this to your purpose

    import 'package:flutter/material.dart';
    
    void main() => runApp(const MyApp());
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      static const String _title = 'Flutter Code Sample';
    
      @override
      Widget build(BuildContext context) {
        return const MaterialApp(
          title: _title,
          home: MyStatefulWidget(),
        );
      }
    }
    
    class MyStatefulWidget extends StatefulWidget {
      const MyStatefulWidget({super.key});
    
      @override
      State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
    }
    
    class _MyStatefulWidgetState extends State<MyStatefulWidget> {
      final Future<String> _calculation = Future<String>.delayed(
        const Duration(seconds: 2),
        () => 'Data Loaded',
      );
    
      @override
      Widget build(BuildContext context) {
        return DefaultTextStyle(
          style: Theme.of(context).textTheme.displayMedium!,
          textAlign: TextAlign.center,
          child: FutureBuilder<String>(
            future: getRequest, // a previously-obtained Future<String> or null
            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
              List<Widget> children;
              if (snapshot.hasData) {
                children = <Widget>[
                  const Icon(
                    Icons.check_circle_outline,
                    color: Colors.green,
                    size: 60,
                  ),
                  Padding(
                    padding: const EdgeInsets.only(top: 16),
                    child: Text('Result: ${snapshot.data}'),
                  ),
                ];
              } else if (snapshot.hasError) {
                children = <Widget>[
                  const Icon(
                    Icons.error_outline,
                    color: Colors.red,
                    size: 60,
                  ),
                  Padding(
                    padding: const EdgeInsets.only(top: 16),
                    child: Text('Error: ${snapshot.error}'),
                  ),
                ];
              } else {
                children = const <Widget>[
                  SizedBox(
                    width: 60,
                    height: 60,
                    child: CircularProgressIndicator(),
                  ),
                  Padding(
                    padding: EdgeInsets.only(top: 16),
                    child: Text('Awaiting result...'),
                  ),
                ];
              }
              return Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: children,
                ),
              );
            },
          ),
        );
      }
    }
    
    Login or Signup to reply.
  2. There are 2 main points in your question:

    1. How do I show Future values in Widgets? A/ You may use a FutureBuilder:

    Widget that builds itself based on the latest snapshot of interaction
    with a Future.

    The future must have been obtained earlier, e.g. during
    State.initState, State.didUpdateWidget, or
    State.didChangeDependencies. It must not be created during the
    State.build or StatelessWidget.build method call when constructing the
    FutureBuilder. If the future is created at the same time as the
    FutureBuilder, then every time the FutureBuilder’s parent is rebuilt,
    the asynchronous task will be restarted.

    with the future being the method or the API request itself (I’m not using any architecture so you don’t get lost)

    and 2. Why am I getting the undefined name in "questions" variable? A/ That’s because you’re declaring that variable: List<Question> questions outside the method where you’re calling it: "the build method", you could use a FutureBuilder as I said before or a StatefulWidget and calling an async method retrieving the data and updating the State of your list.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search