인프런 커뮤니티 질문&답변

backboss님의 프로필 이미지
backboss

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

텍스트필드 디자인하기

provider 관련 질문 드립니다.

작성

·

118

0

provider 사용에 관해 질문 드립니다.

 

provider 를 같은 클래스로 여러 인스턴스를 만들어 사용할때

위젯에서 어떻게 자신이 구독중이 provider 를 찾아서 값을 바꿀수 있는가에 대해 질문 드립니다.

현재 아래와 같은 code 구성을 가지고 있습니다.

import 'package:flutter/material.dart';

import 'package:provider/provider.dart';

void main() {

runApp(

MultiProvider(

providers: [

Provider<GateWayProviderALL>(

create: (_) => GateWayProviderALL('sensor1', 1000),

),

Provider<GateWayProviderALL>(

create: (_) => GateWayProviderALL('sensor2', 1000),

),

],

child: MyApp(),

),

);

}

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return MaterialApp(

title: 'Flutter Demo',

home: MyHomePage(),

);

}

}

class MyHomePage extends StatelessWidget {

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: Text('Multi Sensor Display'),

),

body: Column(

mainAxisAlignment: MainAxisAlignment.center,

children: <Widget>[

Expanded(

child: ImageCanvasConsumeGateWay('sensor1'),

),

Expanded(

child: ImageCanvasConsumeGateWay('sensor2'),

),

],

),

);

}

}

class ImageCanvasConsumeGateWay extends StatelessWidget {

final String sensorName;

ImageCanvasConsumeGateWay(this.sensorName);

@override

Widget build(BuildContext context) {

// Provider의 인스턴스를 참조하도록 수정합니다.

final provider = Provider.of<GateWayProviderALL>(context);

return Consumer<GateWayProviderALL>(

builder: (context, imageProvider, child) {

CameraImageDTO? imageDto = provider.PopCameraImageDTO(sensorName);

if (imageDto != null) {

return CustomPaint(

painter: ImagePainter(imageDto.rowImage!),

size: Size(320 / 2, 180 / 2),

);

} else {

return Center(child: CircularProgressIndicator());

}

},

);

}

}

class ImagePainter extends CustomPainter {

final ui.Image image;

ImagePainter(this.image);

@override

void paint(Canvas canvas, Size size) {

// 그리는 로직 구현

}

@override

bool shouldRepaint(covariant CustomPainter oldDelegate) => false;

}

 

 

GateWayProviderALL 을 두번 생성해서
ImageCanvasConsumeGateWay 위젯에서 자신에게 맞는 provider 를 읽어와 값을 변경해주고 싶은데

찾아보니 provider 는 데이터 형으로 provider 을 찾아 오니

클래스를 여러개 파라고 하는데 하나의 클래스에서 인스턴스를 여럿 만들어 처리할순 없나여?


답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

"provider 를 같은 클래스로 여러 인스턴스를 만들어 사용할때 위젯에서 어떻게 자신이 구독중이 provider 를 찾아서 값을 바꿀수 있는가에 대해 질문 드립니다."

불가능한걸로 알고있습니다.

감사합니다!

backboss님의 프로필 이미지
backboss

작성한 질문수

질문하기