首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个文件中导入一个类,以调用Dart/Flutter中的未来

如何从另一个文件中导入一个类,以调用Dart/Flutter中的未来
EN

Stack Overflow用户
提问于 2022-07-27 05:25:36
回答 1查看 241关注 0票数 0

我想我在这里遗漏了一些很明显的东西,或者我不理解Dart的逻辑,但是我如何从另一个文件引用一个未来值。

例如:

在下面的类中,我将在一个名为home.dart的文件中获得以下信息;

代码语言:javascript
复制
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;


class Ken extends StatefulWidget {
  const Ken({Key? key}) : super(key: key);

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

class KenState extends State<Ken> {

  Future<dynamic> fetchDd() async {
    var daeUrl = "localhost";
    var daeresponse = await http.get(Uri.parse(daeUrl));
    var daedata = await jsonDecode(daeresponse.body);
    var daew = await daedata['de'];
    // print(daew);
    return daew;
  }

在我的第二个文件页面中。1. file

我想我可以打电话给home.dart文件,像这样直接访问未来。

代码语言:javascript
复制
import 'home.dart';


Future<dynamic> timeHere() async {
  KenState kenstate = KenState();
  var h = await kenstate.fetchDd();
  // print(h);
  return h;
}

void main() async {
  var c = await timeHere();
  print(c);
}

相反,我得到以下错误;

代码语言:javascript
复制
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/animated_icons.dart:9:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui show Paint, Path, Canvas;
       ^
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/animated_icons.dart:10:8: Error: Not found: 'dart:ui'
import 'dart:ui' show lerpDouble;
       ^
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/app.dart:5:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui;
       ^
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/app_bar_theme.dart:5:8: Error: Not found: 'dart:ui'
import 'dart:ui' show lerpDouble;
       ^
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/arc.dart:6:8: Error: Not found: 'dart:ui'
import 'dart:ui' show lerpDouble;
       ^
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/banner_theme.dart:5:8: Error: Not found: 'dart:ui'
import 'dart:ui' show lerpDouble;
       ^
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/bottom_app_bar_theme.dart:5:8: Error: Not found: 'dart:ui'
import 'dart:ui' show lerpDouble;
       ^
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/bottom_navigation_bar_theme.dart:5:8: Error: Not found: 'dart:ui'
import 'dart:ui' show lerpDouble;
       ^
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/bottom_sheet.dart:5:8: Error: Not found: 'dart:ui'
import 'dart:ui' show lerpDouble;
       ^
../../../../FlutterDev/flutter/packages/flutter/lib/src/material/bottom_sheet_theme.dart:5:8: Error: Not found: 'dart:ui'
import 'dart:ui' show lerpDouble;

我希望就如何解决这一问题提供任何指导。

先谢了。

EN

回答 1

Stack Overflow用户

发布于 2022-07-27 06:14:40

状态对象是由框架在膨胀一个StatefulWidget.createState方法以将其插入到树中时调用StatefulWidget方法来创建的。

只有在Dart项目本身,这种使用才是不正确的。

在颤振项目中使用:

代码语言:javascript
复制
void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: const PageOne(),
      routes: {
        'page_two': (context) => const PageTwo(),
      },
    );
  }
}

PageOne():

代码语言:javascript
复制
class PageOne extends StatefulWidget {
  const PageOne({Key? key}) : super(key: key);

  @override
  State<PageOne> createState() => PageOneState();
}

class PageOneState extends State<PageOne> {
  String value1 = 'empty';

  Future<String> fetchDd() async {
    await Future.delayed(const Duration(seconds: 1));
    value1 = 'Future String';

    return 'fromPageOne';
  }

  Future getValue() async {
    await fetchDd();
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SizedBox(
        width: double.infinity,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(value1),
            TextButton(
                onPressed: () {
                  getValue();
                },
                child: const Text('Get value')),
            TextButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('page_two');
                },
                child: const Text('Page Two')),
          ],
        ),
      ),
    );
  }
}

PageTwo():

代码语言:javascript
复制
class PageTwo extends StatefulWidget {
  const PageTwo({Key? key}) : super(key: key);

  @override
  State<PageTwo> createState() => _PageTwoState();
}

class _PageTwoState extends State<PageTwo> {
  String value2 = 'empty';

  Future timeHere() async {
    PageOneState pageOneState = PageOneState();

    value2 = await pageOneState.fetchDd();
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SizedBox(
        width: double.infinity,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(value2),
            TextButton(
                onPressed: () {
                  timeHere();
                },
                child: const Text('Get value')),
            TextButton(
                onPressed: () {
                  Navigator.of(context).pop();
                },
                child: const Text('Page Two'))
          ],
        ),
      ),
    );
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73132615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档