Flutter: Dart - Как показать сохраненную переменную? - PullRequest
0 голосов
/ 17 мая 2018

У меня две страницы дротика . [1]: https://i.stack.imgur.com/D1xaf.png

На 2-й странице я вычеркнул текст с веб-сайта и сохранил значение в строке с именем fetchedstring и печатает строки в командной строке console с помощью команды print.

Но я хочу, чтобы эта строка отображалась на моей главной странице дротика .

Как это сделать?

//DART FILE 1 HAS THE FOLLOWING CODE 
import 'package:flutter/material.dart';
import './function.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget 
{
@override
Widget build(BuildContext context) 
{
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(),
body: new Center(
child: new String(fetchedtext),//Here I Want The Fetched Text
),
),
);
}
}
//DART PAGE 2 HAS THE FOLLOWING CODE
import 'package:http/http.dart' as http;
import 'package:html/parser.dart' as parser;
import 'package:html/dom.dart';
mainz() async 
{
http.Response response = await http.get('https://www.google.com');    
Document document = parser.parse(response.body);
document.getElementsByTagName('a').forEach((Element element)
{
final String fetchedText = element.text;
print(fetchedText);
}
);
}
//I WANT THAT String "fetchedtext" to be displayed in my Dart Page1.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Использование Futurebuilder класс

import 'package:flutter/material.dart';
import 'dart:async';
void main() => runApp(new MyApp());

class MyApp extends StatelessWidget
{
  @override
  Widget build(BuildContext context)
  {
    var builder = FutureBuilder(
      future: mainz(),
      builder: (context, snapshot) {
        if (snapshot.hasError) {
          print(snapshot.error);
          return new Text("${snapshot.error}");
        }
        return snapshot.hasData
            ? new Center(
          child: Text(snapshot.data), //Here I Want The Fetched Text
        )
            : new CircularProgressIndicator();
      },
    );
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text("Title"),
        ),
        body: builder,
      )
    );
  }
}

Future<String>  mainz() async
{
  await new Future.delayed(new Duration(seconds: 3));
  return 'Sample data';
}
0 голосов
/ 17 мая 2018

Если мое понимание того, что вы пытаетесь сделать, верно, то вам нужно вставить это в самый конец файла function.dart:

List get_elements() {
  http.Response response = await http.get('https://www.google.com');    
  Document document = parser.parse(response.body);
  document.getElementsByTagName('a').forEach((e) => print(e));
  return document.getElementsByTagName('a');
}

Затем измените одну строку в вашем main.dart:

child: get_elements().first;

Обратите внимание, что если вы не хотите возвращать первый найденный элемент, просто удалите первый и используйте [], чтобы выбрать, какой элемент вы хотите получить, или, если вы хотите получить весь список, просто удалите .first, но тогда вы получите String.

...