Herkese merhaba FutureBuilder kullanırken sorun yaşıyorum. Nasıl anlatmam gerektiğini bilemedim maddeler halinde anlattım. Kolay okunabilmesi için kendi kodumu sadeleştirip atmak istedim. Şimdi den çok teşekkür ederim. Kullandığım paketler html ve http flutter pub add http html.

A classının içinde iki tane ElevatedButton button var.
Buttonlara bastığım zaman B classı çalışıyor ve başka sayfaya geçiyor.
Buttonların onpresslerinde B().data(1); B().data(2); B clasının içindeki data methoduna 1 ve 2 gönderiyorum.
B classının içinde ki data methodu Future<dynamic> data(args) async { bu şekilde alıyorum.
B classının içinde ki listeden de final response = await http.get(Uri.parse(url[args])); bu şekilde çekiyorum.

List url = [
    "https://www.flutterforum.org/",
    "https://pub.dev/",
  ];

Sorunun çıktığı nokta FutureBuilder kısmı. data fonksiyonuna argüman gönderdiğim de future kısmında da argüman yazmam lazım. Başka bi yöntem varsa bilmiyorum.

FutureBuilder(
        future: data(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          return Text(
            "${snapshot.data}"
          );
import 'package:flutter/material.dart';
import "package:http/http.dart" as http;
import "package:html/parser.dart";

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: A(),
    );
  }
}

class A extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            ElevatedButton(
              child: const Text("Button1"),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (BuildContext context) => B()),
                  /*
                     B().data(1);
                  */
                );
              }
            ),
            ElevatedButton(
              child: const Text("Button2"),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (BuildContext context) => B()),
                  /*
                     B().data(2);
                  */
                );
              }
            ),
          ]
        )
      )
    );
  }
}
class B extends StatelessWidget {
  List url = [
    "https://www.flutterforum.org/",
    "https://pub.dev/",
  ];

  Future<dynamic> data() async {
  //Future<dynamic> data(args) async {
    //final response = await http.get(Uri.parse(url[args]));
    final response = await http.get(Uri.parse(url[1]));
    var document = parse(response.body);

    return document.getElementsByTagName("title")[0].text;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: FutureBuilder(
        future: data(),
        //future: data(),KOD BURDA PATLIYOR :D
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          return Text(
            "${snapshot.data}"
          );
        }
      ),
    );
  }
}
  • HseyinAkkaya replied to this.
    • BandoLero Şimdi anladım sizi. 1. sayfada bastığınız butona göre 2. sayfada url’e göre sayfa şekillensin istiyorsunuz. Bunu yapmak için constructor kullanarak 2. sayfayı oluşturmanız gerek. Bunu 2 şekilde yapabilirsiniz. 1. constructor ile id gönderirsiniz ve listeden o id’li url ile işlem yapılır. 2. ise sayfaya direk url gönderirsiniz. Bu şekilde hem listeye bağlı kalmaz hemde istediğiniz yerde farklı url’ler ile de sayfayı çağırabilirsiniz.
      id ile örnek

      
      import 'package:flutter/material.dart';
      import "package:http/http.dart" as http;
      import "package:html/parser.dart";
      
      void main() => runApp(MyApp());
      
      class MyApp extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return MaterialApp(
            home: A(),
          );
        }
      }
      
      class A extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return Scaffold(
              body: Center(
                  child: Column(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                ElevatedButton(
                    child: const Text("Button1"),
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (BuildContext context) => B(0)),
                        /*
                           B().data(1);
                        */
                      );
                    }),
                ElevatedButton(
                    child: const Text("Button2"),
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (BuildContext context) => B(1)),
                        /*
                           B().data(2);
                        */
                      );
                    }),
              ])));
        }
      }
      
      class B extends StatelessWidget {
        final List url = [
          "https://www.flutterforum.org/",
          "https://pub.dev/",
        ];
        final int urlId;
        B(this.urlId, {super.key});
      
        Future<dynamic> data(id) async {
          //Future<dynamic> data(args) async {
          //final response = await http.get(Uri.parse(url[args]));
          final response = await http.get(Uri.parse(url[id]));
          var document = parse(response.body);
      
          return document.getElementsByTagName("title")[0].text;
        }
      
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            appBar: AppBar(),
            body: FutureBuilder(
                future: data(urlId),
                //future: data(),KOD BURDA PATLIYOR :D
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  return Text("${snapshot.data}");
                }),
          );
        }
      }

      url’li örnek

      import 'package:flutter/material.dart';
      import "package:http/http.dart" as http;
      import "package:html/parser.dart";
      
      void main() => runApp(MyApp());
      
      class MyApp extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return MaterialApp(
            home: A(),
          );
        }
      }
      
      class A extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return Scaffold(
              body: Center(
                  child: Column(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                ElevatedButton(
                    child: const Text("Button1"),
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                            builder: (BuildContext context) =>
                                B("https://www.flutterforum.org/")),
                        /*
                           B().data(1);
                        */
                      );
                    }),
                ElevatedButton(
                    child: const Text("Button2"),
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                            builder: (BuildContext context) => B("https://pub.dev/")),
                        /*
                           B().data(2);
                        */
                      );
                    }),
              ])));
        }
      }
      
      class B extends StatelessWidget {
        const B(this.url, {super.key});
      
        final String url;
        Future<dynamic> data() async {
          //Future<dynamic> data(args) async {
          //final response = await http.get(Uri.parse(url[args]));
          final response = await http.get(Uri.parse(url));
          var document = parse(response.body);
      
          return document.getElementsByTagName("title")[0].text;
        }
      
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            appBar: AppBar(),
            body: FutureBuilder(
                future: data(),
                //future: data(),KOD BURDA PATLIYOR :D
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  return Text("${snapshot.data}");
                }),
          );
        }
      }

    HseyinAkkaya hocam aslında hata almıyorum yani hata almam için kodu çalıştırmam lazım. mantık hatası yapıyorum. futur: data(1), gönderirsem olmuyo. açıklamayı eksikmi yaptım acaba ? futurbuilder kısmında data() fonksiyonunu nasıl çağırabilirim ?

      HseyinAkkaya hocam kodu çalıştırma imkanınız varsa daha sağlıklı olur galiba. çünkü sorunu anlatamadığımı düşündüm. aslında basit bi şekilde yapmak istediğim şu deseydim belki daha anlaşılır olurdu.

      yapmak istediğim şu. 1. buttona bastığım zaman data() fonksiyonuna 1 göndersin ve url listesinden 1 i seçsin.

      1. buttona bastığım zamanda ise data fonksiyonuna 2 göndersin ve url listesinden 2. yi seçsin.

      Bunları yapıyorum zaten ama. data(args) olarak aldığım için. FuturBuilder da futur: data() diye çağırdığım zaman argüman göndermediğim için kod çalışmicak. yani mantık hatası yapıyorum.

      BandoLero Şimdi anladım sizi. 1. sayfada bastığınız butona göre 2. sayfada url’e göre sayfa şekillensin istiyorsunuz. Bunu yapmak için constructor kullanarak 2. sayfayı oluşturmanız gerek. Bunu 2 şekilde yapabilirsiniz. 1. constructor ile id gönderirsiniz ve listeden o id’li url ile işlem yapılır. 2. ise sayfaya direk url gönderirsiniz. Bu şekilde hem listeye bağlı kalmaz hemde istediğiniz yerde farklı url’ler ile de sayfayı çağırabilirsiniz.
      id ile örnek

      
      import 'package:flutter/material.dart';
      import "package:http/http.dart" as http;
      import "package:html/parser.dart";
      
      void main() => runApp(MyApp());
      
      class MyApp extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return MaterialApp(
            home: A(),
          );
        }
      }
      
      class A extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return Scaffold(
              body: Center(
                  child: Column(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                ElevatedButton(
                    child: const Text("Button1"),
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (BuildContext context) => B(0)),
                        /*
                           B().data(1);
                        */
                      );
                    }),
                ElevatedButton(
                    child: const Text("Button2"),
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (BuildContext context) => B(1)),
                        /*
                           B().data(2);
                        */
                      );
                    }),
              ])));
        }
      }
      
      class B extends StatelessWidget {
        final List url = [
          "https://www.flutterforum.org/",
          "https://pub.dev/",
        ];
        final int urlId;
        B(this.urlId, {super.key});
      
        Future<dynamic> data(id) async {
          //Future<dynamic> data(args) async {
          //final response = await http.get(Uri.parse(url[args]));
          final response = await http.get(Uri.parse(url[id]));
          var document = parse(response.body);
      
          return document.getElementsByTagName("title")[0].text;
        }
      
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            appBar: AppBar(),
            body: FutureBuilder(
                future: data(urlId),
                //future: data(),KOD BURDA PATLIYOR :D
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  return Text("${snapshot.data}");
                }),
          );
        }
      }

      url’li örnek

      import 'package:flutter/material.dart';
      import "package:http/http.dart" as http;
      import "package:html/parser.dart";
      
      void main() => runApp(MyApp());
      
      class MyApp extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return MaterialApp(
            home: A(),
          );
        }
      }
      
      class A extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return Scaffold(
              body: Center(
                  child: Column(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                ElevatedButton(
                    child: const Text("Button1"),
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                            builder: (BuildContext context) =>
                                B("https://www.flutterforum.org/")),
                        /*
                           B().data(1);
                        */
                      );
                    }),
                ElevatedButton(
                    child: const Text("Button2"),
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                            builder: (BuildContext context) => B("https://pub.dev/")),
                        /*
                           B().data(2);
                        */
                      );
                    }),
              ])));
        }
      }
      
      class B extends StatelessWidget {
        const B(this.url, {super.key});
      
        final String url;
        Future<dynamic> data() async {
          //Future<dynamic> data(args) async {
          //final response = await http.get(Uri.parse(url[args]));
          final response = await http.get(Uri.parse(url));
          var document = parse(response.body);
      
          return document.getElementsByTagName("title")[0].text;
        }
      
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            appBar: AppBar(),
            body: FutureBuilder(
                future: data(),
                //future: data(),KOD BURDA PATLIYOR :D
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  return Text("${snapshot.data}");
                }),
          );
        }
      }
      Write a Reply...