微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在颤振中使用提供者

如何解决如何在颤振中使用提供者

如何在Flutter中使用provider....

http: ^0.13.1
provider: ^5.0.0

http 测试通过

import 'package:Flutter/material.dart';
import 'package:Flutter_movie/src/Home.dart';
import 'package:Flutter_movie/src/movie_info.dart';
import 'package:provider/provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider<MovieInfo>(create: (_) => MovieInfo()),],child: MaterialApp(
        title: 'Flutter Demo',theme: ThemeData(
          primarySwatch: Colors.blue,),home: Home(),);
  }
}

import 'package:Flutter/material.dart';
import 'package:Flutter_movie/model/movies.dart';
import 'package:Flutter_movie/selectPage.dart';
import 'package:Flutter_movie/src/movie_info.dart';
import 'package:provider/provider.dart';


class Home extends StatefulWidget {

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

class _HomeState extends State<Home> {

  Future<Movies> data;
  MovieInfo movieInfo;

  @override
  void initState() {
    super.initState();

    Provider.of<MovieInfo>(context,listen: false).fetchData();

  }



  @override
  Widget build(BuildContext context) {
    MovieInfo movieInfo = Provider.of<MovieInfo>(context);
    Movies result = movieInfo.result;

    return Scaffold(
      drawer: Drawer(
        child: Container(
          color: Colors.blueGrey,child: ListView(
            padding: EdgeInsets.only(top: 0.0),children: <Widget>[
              ListTile(
                title: Text('Dashboard'),ListTile(
                title: Text('Submit Reports'),ListTile(
                title: Text('InBox Requests'),appBar: AppBar(
        title: Text('영화 정보 검색기'),backgroundColor: Colors.blueGrey,leading: IconButton(icon: Icon(Icons.menu),onpressed: () {}),actions: <Widget>[
          //    IconButton(icon: Icon(Icons.search),IconButton(icon: Icon(Icons.help),bottom: PreferredSize(
          child: Padding(
            padding: const EdgeInsets.fromLTRB(0.0,0.0,10.0,16.0),child: Container(
              margin: EdgeInsets.only(left: 16.0),preferredSize: Size(0.0,30.0),body: Scaffold(
        backgroundColor: Colors.blueGrey,body: Column(
          children: <Widget>[
            TextField(
              controller: movieInfo.myController,onChanged: (text) {
                setState(() {
                  movieInfo.filteredItems.clear();
                  movieInfo.filteredItems.addAll(result.results
                      .where((item) => item.title.contains(text)));
                });
              },decoration: Inputdecoration(
                filled: true,fillColor: Colors.white,border: OutlineInputBorder(
                    borderSide: const BorderSide(color: Colors.white),borderRadius: BorderRadius.circular(40)),labelText: '검색',Expanded(
              child: GridView.count(
                  crossAxisCount: 3,childAspectRatio: 2 / 3.5,children: result == null ? [] : _buildShow(),);
  }


  Widget _buildItem(Results movies) {
    return InkWell(
      child: Card(
        color: Colors.blueGrey,margin: EdgeInsets.symmetric(vertical: 5.0,horizontal: 10.0),child: Column(
          children: [
            Image.network('https://image.tmdb.org/t/p/w500/${movies.posterPath}'),Text('${movies.title}',style: TextStyle(height: 1.5,fontSize: 15,fontWeight: FontWeight.bold),onTap: () {
        Navigator.of(context).push(
          MaterialPageRoute(
            builder: (context) => DetailScreen(movie: movies),);
      },);
  }


  List<Widget> _buildShow() {
    if (movieInfo.myController.text.isEmpty) {
      return movieInfo.result.results.map((movies) => _buildItem(movies)).toList();
    }
    return movieInfo.filteredItems.map((e) => _buildItem(e)).toList();
  }
}

出事了.... 首先看不到电影列表..

import 'package:Flutter/material.dart';
import 'package:Flutter_movie/model/movies.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;

class MovieInfo extends ChangeNotifier {
  Movies _result;

  Movies get result => _result;

  final myController = TextEditingController();
  final List<Results> filteredItems = [];

  Future<Movies> fetchData() async {
    var url = Uri.parse(
        'https://api.themoviedb.org/3/movie/upcoming?api_key=&language=ko-KR&page=1');
    var response = await http.get(url);


    Movies result = Movies.fromJson(json.decode(response.body));
    notifyListeners();
    return result;


  }


}

在我放置提供程序之前,运行良好 但是,当我尝试将 put provider 放入第一页时无法看到列表,当我尝试将文本放入文本文件中时,它说结果为空....

在杰森

{
    "dates": {
        "maximum": "2021-05-24","minimum": "2021-05-07"
    },"page": 1,"results": [
        {
            "adult": false,"backdrop_path": "","genre_ids": [
                14,28,12,878,53
            ],"id": 460465,"original_language": "en","original_title": "","overview": "","popularity": 6983.02,"poster_path": "","release_date": "2021-04-07","title": "모탈 컴뱃","video": false,"Vote_average": 7.9,"Vote_count": 1810
        },

想要在结果中使用数据..

解决方法

 class MovieInfo extends ChangeNotifier {
  Movies _result;

  Movies get result => _result;

  final myController = TextEditingController();
  final List<Results> filteredItems = [];

  Future<void> fetchData() async {
    var url = Uri.parse(
        'https://api.themoviedb.org/3/movie/upcoming?api_key=&language=ko-KR&page=1');
    var response = await http.get(url);
    Movies result = Movies.fromJson(json.decode(response.body));
    this.result = result;
    notifyListeners();
  }
}

然后访问结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。