Flutter中initState未在Widget构建前执行 无法打印OMDb请求statusCode
问题排查与修复方案
1. 核心错误:initState 拼写错误
Flutter State 生命周期的初始化方法采用驼峰命名规范,你代码中写的initstate(s小写)属于自定义方法,不是系统会自动调用的生命周期方法,所以不会被触发,修改为正确写法即可:
@override void initState() { // 注意此处S为大写 super.initState(); print("pass"); loaddata(); }
2. 其他需要补全的配置项
- 代码中使用了
http库的get方法,需要先在pubspec.yaml中引入http依赖,同时在代码头部导入包:import 'package:http/http.dart' as http; - Android平台请求网络接口需要在
android/app/src/main/AndroidManifest.xml中添加网络权限声明:<uses-permission android:name="android.permission.INTERNET" /> - iOS平台需要在
ios/Runner/Info.plist中添加域名访问白名单配置,避免ATS策略拦截请求。
3. 修复后完整参考代码
import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; void main() { print("runned"); runApp(const MovieApp()); } class MovieApp extends StatefulWidget { const MovieApp({Key? key}) : super(key: key); @override _MovieAppState createState() => _MovieAppState(); } class _MovieAppState extends State<MovieApp> { @override void initState() { super.initState(); print("pass"); loaddata(); } loaddata() async { String url = "https://www.omdbapi.com/?s=Batman&page=2&apikey=2c8219b0"; final movies = await http.get(Uri.parse(url)); print(movies.statusCode); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('电影列表')), ), ); } }
内容的提问来源于stack exchange,提问作者Saleh Muahammad
相关产品推荐
相关产品推荐

